「車輪の再実装」って言葉が好き(実践はできてない)

Weekly Log 3 -- k8s the hard wayとk8sのアーキテクチャと --

はじめに

k8sの勉強というと、「こんな機能がある」、「こういう使い方をする」ということを学んでいくべきなんだろうけど、正直面倒というか、丸暗記に近い感覚があってあんまり気が乗らない。

なので、k8sアーキテクチャを中心に、必要に応じてk8sの機能も勉強していくことにした。 k8s the hard wayを起点に色々調べたのだけれど、記事にまとめる時間が無かったのでk8sアーキテクチャについてメモ書きだけ残す。

k8sコンポーネントの概要

公式ドキュメントの「Kubernetesコンポーネント」より写真を引用してk8sを構築するコンポーネントを整理する。

https://d33wubrfki0l68.cloudfront.net/7016517375d10c702489167e704dcb99e570df85/7bb53/images/docs/components-of-kubernetes.png

コントロールプレーン

kube-api-server

etcd

  • 一貫性、高可用性を持ったキーバリューストア
  • Kubernetesの全てのクラスター情報の保存場所

kube-scheduller

  • Podにノードが割り当てられているか監視
  • Podを実行するノードを選択

kube-controller-manager

  • 各リソースを管理するコントローラを実行
  • 各コントローラはgoroutineとして実行される

cloud-controller-manager

ノード

kubelet

  • podの実行を保証
  • k8sが実行したコンテナのみ管理

kube-proxy

  • クラスタ内部、外部からPodへの通信を実現
  • OSのパケットフィルタリングが利用可能なら利用

コンテナランタイム

  • containerd等
  • コンテナの実行を管理

コントローラ

https://kubernetes.io/ja/docs/concepts/architecture/controller/

  • クラスタの状態監視
  • 期待される状態になるよう処理実行
  • 1つ以上のリソースを監視
  • 自分自身でアクション実行orAPIサーバに副作用付きメッセージを送信
  • 自作コントローラをPodとしてや外部で動作させることも可能