☸️
【コンテナ】コンテナオーケストレーションサービスについてざっくりまとめる
はじめに
コンテナの管理に使用されるコンテナオーケストレーションについてざっくりまとめます。
クラウドサービスはAWSを中心に記します。
※本当にざっくりまとめています。間違いなどがあればご指摘ください。
コンテナオーケストレーションサービスとは
- コンテナのアプリの操作を行えるサービス
- コンテナの管理
- コンテナアプリのデプロイ
- スケーリング
Kubernetesとは
- Googleが開発したコンテナオーケストレーションサービス
- 様々なクラウドサービスとの互換性があり、汎用性が高い
- 学習コストが結構高いっぽい
AWSのコンテナオーケストレーションサービス
-
EKS:Kubernetesベースのコンテナオーケストレーションサービス
-
ECS:AWSオリジナルのコンテナオーケストレーションサービス
-
ECSのほうが学習コスト、料金コストが低い
-
EKSはその分高度な操作できたり、他のクラウドサービスに流用できる
コントロールプレーン・データプレーン
- コントロールプレーン:コンテナを管理するための機能
- データプレーン:コンテナを稼働するための機能
コントロールプレーン
- kube-apiserver:APIリクエストの窓口
- etcd:PodやServiceの定義などを保存する
- kube-scheduler:PodをどのNodeに配置するか決める
- kube-controller-manager:状態の維持によって高可用性を担保する
- cloud-controller-manager:クラウドサービスとの統合をする
- AWSのEKSやECSは、そのサービス自体がコントロールプレーンの役割を担っている
- EKS
- ECS
データプレーン
- 各クラウドサービスごとにデータプレーンは異なるっぽい
- AWSは2種類のデータプレーンが存在する
- EC2
- Fargate
EC2
- リソースやインスタンスタイプなどの細かい調整が可能
Fargate
- サーバーレスで簡単に構築できる
- インフラ管理も不要で、オートスケーリングを利用することで運用が楽になる
構成リソース
EKS (Kubernetes)
- Cluster:Nodeのまとまり
- Node:Podが動作する仮想マシン
-
Pod:コンテナの実行環境
- PodTempateを元に生成される
※ほかに細かいリソースがありますが、今回は割愛
ECS
- Cluster
- Service
-
Task
- TaskDefinitionを元に生成される
- EKSと比べてリソースがこのくらいしかないため、学習コストが低く扱いやすい
デプロイ
ローリングアップデート
- 一つのPodを徐々に更新していくデプロイ方法
- 一時的にバージョンが混在することによる不具合が生じる可能性がある
Blue/Greenアップデート
-
新旧バージョンのPodをそれぞれ用意して更新するデプロイ方法
- 新バージョンがデプロイできたら、瞬時に切り替える感じ
- 旧バージョンへのロールバックも容易に実現できる
- リソース消費量が多く、コストが高くなる
さいごに
Kubernetesが難解すぎて、正直理解が追いついていないです。
本格的に使用する機会があれば再度学習しようと思います。。。
参考
Discussion