👏
Kubernetesの基本的なコンポーネントについて(メモ)
本記事は、TECHPLAY女子部 Advent Calendar 2021 15日目の記事です。
- Kubernetesの勉強はじめたてなので、outputのため記載します。
- Kubernetes全体のアーキテクチャの概要を知るため、まずはコンポーネントをまとめます。
- ※もし、記事へ修正点などがあれば、コメント頂けますと嬉しいです。
Kubernetesは(k8s)コンテナオーケストレーションプラットフォーム。
あるべき状態と実際の状態を比較して、自動であるべき状態へと近づけるよう動作する。
kubernetesクラスタ
k8sをデプロイすると、クラスタが展開される。
動作しているk8s全体という感じ(?)
このkubernetesクラスタを構成しているものがコンポーネント。大きくコントロールプレーンとノードという2つに分かれる。
コントロールプレーン
司令塔。オーケストレーションの動作を行う。
k8sでは「あるべき状態」をyamlファイルで定義する。それをマニフェストという。
コントロールプレーンはマニフェストを元に動き、あるべき状態を維持するよう動作する。
※「あるべき状態」はyamlで定義するが、実際「あるべき状態」といっているのは、yamlを元にetcd(後述のコンポーネントの1つ)に保存された情報を指す。
コントロールプレーン上で動いている基本的なコンポーネントはこちら。
kube-apiserver
- 全体のIF。全てのコンポーネントと繋がる。
- これを通じ、k8s上で動く各コンポーネント達はやりとりしている。
- 管理者がk8sの操作をする際はこのAPIを通じて行う。
- 各オブジェクトに対する実際の処理を行っているわけではない。
etcd
- 「あるべき状態」の保存場所。データベース。
- ここを見れば「あるべき状態」がわかる。
- ここに登録されていないとそもそもデプロイできない。
- 実際何かというと、オープンソースの分散キーバリューストア。
kube-scheduler
- Pod(コンテナ)作成される時に活躍。
- 作成される先のノードが決まっていないPodがないか監視。
- あったらPod作成するのに適切なノードを優先度に合わせ判断、割り当てをする。
- 実際にPod作成を行うのではなく、ただ作成する場所を判断、etcdの情報の更新をする。
kube-controller-manager
- 各オブジェクトのコントローラを統括管理する人(まとめ役)
- オブジェクト毎(deploymentやreplicaset、serviceをはじめとしたk8sにある概念)にコントローラーが用意されている。
- 各オブジェクトのコントローラ
- 対象のオブジェクトを「あるべき状態」とするために、維持するために動く。
- 稼働状況を「あるべき状態」に維持する仕組み「Control Loop」
ノード
コンテナが実際に動作するところ。ワーカーノードというサーバが複数動いている。
ノード上で動いている基本的なコンポーネントはこちら。
kubelet
- ワーカーノード上で動くすべてのPodが正しく動いているかヘルスチェックする
- だめになっていたら再起動する
- PodSpecをみて、その状態になってるか確認
- 各ワーカーノードにそれぞれのっている(一家に一台)
kube-proxy
- Podにユーザがアクセスするためのルーティング機能を提供している
- 各ワーカーノードにそれぞれのっている(一家に一台)
コンテナランタイム
- コンテナ実行のためのソフトウェア
- ここでコンテナが動く。
- Dockerやcontainerdといったk8sでないソフトウェア。
Discussion