前回は、概要ということでkubernetesの機能について学んできました。今回は、kubernetesのアーキテクチャと用語などについてまとめていこうと思います。

kubernetesのアーキテクチャ

さっそくkubernetesを構成するコンポーネント、用語について確認していきましょう。

Cluster

Clusterとは、Kubernetesが稼働するVMや物理マシンを表す集合体です。Clusterは、大きく分けて、Master、Nodeの2つに分けることが出来ます。Masterは、Cluster全体を管理し、Nodeは、アプリケーションコンテナを稼働させます。kubernetesクラスターでは、少なくとも1つのNodeがあります。

Master

Masterは、Cluster全体を制御します。Masterと呼び方やControl Planeと呼ばれます。クラウドベンダーが提供しているコンテナサービス(CaaS)、AWS EKS、AWS ECS、GKEなどは、独自のカスタマイズが入っていることがありますが、k8sと比較しながら捉えれると、Control Planeの部分を隠蔽(扱いやすく)した形でサービス提供しています。

kube-apiserver

apiサーバは、kubernetes APIを外部提供するAPIコンポーネントです。フロントエンドの機能を提供しています。

etcd

クラスタの情報を管理するための分散キーバリューストアを提供しています。

kube-scheduler

Podの状態(CPU/Memory利用率など)を監視し、稼働していないPodがあれば、配置などを行う。

kube-controller-manager

4つのプロセスからなるコンポーネントです。

  • ノードコントローラー: ノードがダウンした場合の通知等の制御
  • レプリケーションコントローラー:Podの数を正しく保つ役割を持ちます。
  • エンドポイントコントローラー:エンドポイントの紐付けを行う。(Service,Podなどの紐付け)
  • サービスアカウントとトークンコントローラー:新規の名前空間に対して、デフォルトアカウントとAPIアクセストークンを作成する。

cloud-controller-manager

クラウドプロバイダと対話するコントローラーを実行します。この機能を利用してクラウド上の拡張機能などを独自で開発することができます。下記のようなことを行います。ベンダーごとのインフラ差分を吸収するための機能を提供しています。

  • ノードコントローラー:ノードが応答を停止した後、クラウドで削除されたかどうかを判断するため、クラウドプロバイダーをチェックします。
  • ルーティングコントローラー:クラウド基盤のルーティングを設定する
  • サービスコントローラー:クラウドプロバイダーのロードバランサーの作成、更新、削除を行います。
  • ボリュームコントローラー:ボリュームを作成、アタッチ、マウントしたり、クラウドプロバイダーとやり取りしてボリュームを調整したりします。

Node

Nodeは、コンテナアプリケーションを実行する環境です。ワーカーノードなどと呼ばれることもあります。

kubelet

クラスター内の各ノードで実行されるエージェントです。各Node上でPodが正しく動作しているかを確認する

kube-proxy

kube-proxyは、コンテナへのアクセスを振り分けるネットワークプロキシの役割をします。

container-runtime

コンテナを実行するためのソフトウェアです。kubernetesでは、Dokcer、containerd、CRI-O等の複数のコンテナを実行することが可能です。

Addon

独自の機能を拡張する方法として、Addon機能を提供しています。kubernetesの公式サイトでもネットワーク、サービスディスカバリ、ダッシュボードなど様々なものが紹介されています。詳しくは、こちらを参照して下さい。

kubectl

kubectlは、kubernetesへのリクエストするためのコマンドインターフェスです。コンテナなどをデプロイする際や、ログの確認など様々な場面で利用します。

今回は、駆け足でkubernetes自身がどのようなコンポーネントを提供しているのか、用語説明などをしながらみてきました。minikubeというローカル環境でもk8sを試せる環境が構築できるので、次回は、minikubeを環境構築する方法について紹介したいと思います。