免責事項: これは英文の記事 「Deleted k8s node is not recreated by Machine Health Check (MHC) in TKGm」の日本語訳です。記事はベストエフォートで翻訳を進めているため、ローカライズ化コンテンツは最新情報ではない可能性があります。最新情報は英語版の記事で参照してください。
TKGm 環境において、k8s node を削除したにもかかわらず、Machine Health Check (MHC) によって node が再作成されない。
例: 現在 2つの Worker node が稼働。
# kubectl get nodes
NAME STATUS ROLES AGE VERSION
test-controlplane-f5zbl-j44jj Ready control-plane 45d v1.33.1+vmware.1
test-md-0-h2d4r-4qhs2-rsf2w Ready <none> 45d v1.33.1+vmware.1
test-md-0-h2d4r-4qhs2-xwwhn Ready <none> 45d v1.33.1+vmware.1
しかし、"ma", "vspheremachine", "vspherevms" リソースに関して、存在しない3つ目の node のオブジェクトが依然として表示されています。
結果として MHC による node 再作成が機能しません。
# kubectl get ma -A
NAME CLUSTER NODENAME
test-controlplane-f5zbl-j44jj test test-controlplane-f5zbl-j44jj
test-md-0-h2d4r-4qhs2-rsf2w test test-md-0-h2d4r-4qhs2-rsf2w
test-md-0-h2d4r-4qhs2-xwwhn test test-md-0-h2d4r-4qhs2-xwwhn
test-md-0-h2d4r-4qhs2-z754m test test-md-0-h2d4r-4qhs2-z754m # <------- still remained
# kubectl get vspheremachine -A
NAME CLUSTER READY
test-controlplane-f5zbl-j44jj test true
test-md-0-h2d4r-4qhs2-rsf2w test true
test-md-0-h2d4r-4qhs2-xwwhn test true
test-md-0-h2d4r-4qhs2-z754m test true # <---------- still remained
# kubectl get vspherevms -A
NAME AGE
test-controlplane-f5zbl-j44jj 45d
test-md-0-h2d4r-4qhs2-rsf2w 45d
test-md-0-h2d4r-4qhs2-xwwhn 45d
test-md-0-h2d4r-4qhs2-z754m 45d # <---------- still remained
TKGm v2.5.0
TKGm v2.5.0 の Cluster API の既知のbug により、削除されたnode のオブジェクトが意図せず残ってしまうため。
Known Issue - Orphan vSphereMachine objects after cluster upgrade or scale
孤立したオブジェクト(ma/vspheremachine/vspherevms) を手動で削除します。
# 1. "Management Cluster" context への切り替え
kubectl config use-context <MANAGEMENT_CLUSTER>
# 2. 確認
kubectl -n <NAMESPACE> get ma,vspheremachine,vspherevms
# 3. オブジェクトを手動で削除
kubectl -n <NAMESPACE> delete ma <TARGET_NODE_OBJECT>
kubectl -n <NAMESPACE> delete vspheremachine <TARGET_NODE_OBJECT>
kubectl -n <NAMESPACE> delete vspherevms <TARGET_NODE_OBJECT>
# 4. 最長5分ほど待って、対象オブジェクトが削除されていることを確認
kubectl -n <NAMESPACE> get ma,vspheremachine,vspherevms
# 5. もし削除されない場合、"edit" を使用して "finalizer" の value を削除
kubectl -n <NAMESPACE> edit ma <TARGET_NODE_OBJECT>
kubectl -n <NAMESPACE> edit vspheremachine <TARGET_NODE_OBJECT>
kubectl -n <NAMESPACE> edit vspherevms <TARGET_NODE_OBJECT>
# 6. 正常にオブジェクトが削除できた際に MHC によるノード再作成が開始されます
もし MHC によるノード再作成が機能しない場合、Cluster API の pod をリスタートします。
kubectl -n capi-system rollout restart deployment/capi-controller-manager
kubectl -n capv-system rollout restart deployment/capv-controller-manager
もし対象クラスタが pause 状態の場合、unpaused に変更します。
kubectl -n <NAMESPACE> patch cluster <CLUSTER> --type merge -p '{"spec":{"paused": false}}'
本事象は Cluster API v1.9 以降で修正されています。TKGm v2.5.3 以降へのアップグレードを検討してください。