調べたらいっぱい出てくるかと思いきや、意外といいのが無かったので自分が理解しやすいように描いてみました。
そもそもKubernetesとは?
一言でいうと「コンテナ管理ソフトウェア」です。
オープンソースソフトウェア(OSS)なので、オンプレミスや各種パブリッククラウドなど様々なインフラストラクチャ上で利用することができます。
概要図
※今回は分かりやすいよう、各コンポーネントを抽象的な役割名ではなく具体的な実装名で表現しています。
コントロールプレーン
「管理サーバー」と捉えると分かりやすいかも知れません。
自分でサーバーを立ててセットアップすることもできますが、パブリッククラウドではマネージドサービスとして提供されています。(例:AWSのEKSなど)
- kube-apiserver:コントロールプレーンのフロントエンドとなるAPIサーバー。管理者からの操作を受け付け、各コンポーネントとやり取りする
- kube-controller-manager:「サービス」や「デプロイメント」などの各k8sオブジェクトの司令塔となるコントローラーたちを管理する
- kube-scheduler:作成されたPodとノードのアサインを決定し、etcdに書き込む
- etcd:クラスターの「あるべき状態」が記録されるキーバリューストア
ノード(データプレーン)
実際にコンテナが動く土台サーバーの部分を指します。
- kubelet:ノード側のエージェント。自ノード内のPodが「あるべき状態」かを監視する
- kube-proxy:クラスター内外からPodへのネットワークルールを管理してiptablesを更新する
- containerd:Podを実行するためのコンテナランタイム
ぜひ自分で触ってKubernetesを動かしてみよう!
手前味噌ですが、AWSを用いたハンズオン記事を以前に書いたのでよければハンズオンしてみてください。
参考文献