18. Kubernetes Novice Tokyo #30
kubectl apply
補足:
差分計算の詳細については、
- Doc: How apply calculates difference and merges changes
- GitHub: sig-api-machinery/strategic-merge-patch.md
- Qiita: Kubernetes: kubectl apply の動作
- YouTube: kubectl apply, and The Dark Art of Declarative Object
Management
などに詳しい
19. Kubernetes Novice Tokyo #30
発表内容
- kubectl apply から API Server に送られる情報
- API Server が etcd に保存する情報
- Controller や Kubelet が検知するリソースの変更
21. Kubernetes Novice Tokyo #30
API Server から etcd
Q.
API Server から etcd には「どういう情報」が保存されてい
る?
A.
「公式の API Reference に書いてある情報」が保存されてい
る(例えば Pod や ReplicaSet なら apiVersion, kind, metadata,
spec, status)
22. Kubernetes Novice Tokyo #30
API Server から etcd
etcd の中身を kube-etcd-helper というツールで覗いてみる*
* 注: 新しいバージョンでは証明書まわりがうまくいかなかったので k8s v1.11.10での結果
23. Kubernetes Novice Tokyo #30
etcd には /registry/replicasets/default/<ReplicaSet_Name>
のような key でリソースの情報が保存されている
各フィールドの意味は Doc: API Reference
に記述されている
ソースコードとしては
k8s.io/api/apps/v1/types.go
などに定義されている
API Server から etcd
metadata
apiVersion, kind
spec
status
24. Kubernetes Novice Tokyo #30
発表内容
- kubectl apply から API Server に送られる情報
- API Server が etcd に保存する情報
- Controller や Kubelet が検知するリソースの変更
26. Kubernetes Novice Tokyo #30
リソースの変更検知
Q.
Controller や Kubelet がリソースの設定の変更を検知する際
には「どういう情報」が「どうやって」送られている?
A.
「リソースの変更イベント」が「API Server の Watch API」
を通して送られている
27. Kubernetes Novice Tokyo #30
Watch API とは
変更の検知のために毎回すべての設定を GET したくはない
⇒ 変更した箇所の情報だけを得たい
各コンポーネントは API Server の Watch API に繋いでリ
ソースの変更イベントを受け取っている
API Server は etcd サーバの Watch API を使って、リソー
スの変更イベントの度にイベントを通知している
28. Kubernetes Novice Tokyo #30
Watch API の実装
Watch API の ハンドラの実装は
k8s.io/apiserver/pkg/endpoints/handlers/watch.go にある
Etcd サーバから送られて
くる変更を Event として
受け取る
API Server の Watch API
に繋いでいるコンポーネ
ントにレスポンスを送る
Event の型定義