(O+P)ut

アウトプット



(O+P)ut

エンジニアのアウトプット

【Kubernetes】calico/kube-controllersのLivenessであるcheck-statusの動き

スポンサーリンク

はじめに

Calicoのkube-controllersのLiveness/Readinessを見ると、内部的に以下コマンドで生死監視が行われています。

exec [/usr/bin/check-status -l] delay=10s timeout=10s period=10s #success=1 #failure=6

本記事にて実機を用いて内部的に何が確認されているのかを調査しました。

環境情報
calico/kube-controllers:v3
/usr/bin/check-status --version
v3.21.4

check-statusはjsonファイルを確認している

コンテナ内部で同コマンドのヘルプ画面を出力すると以下となっており

# ./check-status --help
Usage of check-status:
  -f, --file string   File to read with status information (default "/status/status.json")
  -l, --live          Check liveness
  -r, --ready         Check readiness
  -v, --version       Display version

/status/status.jsonというファイルの状態を確認しており、同ファイルは正常時は下記のようになっています。

# cat /status/status.json
{"Readiness":{"CalicoDatastore":{"Ready":true,"Reason":""},"KubeAPIServer":{"Ready":true,"Reason":""}}}

kube-controllersがファイルに書き込みを行っている

このファイルに書き込みを行っているのが同Pod内で稼働しているプロセス(/usr/bin/kube-controllers)であり、該当のプロセスの中はGolangで記述されていて以下のようなメッセージが出力されていました。

 [INFO][18109] main.go 94: Loaded configuration from environment config=&config.Config{LogLevel:"info", WorkloadEndpointWorkers:1, ProfileWorkers:1, PolicyWorkers:1, NodeWorkers:1, Kubeconfig:"", DatastoreType:"etcdv3"}
client_config.go:615]  --kubeconfig nor --master was specified.  Using the inClusterConfig.
... load in-cluster configuration, KUBERNETES_SERVICE_HOST and KUBERNETES_SERVICE_PORT

上記にもある通りでKubernetesのAPIServerとの正常な疎通ができていることを確認しているので、実際にPotとMasterNodeの通信を遮断するとPodはLivenessの失敗に伴い停止します。以下は通信遮断時のkubelet.logの抜粋。

 {"message":"... kubelet.service[6090]: ... kubelet.go:2182] \"SyncLoop (probe)\" probe=\"liveness\" status=\"unhealthy\" pod=\"kube-system/calico-kube-controllers-679df47c7b-8rxwb\"",...

終わりに

同デプロイメントはノードやNetworkPolicyといったリソースの追加/削除を監視している事情でMasterNodeとの通信が途絶えると停止するようになっています。

以上、ご参考になれば幸いです。