SlideShare a Scribd company logo
お小遣いで
Kubernetesクラスタ
@第16回まどべんよっかいち
2018/10/13
のぶクマ(@kumar0001)
アジェンダ
個人で費用を抑えてKubernetesクラ
スタを運用するために調査・検討・
試行してみたことを紹介
• Kubernetesクラスタの構成と費用
➢Azure Kubernetes Service(AKS)
➢ConoHa VPSでの構築
➢Google Kubernetes Engine(GKE)
はじめに
事の発端
次リリースの新機能として、
駅コードの報告、オンライン
更新機能に着手
駅のコード(サイバネコード)は
非公開情報のため、有志での収
集が必要
アプリからの報告機能と、オン
ラインでの駅コード情報の更新
機能を追加して対応
駅コードを管理するAPIが必要に
Kumalica v0.4.1を2016年4月に公開
API基盤の条件
Dockerコンテナベースであること
• これまでDockerコンテナを利用してきたことを踏襲
サーバ費用を抑えられること
• 個人が非営利で運用するため、サーバの利用にあまり費用をかけら
れない(マネタイズが確立するまでの持ち出しを抑える)
• 予算は
耐障害性があること
• フリーソフトとは言え、障害が発生してサービスが中断しないようにした
い。これまでの環境ではこれが実現できない
モバイルアプリから駅コードの報告/駅コードの更新取得を
受けるAPIをどこで稼働させるか?
Dockerコンテナを
使う理由
開発環境と運用環境の統一
• 開発環境から運用環境までDockerコンテナのデプロイで統一され
るため、開発から運用までのギャップがない
移植性
• Webサーバなどミドルウェアを含んだ環境をコンテナイメージ化
するので、異なる運用環境に移植しやすい
• ミドルウェアのバージョンなど稼働環境をコンテナに閉じ込めら
れる
サーバではなくサービスに注力したい
• 開発ではコンテナ作成までを考えればよく、自動化もしやすい
• 運用もコンテナをどうデプロイするかに注力できる
Dockerコンテナ基盤
の候補
Dockerコンテナを稼働させるサーバ/サービスの候補で、
費用を抑えられる構成を検討する
Kubernetes
• Dockerコンテナの運用・管理基盤のデファクトスタンダード
• マネージドサービスにもオンプレミスでの構築にも対応
• 障害発生時の自動復旧にすぐれている
Azure Web App for Containers
• 単一のDockerコンテナイメージを稼働できる。昨年秋にGA
• 複数コンテナのデプロイはプレビュー中
• Basicプラン以上が対応(B1:1コア/1.75GBで¥7,235.76/月)
Docker Swarm mode
• 今となっては…
Kubernetesとは
Kubernetesとは
• クーベネティス / クーベルネイテス
• ギリシャ語で航海長またはパイロット
• コンテナのデプロイ・管理を行うオーケスト
レーションシステム
• dockerコンテナだけに限定しない
https://ja.m.wikipedia.org/wiki/%E3%83%95%E3%82%A1%E3%82%
A4%E3%83%AB:HUMBER_BRIDGE.JPG
(CC BY-SA 3.0)
Kubernetesの
システム構成
https://commons.wikimedia.org/wiki/File:Kubernetes.png
(CC BY-SA 4.0)
コンテナを管理するMasterと、コンテナがデプロイされ
るNodeから構成される
Kubernetesでの
サービスの公開
Service
• クラスタ内外からPodへのアクセスを提供する。L4レベルでの
負荷分散
• NodePort
• Load Balancer: クラウドのL4ロードバランサーのみ対応
Ingress
• クラスタ外部からのPodへのアクセスを提供する。
• URLからサービスに振り分けられるL7レベルでの負荷分散
✓外部型: GKEなどクラウドのみ対応
✓内部型: nginx-ingress, traefixなど
Kubernetesでの
サービスの公開
NortPort
node node node
NodePort
30123
各Nodeに共通したポート番号がサービスごとに割り当て
られる
・通常は30000~32767の範囲
・外部からのアクセスが可能(実際にはロードバラン
サーを経由してNodeにアクセスさせる)
・Podへのアクセスは負荷分散される
NodePort
30123
NodePort
30123
pod pod pod
Kubernetesでの
サービスの公開
Load Balancer
node node node
ロードバランサーが作成されて、外部からアクセス可能
な仮想IPアドレスを割り当てる。
ロードバランサーへのアクセスは、各ノードに分散され
て、そこからPodにさらに負荷分散される。
・ AKS,GKEなどクラウドでしか提供されていない
・L4なので、URLでの振り分けに対応しない
pod pod pod
Load Balancer
100.x.y.z:80
Kubernetesでの
サービスの公開
Ingress (外部型)
GKEなどでは、クラウドのL7ロードバランサーが作成され
て、URLに対応するサービスへと振り分けられる。
・サービスはNodePortでアクセスされる
node node node
pod pod pod
Ingress (L7 Load Balancer)
/api/stationcode ⇒ StationCodeService
/api/cardhistory ⇒ CardHistoryService
NodePort
30123
NodePort
30123
NodePort
30123
NodePort
30122
NodePort
30122
NodePort
30122
Kubernetesでの
サービスの公開
Ingress (内部型)
Ingressの処理を行うPodをデプロイする。
外部からはL4ロードバランサーを経由して、各Nodeにあ
るIngerssコントローラーPodにアクセスされて、URLに対
応するサービスのPodに転送される。
node node node
pod pod pod
Ingress Controller Pod
/api/stationcode ⇒ StationCodeService
/api/cardhistory ⇒ CardHistoryService
NodePort
30123
NodePort
30123
NodePort
30123
NodePort
30122
NodePort
30122
NodePort
30122
L4 Load Balancer
100.x.y.z:80
Kubernetesの実
行環境
オンプレミス・VPS・クラウドIaaS
• kubeadmなどのツールを用いて、物理サーバ/仮想サーバにクラス
タを構築する
マネージドサービス
• クラウドのサービスとして利用する
• masterやnodeを構築する必要がない
ローカル環境
• minikubeなどのツールでPCなどのローカル環境に構築する
• 通常はnodeが1つだけの環境となり、あくまで開発用
費用を抑えるた
めの方針
ノード数
• masterを構築する場合、シングルノードとする
• nodeは2ないし3ノードとする(3ノード以上が望ましいが)
ロードバランサー
• マネージドサービスもVPSも1台あたりの課金のため、ロード
バランサーの台数を減らす
➢Load Balancer型のServiceは利用しない
➢内部型のIngressを設置して、Ingress Controller Podへの負
荷分散にロードバランサーを用いる
インスタンスサイズ
• APIはこれから開発するため負荷試験ができない。このため、
最低限のCPU/RAMを用いる(1CPU/1GBメモリ以上)
Azure Kubernetes
Service(AKS)
方法その1
AKSでの費用
・ノードに使用できるVMのメモリは基本的に4GB以上
・利用できるインスタンスでは、B2sの約3,916円/月が最
安で、3ノード以上が推奨のため、11,748円/月から利用
できる
・ロードバランサーはStandardタイプだと2,038円/月
結論: AKSでの運用費用は1.4万円/月から
ConoHaでのKubernete
クラスタ構築
方法その2
ConoHaって?
GMOによるVPSサービスで、OpenStackで構築されている
・応援団長(マスコットキャラ)美雲このは
構成
利用者
ConoHa VPS
管理者
master
(2GB)
node-1
(1GB)
node-2
(1GB)
ロードバランサー
インターネット
https://knowledge.sakura.ad.jp/4724/
(CC BY 4.0)インターネット
Traefik
Ingress
Traefik
Ingress
master/nodeのVMを作成して、ポート開放・Dockerのインス
トールなどを行い、k8sクラスタを構成する。
・masterのサーバも用意する必要がある
・Ingressは内部型しか利用できない(今回はTraefikを利用)
・今回は利用しないがLoad Balancer型のServiceに対応していな
い(Sakura VPSのように自分でコードを書けば利用可)
pod
pod
費用について
2018年9月の利用明細(1日あたり164円くらい)
⇒1か月あたり5,000円前後で2ノードのk8sクラスタを運用
できる
(4GBメモリ×3node+2GB×1masterだと12,000円前後)
構築の問題点
■クラスタの構築に50時間ほどかかった
◎事前学習
・公式ドキュメントを通勤途中に閲覧して、方法を調査
⇒ 1日1.0時間×20日間 ≒20時間
◎構築作業
・作成したサーバでドキュメントに従ってクラスタを構築
・動作しない原因の調査は、通勤途中にWeb検索や公式ド
キュメントの読み込みで対応
⇒1日2.5時間×8日間(構築)+1日1.0時間×10日間(調査)
≒30時間
■問題点
・Kubernetesクラスタを利用すること自体が初めてで、構築
でのトラブルが、操作の不備によるものかわからず、対応に
時間がかかった。
(ローカル環境では出ない問題もあった)
・k8sやTraefikの進化が激しく、調査で見つけた資料が古く
なっていることもあった。
⇒最初はマネージドサービスを利用してk8sになれるべき?
(いったん構築できればよいが…)
メモリの利用状況
GKE
Google Kubernetes
Engine
方法その3
構成
利用者
GCP
管理者 master
node-1
(3.75 GB)
ロードバランサー
インターネット
https://knowledge.sakura.ad.jp/4724/
(CC BY 4.0)インターネット
Traefik
Ingress
Traefik
Ingress
・ Ingressは外部型と内部型の両方に対応しているが、外部型は
名前空間ごとに1個作成される(課金up↑)ので、内部型を使う。
・masterのサーバはGKEが提供、管理するため課金対象外
・今回は利用しないが、Load Balancer型のServiceに対応する。
pod
pod
Traefik
Ingress
pod
node-2
(3.75 GB)
preemptive
node-3
(3.75 GB)
preemptive
preemptive
インスタンス
GCPのPreemptibleインスタンスは、以下の制限があるが、
非常に安価である。
■制限
・GCPがいつでも終了させることができる
・24時間実行すると、必ず終了させられる
・常に利用できるわけではない
→非プリエンプティブなノードが1個は必要
■費用
n1-standard-1(1CPU/3.75GBメモリ)
東京リージョン
・31.17米ドル/1か月
プリエンプティブだと
・9.67米ドル/1か月
→非プリエンプティブなノード1台に、負荷に応じてプリエ
ンプティブなノードを追加することで安価に運用できる
(終了時はk8sによって自動復旧)
費用について
◎1か月あたりの費用
・n1-standard-1 × 1台 $31.17
・ n1-standard-1(プリエンプティブ) × 2台 $19.34
・L4ロードバランサー $28.27
合計 $ 78.78(約8,744円)
※非プリエンプティブなノードだけだと$121.78/月(約1.4
万円/月)でAKSと同程度になる。
◎まとめ
プリエンプティブなノードの活用で費用を抑えられるが、
ロードバランサーの費用がかさむため、それなりに費用が
かかる。
→非プリエンプティブなノードだけでも、VPSで同スペッ
クを構築した場合と大きく差があるわけでないので、プリ
エンプティブなノードを活用できれば、安価に運用できる
のでは?
◎課題
プリエンプティブなノードでアプリ・APIが終了させられる
場合を考慮する必要がある(障害と同じ対応でよい?)
まとめ
まとめ
VMへのクラスタ構築で安価に運用できるが…
• 小さいインスタンスを使えば費用を月5-6,000円に抑えられるが、すで
にメモリが73%利用されていて、Webアプリ/APIの利用が進むと不足
する可能性がある
• マネージドサービスと同程度のインスタンスサイズだとあまり費用が
変わらないので、保守・運用のコストを考えるとマネージドサービス
に移行したほうがよさそう
やはりマネージドサービスで?
• GKEのプリエンプティブなノードを活用すると、運用費用を月1万円以
内に抑えらえるが、障害と同じ事象への考慮が必要
• 非プリエンプティブなノードだけの場合、月1.4万円が最低ライン
(ノード数を2個にすれば月1.0万円程度に)

More Related Content

PDF
GKE に飛んでくるトラフィックを 自由自在に操る力 | 第 10 回 Google Cloud INSIDE Games & Apps Online
PPTX
Knative Eventing 入門(Kubernetes Novice Tokyo #11 発表資料)
PDF
Presto ベースのマネージドサービス Amazon Athena
PDF
Spring Boot × Vue.jsでSPAを作る
PDF
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
PDF
楽天における大規模データベースの運用
PDF
IAM Roles Anywhereのない世界とある世界(2022年のAWSアップデートを振り返ろう ~Season 4~ 発表資料)
PPTX
Kubernetes環境に対する性能試験(Kubernetes Novice Tokyo #2 発表資料)
GKE に飛んでくるトラフィックを 自由自在に操る力 | 第 10 回 Google Cloud INSIDE Games & Apps Online
Knative Eventing 入門(Kubernetes Novice Tokyo #11 発表資料)
Presto ベースのマネージドサービス Amazon Athena
Spring Boot × Vue.jsでSPAを作る
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
楽天における大規模データベースの運用
IAM Roles Anywhereのない世界とある世界(2022年のAWSアップデートを振り返ろう ~Season 4~ 発表資料)
Kubernetes環境に対する性能試験(Kubernetes Novice Tokyo #2 発表資料)

What's hot (20)

PDF
Ingress on Azure Kubernetes Service
PDF
Pod Security AdmissionによるKubernetesのポリシー制御(Kubernetes Novice Tokyo #21 発表資料)
PDF
Google Cloud Game Servers 徹底入門 | 第 10 回 Google Cloud INSIDE Games & Apps Online
PDF
[Cloud OnAir] BigQuery の仕組みからベストプラクティスまでのご紹介 2018年9月6日 放送
PPTX
タクシーxAIを支えるKubernetesとAIデータパイプラインの信頼性の取り組みについて [SRE NEXT 2020]
PDF
[Cloud OnAir] Google Cloud で実現するバックアップ ディザスタリカバリのベストプラクティス 2019年4月25日 放送
PDF
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
PDF
ZOZOTOWNのCloud Native Journey
PPTX
どうやって決める?kubernetesでのシークレット管理方法(Cloud Native Days 2020 発表資料)
PDF
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
PPTX
FINAL FANTASY Record Keeperのマスターデータを支える技術
PDF
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PPTX
クラウドでも非機能要求グレードは必要だよね
PPTX
Selenium×PostgreSQL15×Grafanaで思い出を保存&分析するプロジェクト(第35回PostgreSQLアンカンファレンス@オンライン...
PDF
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
PPTX
KeycloakでAPI認可に入門する
PDF
AngularとSpring Bootで作るSPA + RESTful Web Serviceアプリケーション
PPTX
Infrastructure as Code自身のテストを考える
PDF
【CNDT2022】SIerで実践!クラウドネイティブを普及させる取り組み
PPTX
Kubernetes (K8s) 簡介 | GDSC NYCU
Ingress on Azure Kubernetes Service
Pod Security AdmissionによるKubernetesのポリシー制御(Kubernetes Novice Tokyo #21 発表資料)
Google Cloud Game Servers 徹底入門 | 第 10 回 Google Cloud INSIDE Games & Apps Online
[Cloud OnAir] BigQuery の仕組みからベストプラクティスまでのご紹介 2018年9月6日 放送
タクシーxAIを支えるKubernetesとAIデータパイプラインの信頼性の取り組みについて [SRE NEXT 2020]
[Cloud OnAir] Google Cloud で実現するバックアップ ディザスタリカバリのベストプラクティス 2019年4月25日 放送
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
ZOZOTOWNのCloud Native Journey
どうやって決める?kubernetesでのシークレット管理方法(Cloud Native Days 2020 発表資料)
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
FINAL FANTASY Record Keeperのマスターデータを支える技術
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
クラウドでも非機能要求グレードは必要だよね
Selenium×PostgreSQL15×Grafanaで思い出を保存&分析するプロジェクト(第35回PostgreSQLアンカンファレンス@オンライン...
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
KeycloakでAPI認可に入門する
AngularとSpring Bootで作るSPA + RESTful Web Serviceアプリケーション
Infrastructure as Code自身のテストを考える
【CNDT2022】SIerで実践!クラウドネイティブを普及させる取り組み
Kubernetes (K8s) 簡介 | GDSC NYCU
Ad

Similar to お小遣いでKubernetesクラスタ (7)

PDF
AKSとTerraformでKubernetesクラスター作成
PDF
Kubernetesを触ってみた
PPTX
Java on Kubernetes on Azure
PDF
Kubernete超概要
PDF
Wordpress案件にgkeを採用してみた(短縮版)
PDF
最近良く聞く Kubernetes を体験してみた イントロ + 活用編
PPTX
AKS (k8s) Hands on Lab Contents
AKSとTerraformでKubernetesクラスター作成
Kubernetesを触ってみた
Java on Kubernetes on Azure
Kubernete超概要
Wordpress案件にgkeを採用してみた(短縮版)
最近良く聞く Kubernetes を体験してみた イントロ + 活用編
AKS (k8s) Hands on Lab Contents
Ad

More from Nobuaki Aoki (20)

PPTX
このはちゃんとConoHaと私
PPTX
Apache Usergridについて(公開用)
PPTX
Kumalicaのご紹介(公開用)
PPTX
Windows 10 mobile uwpアプリの始め方~continuum編~ (公開用)
PPTX
Windows 10 mobileでnfc~suica・edy対応編~(公開用)
PPTX
Blog=pelican+bit bucket+docker
PPTX
第1回三重合同懇親会
PPTX
IoTの始め方~.NET Micro Framework編
PPTX
Getting started with edison
PPTX
第11回まどべんよっかいちの告知
PPTX
第1回三重合同懇親会の告知
PPTX
(仮)登別クマ牧場のテツロウについて
PPTX
まどべんよっかいちのご紹介
PPTX
Microsoft Azure Mobile Serviceによるアプリ構築
PPTX
mbedとwindows 8.1
PPTX
Windows.Web.Http.HttpClientとWebAuthenticationBroker
PPTX
Windows phone 8プログラミング~gps&地図編~
PPTX
Windows Azure Mobile Servicesによるアプリ構築
PPTX
Windows phone 8のデバイスを使おう~カメラ&フォト編~(公開用)
PPTX
Windows phone 8のデバイスを使おう~近接通信編~(公開用)
このはちゃんとConoHaと私
Apache Usergridについて(公開用)
Kumalicaのご紹介(公開用)
Windows 10 mobile uwpアプリの始め方~continuum編~ (公開用)
Windows 10 mobileでnfc~suica・edy対応編~(公開用)
Blog=pelican+bit bucket+docker
第1回三重合同懇親会
IoTの始め方~.NET Micro Framework編
Getting started with edison
第11回まどべんよっかいちの告知
第1回三重合同懇親会の告知
(仮)登別クマ牧場のテツロウについて
まどべんよっかいちのご紹介
Microsoft Azure Mobile Serviceによるアプリ構築
mbedとwindows 8.1
Windows.Web.Http.HttpClientとWebAuthenticationBroker
Windows phone 8プログラミング~gps&地図編~
Windows Azure Mobile Servicesによるアプリ構築
Windows phone 8のデバイスを使おう~カメラ&フォト編~(公開用)
Windows phone 8のデバイスを使おう~近接通信編~(公開用)

お小遣いでKubernetesクラスタ