👏

Kubernetesの基本的なコンポーネントについて(メモ)

2021/12/15に公開

本記事は、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