TL;DR
マルチホストで構成されたクラスタ全体のホスト OS を管理し、複数のコンテナを統合して管理する機能。
なぜ必要か
Kubernetes のドキュメントによると、本番環境では、アプリケーションを止めないようにコンテナを管理する必要がある。たとえば、コンテナが落ちたら別のコンテナを起動しなければならない。こうした動作がシステムに組み込まれていれば、管理が簡単になる。
仕組み
Kubernetes を例にとると、分散システムを弾力的に動かすための次のような機能がある。
- サービスディスカバリと負荷分散: DNS 名や IP アドレスでコンテナを公開し、トラフィックを振り分ける
- 自動化されたロールアウトとロールバック: コンテナのあるべき状態を宣言すると、実際の状態を制御された速さでそこに近づける
- 自動ビンパッキング: 各コンテナに必要な CPU とメモリを宣言すると、ノードに合わせて配置する
- 自己修復: 失敗したコンテナを再起動し、ヘルスチェックに応答しないコンテナを止める
- 水平スケーリング: コマンドや CPU 使用率に応じて、アプリケーションをスケールイン・スケールアウトする
例
代表的なソフトウェアに Kubernetes がある。クラウドサービスでは次のものがある。
- Amazon ECS / Amazon EKS
- Cloud Run