結論: Kubernetes(クバネティス)とは、たくさんのコンテナを、自動で管理する仕組みです。コンテナの起動・増減・故障時の入れ替えなどを、自動で行ってくれます。ただし、運用の手間が大きいため、小規模なサービスには、過剰になりやすい点に注意が必要です。
なぜ必要なのか:港のコンテナ輸送で考える
コンテナ(アプリを、動作環境ごと、箱に入れたもの)が、数個なら、人の手でも管理できます。コンテナが数百になると、次のような問題が出てきます。
- どのサーバーで、どのコンテナを動かすか、決めるのが大変
- 1つが止まった時に、気づいて、入れ替えるのが大変
- アクセスが増えたら、コンテナを増やす必要がある
港で、膨大なコンテナを、積み替え・配置・追跡する管理システムがあるように、ソフトウェアの世界でも、コンテナを自動で管理する仕組みが必要になります。それが、Kubernetesです。コンテナの基礎は、コンテナと仮想マシンの違いで解説しています。
Kubernetesが自動でやってくれること
| 機能 | 内容 |
|---|---|
| 自動配置 | コンテナを、空きのあるサーバーに、自動で配置する |
| 自己修復 | 止まったコンテナを、自動で再起動・入れ替えする |
| スケーリング | アクセスの増減に応じて、コンテナの数を、増やしたり減らしたりする |
| 負荷分散 | アクセスを、複数のコンテナに振り分ける |
| 無停止の更新 | 新しいバージョンに、少しずつ入れ替えて、サービスを止めずに更新する |
アクセスの振り分けの考え方は、ロードバランサーとはで解説しています。無停止での入れ替えは、ブルーグリーンデプロイとはも参考になります。
基本の用語
| 用語 | 意味 |
|---|---|
| クラスタ | Kubernetesが管理する、サーバー全体のまとまり |
| ノード | クラスタを構成する、1台1台のサーバー(マシン) |
| Pod(ポッド) | コンテナを動かす最小の単位。1つ以上のコンテナを含む |
| Deployment | 「このアプリを、何個動かしたいか」を宣言して、維持してくれる仕組み |
| Service | Podへのアクセスの窓口。Podが入れ替わっても、同じ窓口でつながる |
「こうあってほしい」を宣言する
Kubernetesの特徴は、「こういう状態にしたい」と宣言すると、実際の状態を、その状態に近づけ続けてくれることです。宣言は、YAMLという形式のファイルで書きます。たとえば、「このアプリを、3つ動かす」と書くと、1つ止まっても、自動で補充されます。YAMLの書き方は、YAMLとはで解説しています。
メリットと注意点
メリット
- 障害に強く、サービスを止めにくい
- アクセス増に、柔軟に対応できる
- 環境の違いを、あまり気にせず、動かせる
- 多くのクラウド事業者が、対応するサービスを提供している
注意点
- 学ぶことが多く、学習と運用の負担が大きい
- 小規模なサービスでは、メリットより手間が大きくなりやすい
- 設定を誤ると、セキュリティ上の問題や、思わぬ費用につながることがある
向いている場面・向かない場面
| 向いている | 向かない |
|---|---|
| 多数のサービスを、安定して運用したい | 1〜数台のサーバーで、足りる規模 |
| アクセスの増減が、大きい | 運用の担当者が、少ない |
| 無停止での更新が、求められる | まずは、早く作って、試したい段階 |
最初は、より簡単な方法で始め、必要になってから、Kubernetesを検討する流れが、現実的です。開発と運用の連携の考え方は、DevOpsとはで解説しています。
振り返ると
Kubernetesは、たくさんのコンテナを、自動で配置・修復・増減する仕組みです。大規模なサービスの運用で力を発揮しますが、負担も大きいため、規模に合わせて、導入を判断しましょう。
関連記事:クラウドはどこにある?
あわせて読みたい:IaC(Infrastructure as Code)とは