More Related Content Similar to ダイ・ハード in the Kubernetes world (20) More from Toru Makabe (12) ダイ・ハード in the Kubernetes world1. ダイ・ハード
in the Kubernetes world
真壁 徹
クラウドソリューションアーキテクト
日本マイクロソフト株式会社
2018/12/18
Container Xmas Party
しぶといKubernetes使いになろう
2. 自己紹介
{
“名前” : “真壁 徹(まかべ とおる)”,
“所属” : “日本マイクロソフト株式会社”,
“役割” : “クラウド ソリューションアーキテクト”,
“経歴” : “大和総研 → HP Enterprise”,
“特技” : “クラウド & オープンソース”,
“資格” : “CNCF Certified Kubernetes Admin.”,
“Twitter” : “@tmak_tw”
}
https://phippy.io/
好きなキャラクター:
Captain Kube
16. Specific scenarios (ちょい具体的に)
公式ドキュメントより
壊れ方 影響
API Serverやそれが動くVMがクラッシュ コントロールプレーン系機能は操作不能に
Kubernetes APIに依存しないPodやServiceは動き続
ける
API Serverのデータストア(etcd)が消失 上記と同じだが、データの回復が必要
他コントロールプレーン機能やそれが動くVMがク
ラッシュ
該当&依存する機能は操作不能に
依存しないPodやServiceは動き続ける
ノードVMのクラッシュ 該当VMで動くPodは利用不能に
Master/Node間ネットワーク分断 コントロールプレーンはNodeが利用不能と判断
Node(Kubelet)はAPI Serverを利用不能と判断
該当NodeのPodは動き続ける
Kubeletのクラッシュ 上記と同じ
クラスター操作者のミス すべてを壊しうる
18. Mitigations (緩和策)
公式ドキュメントより
緩和策 何に効く
IaaSの持つVMのリスタート機能を使う 予期せぬVMのクラッシュ
IaaSの持つ信頼性の高いストレージを使う/バック
アップする
etcdおよびユーザーボリュームの予期せぬ消失
ReplicaSetsやServiceを使う 予期せぬノードVM/Kubeletのクラッシュ
Pod再作成の可能性を加味してアプリを作る 予期せぬノードVM/Kubeletのクラッシュ
独立した複数のクラスターで構成する 上記すべて
これだけだとちょっと物足りないですね、まとめるとこういうことです
• Kubernetesの土台にあるインフラを活かす/意識して設計する
• Kubernetesらしいアプリの作りにする
• Blast Radiusを限定/分離する
28. $ kubeerctl config get-contexts
CURRENT NAME CLUSTER AUTHINFO NAMESPACE
Ale-dev-context1 Ale-Cluster-dev Ale-admin
Ale-stage-context1 Ale-Cluster-stage Ale-admin
Ale-prod-context1 Ale-Cluster-prod Ale-admin
* IPA-dev-context1 IPA-Cluster-dev IPA-user
IPA-dev-context2 IPA-Cluster-dev IPA-admin
IPA-prod-context1 IPA-Cluster-prod IPA-admin
IPA-stage-context1 IPA-Cluster-stage IPA-admin
Stout-dev-context1 Stout-Cluster-dev Stout-admin
Stout-dev-context2 Stout-Cluster-dev Stout-user
Stout-prod-context1 Stout-Cluster-prod Stout-admin
29. Failure Mode 再掲
公式ドキュメントより
壊れ方 影響
API Serverやそれが動くVMがクラッシュ コントロールプレーン系機能は操作不能に
Kubernetes APIに依存しないPodやServiceは動き続
ける
API Serverのデータストア(etcd)が消失 上記と同じだが、データの回復が必要
他コントロールプレーン機能やそれが動くVMがク
ラッシュ
該当&依存する機能は操作不能に
依存しないPodやServiceは動き続ける
ノードVMのクラッシュ 該当VMで動くPodは利用不能に
Master/Node間ネットワーク分断 コントロールプレーンはNodeが利用不能と判断
Node(Kubelet)はAPI Serverを利用不能と判断
該当NodeのPodは動き続ける
Kubeletのクラッシュ 上記と同じ
クラスター操作者のミス すべてを壊しうる
32. Replication
ご参考実装
AKS & Terraformを活用したブルーグリーンバージョンアップ & マルチジオ災害対策
AKS
Cosmos
DB
Traffic
Manager
AKS
AKS(※)
Cosmos
DB
AKS (※)
User Traffic
他(※※) 他(※※)
アプリ
CI/CDRegion A
Region B
Terraform
Green Group
Terraform
Blue Group
Terraform
Shared Grouptfstate
Deploy
& Test
Priority
Control
(※) 有事にゼロから作ればいいというアイデアもある RTO次第
(※※) ユーザーRole定義、Monitor設定など
33. ご参考実装のポイント
クラスターもImmutableにしてしまう
Terraformで、まるっと環境を作成する
クラスターだけでなく周辺要素も (Cosmos DB、Traffic Manager、ユーザーRole定義、Monitor設定など)
リソース間で構成情報を共有する (Cosmos DBの接続文字列、Traffic Managerのエンドポイントなど)
ライフサイクル、リスクプロファイルの異なるグループで分割する (ひとつにまとめてしまうと変化に弱い)
ライフサイクルが異なれば、あえてDRY/Module化しない (バージョンが変われば書き方も変わる)
データストアをKubernetesクラスター外部に持つ
クラスターのバージョンアップ切り替え時にデータ移行しなくてよい
マネージドサービスで楽をする (構築維持の負担軽減、複製機能の活用など)
要らなくなったらまるっと破棄する
バージョンアップや方式変更が落ち着いたらブルー/グリーンのどちらかは廃棄
なにかあったらTerraformで再現