Weekly Log 3 -- k8s the hard wayとk8sのアーキテクチャと --
はじめに
k8sの勉強というと、「こんな機能がある」、「こういう使い方をする」ということを学んでいくべきなんだろうけど、正直面倒というか、丸暗記に近い感覚があってあんまり気が乗らない。
なので、k8sのアーキテクチャを中心に、必要に応じてk8sの機能も勉強していくことにした。 k8s the hard wayを起点に色々調べたのだけれど、記事にまとめる時間が無かったのでk8sのアーキテクチャについてメモ書きだけ残す。
k8sのコンポーネントの概要
公式ドキュメントの「Kubernetesのコンポーネント」より写真を引用してk8sを構築するコンポーネントを整理する。
コントロールプレーン
kube-api-server
- Kubernetes APIを提供するコンポーネント
- 水平スケールするよう設計されている
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としてや外部で動作させることも可能