Basic knowledge about Kubernetes(日本語)
Table of contents
Kubernetesとは
Dockerは開発環境として使うのがすごく便利ですが、本番環境で使うと色々な問題が考えられます。
- コンテナがもし死んだら直ちに検知してコンテナを再起動したりして回復しないといけない
- リクエストが大量になる時、スケールをしないといけない
- 複数コンテナがあるなら、ロードバランシングをしないといけない
- 等々
↑の問題を解決してくれるのがKubernetesの役割です。
Kubernetes(K8s)はコンテナオーケストレーションシステムです。
- Googleが2014年に公開しました。
- Googleの長きにわたるコンテナ運用の知見が詰まっているらしいです。
- K8sのメイン機能としては、コンテナ化されたアプリケーションを以下のこと自動的に行うことです。
- デプロイ
- コンテナ管理
- スケール
イメージは、K8sがコンテナの管理をいい感じにやってくれるので、 私たちはただK8sに「こんな感じでシステムを運用して」と注文書(マニフェスト)を投げつけるだけです。 それ以外はK8sに任せて良いです。
Kubernetesの構成を理解
クラスター
- クラスター本体
ノード
- クラスターに属するマシンを表すオブジェクト
- クラスターには、Masterノード1個と複数Workerノードがある
- Workerノードは私たちが開発したアプリケーションの実行環境となる(コンテナ群の実行環境)
- Masterノードは、私たちの命令に従って、各Workerノードにコンテナをデプロイしたりして、いい感じに監視・維持してくれる
- Masterノードは1つ、Workerノードは複数がある
Pod
- Workerノード上に生成されるオブジェクト
- K8sの最小デプロイ単位であり、スケールする時はPod単位で生成/破棄される
- Pod内にコンテナが1つ以上ある
ReplicaSet(RS)とDeployment
- RS
- 同じ仕様のPodが指定した数だけ存在するよう生成・管理する
- 例えば、Podが死んだ時マニフェストで指定した数になるよう自動回復してくれる
- Deployment
- 新しいバージョンのリリースを管理するための仕組み
Service
- クラスター内外からのリクエストをPodにルーティングするオブジェクト
- 複数のPodに対するロードバランシングの役割を持つ