最終更新:

【仕組み解説】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でローカルにクラスタを立てて試せるよ。本番で使うかどうかは、サービスの規模とチームのスキルに応じて判断するのが大事だね。