手動で削除した k8s node が Machine Health Check (MHC) によって再作成されない
search cancel

手動で削除した k8s node が Machine Health Check (MHC) によって再作成されない

book

Article ID: 421238

calendar_today

Updated On:

Products

Tanzu Kubernetes Runtime

Issue/Introduction

免責事項: これは英文の記事 「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

Environment

TKGm v2.5.0

Cause

TKGm v2.5.0 の Cluster API の既知のbug により、削除されたnode のオブジェクトが意図せず残ってしまうため。

Known Issue - Orphan vSphereMachine objects after cluster upgrade or scale

 

Resolution

孤立したオブジェクト(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}}'

Additional Information

本事象は Cluster API v1.9 以降で修正されています。TKGm v2.5.3 以降へのアップグレードを検討してください。