Kubernetes の node とは?pod を実行するマシン
node とは、あなたの pod を実行する Kubernetes クラスタ内の worker マシン - 物理または仮想 - であり、kubelet と container runtime によって管理されます。
Kubernetes は多数のマシンを1つのクラスタにプールし、それらのマシンのそれぞれが node です。control plane は何を実行すべきかを決定し、node は実際にそれが実行される場所です。node のコンポーネントを理解すると、pod が YAML manifest から実行中のコンテナへとどう変わるかが明確になります。
node 上で動くもの
- kubelet - pod を起動して監督するエージェント。
- コンテナを実行する container runtime(containerd、CRI-O)。
- kube-proxy - node 上で Service のネットワーキングを扱う。
- あなたの実際の workload pod。
kubelet
kubelet は、自身の node に割り当てられた pod spec を受け取り、container runtime にコンテナの起動を依頼し、それらの健全性を継続的に control plane に報告します。node の現場の管理者です。
node へのスケジューリング
scheduler は、resource request、taint と toleration、affinity ルールを勘案して、新しい pod がどの node に着地するかを決定します。適合する node のない pod は、キャパシティが現れるまで Pending のままです。
node の健全性と autoscaling
node が故障すると、その pod は別の場所に再スケジュールされます。cluster autoscaler は、pod が配置できないときに node を追加し、コスト節約のためにアイドルな node を削除できます。
CI との対応
node がクラスタに対して持つ関係は、runner が CI に対して持つ関係と同じです。作業を行うマシンです。runner のフリートを管理すること - プロビジョニング、スケーリング、修復 - は node 管理を映しており、マネージド runner プラットフォームがそれを代わりに扱います。
重要なポイント
- node は、kubelet と container runtime を介して pod を実行する worker マシンです。
- scheduler は、リソースと制約に基づいて pod を node に配置します。
- 故障した node は pod が再スケジュールされ、autoscaler は node を追加・削除します。