最終更新:

【仕組み解説】Kubernetesはどうやってコンテナを管理しているのか — オーケストレーションの裏側を図解


Kubernetes アーキテクチャ Control Plane(司令塔) API Server Scheduler etcd Controller Manager スケジューリング Node 1 kubelet kube-proxy Pod A Pod B Pod C 自己修復 / スケールアウト Node 2 kubelet kube-proxy Pod D Pod E Pod F 自己修復 / スケールアウト Service(外部からのアクセス窓口)
Kubernetesアーキテクチャのイメージ
ひよこ ひよこ
Kubernetesって最近よく聞くけど、そもそも何をしてくれるものなの?
ペンギン先生 ペンギン先生
簡単に言うと、たくさんのコンテナを自動で管理してくれる「指揮者」みたいな存在だよ。オーケストラの指揮者が各楽器奏者にいつ演奏するか指示するように、Kubernetesはどのサーバーでどのコンテナを動かすか決めてくれるんだ。
ひよこ ひよこ
指揮者かぁ!じゃあ指揮者がいないとどうなるの?
ペンギン先生 ペンギン先生
コンテナが数個なら手動でも管理できるけど、何百・何千個になると人間じゃ追いきれないよね。「このコンテナが落ちたから再起動して」「アクセスが増えたからコンテナ増やして」っていう作業を全部自動でやってくれるのがKubernetesだよ。
ひよこ ひよこ
なるほど!Kubernetesの中身ってどういう構造になっているの?
ペンギン先生 ペンギン先生
大きく分けると「Control Plane」と「Node」の2つがあるよ。Control Planeは司令塔で、API Server、Scheduler、etcd、Controller Managerという4つの主要コンポーネントで構成されているんだ。API Serverが全体の窓口、Schedulerがコンテナの配置先を決めて、etcdがクラスタの状態を記録して、Controller Managerが理想の状態を維持する役割だね。
ひよこ ひよこ
じゃあNodeっていうのは何なの?
ペンギン先生 ペンギン先生
Nodeは実際にコンテナが動くサーバーのことだよ。各Nodeにはkubeletとkube-proxyが入っていて、kubeletはControl Planeからの指示を受けてコンテナを起動・停止する現場監督みたいな存在。kube-proxyはネットワークトラフィックを適切なコンテナに振り分ける交通整理係だね。
ひよこ ひよこ
PodとかDeploymentとかServiceっていう言葉も出てくるけど、これは何なの?
ペンギン先生 ペンギン先生
Podコンテナを入れる最小単位の箱みたいなもので、1つ以上のコンテナをまとめて管理するよ。DeploymentはPodの数や更新方法を定義する設計図で、「このPodを3つ動かしてね」みたいな指示を書くんだ。Serviceは外部からのアクセスを適切なPodに振り分ける入り口の役割だよ。
ひよこ ひよこ
コンテナを動かすとき、どのNodeで動かすかはどうやって決まるの?
ペンギン先生 ペンギン先生
これがSchedulerの仕事だよ。新しいPodが作られると、SchedulerがすべてのNodeのCPUやメモリの空き状況をチェックして、最適なNodeを選んで配置するんだ。「このNodeはもうパンパンだから別のNodeに置こう」みたいな判断を自動でしてくれるよ。
ひよこ ひよこ
もしコンテナが突然落ちたらどうなるの?
ペンギン先生 ペンギン先生
ここがKubernetesのすごいところで、「自己修復」という機能があるんだ。Controller Managerが常に「Deploymentで指定された数のPodが動いているか」を監視していて、Podが落ちたら自動的に新しいPodを作り直してくれるよ。人間が気づく前に復旧が終わっていることも多いんだ。
ひよこ ひよこ
アクセスが急に増えたときはどうするの?
ペンギン先生 ペンギン先生
スケールアウトという仕組みがあって、Horizontal Pod Autoscalerを設定しておくと、CPUの使用率などを見て自動的にPodの数を増減してくれるよ。たとえば「CPU使用率が80%を超えたらPodを増やす」みたいなルールを決められるんだ。
ひよこ ひよこ
Kubernetesの設定って複雑そうだけど、簡単にする方法はあるのかな?
ペンギン先生 ペンギン先生
Helmチャートというパッケージマネージャーがあるよ。アプリのインストールに必要なKubernetesの設定ファイルをまとめてテンプレート化したもので、複雑な設定もコマンド一発でデプロイできるようになるんだ。npmやaptみたいな感覚でKubernetesアプリを管理できるよ。
ひよこ ひよこ
便利だね!でもKubernetesって個人でも使うものなの?
ペンギン先生 ペンギン先生
正直、個人の小さなサービスにはオーバースペックなことが多いよ。Kubernetes自体の運用にもコストがかかるからね。ただ、AWS EKSやGoogle GKEみたいなマネージドサービスを使えばControl Planeの管理はクラウドに任せられるし、学習目的ならMinikubeやkindでローカルにクラスタを立てて試せるよ。本番で使うかどうかは、サービスの規模とチームのスキルに応じて判断するのが大事だね。