vSphere Supervisor ワークロードクラスターにおいて containerd により不正確なコンテナ状態が報告される問題
search cancel

vSphere Supervisor ワークロードクラスターにおいて containerd により不正確なコンテナ状態が報告される問題

book

Article ID: 425954

calendar_today

Updated On:

Products

Tanzu Kubernetes Runtime

Issue/Introduction

免責事項:これは英文の記事「Inaccurate Container Status Reported By Containerd in vSphere Supervisor Workload Cluster 」の日本語訳です。記事はベストエフォートで翻訳を進めているため、ローカライズ化コンテンツは最新情報ではない可能性があります。最新情報は英語版の記事で参照してください。

vSphere Supervisor ワークロードクラスターのノード上でコンテナを確認した際、実際には当該ノード上に基盤となるプロセスが存在しないにもかかわらず、containerd がコンテナの状態を「Running」と誤って報告する事象が発生します。

この影響により、Kubernetes がコンテナの停止を正しく認識できず、ノードが Deleting 状態、または cordon 状態(SchedulingDisabled)のまま停止してしまう場合があります。

 

ワークロードクラスターのコンテキストにおいて、以下のいずれか、または複数の症状が確認されます:

  • 影響を受けたコンテナに対応する Pod が、引き続き Running または Terminating と表示される:
    kubectl get pods -n <pod namespace> -o wide

     

  • ノードが Deleting 状態で停止している場合、SchedulingDisabled 状態として表示される:
    kubectl get nodes

 

Pod およびそのコンテナが稼働しているノードに直接 SSH 接続した場合:

  • ノード上で crictl ps を実行すると、誤ったコンテナ状態が表示されます:
    crictl ps

     

  • containerd のログには、以下のようなエラーが記録されます:
    journalctl -xeu containerd
    
    MON DD HH:MM:SS <node name> containerd[988]: time="MON DD HH:MM:SS.ssssssZ" level=info msg="StopPodSandbox for \"<container ID>\""
    MON DD HH:MM:SS <node name> containerd[988]: time="MON DD HH:MM:SS.ssssssZ" level=error msg="StopPodSandbox for \"<container ID>\" failed" error="rpc error: code = DeadlineExceeded desc = failed to stop container \"<container ID>\": an error occurs during waiting for container \"<container ID>\" to be killed: wait container \"<container ID>\": context deadline exceeded"


Environment

vSphere Supervisor

vSphere Kubernetes Release (VKR) v1.30.1 or v1.29.4

Containerd v1.6.31

Cause

本事象は、containerd における Exit プローブと Exec プローブの間で発生するレースコンディションが原因です。

参考情報:Containerd v1.6.29 にて導入された以下の Issue および Pull Request をご参照ください。
https://github.com/containerd/containerd/issues/10589
https://github.com/containerd/containerd/pull/9927

 

Resolution

containerd 上ではコンテナが Running 状態として表示されますが、実際には当該ノード上に該当するプロセスは存在しません。

本問題は、containerd v1.6.31 を使用している以下の vSphere Kubernetes Releases(VKR)で確認されています:

  • VKRs v1.30.1

  • VKR v1.29.4

 

Resolution

本問題は Containerd v1.6.36 にて修正されています: https://github.com/containerd/containerd/pull/10676

Containerd v1.6.36 以降を使用している VKR では、本問題は発生しません。

該当するワークロードクラスターを、より新しい VKR バージョンへアップグレードしてください。

VKR に含まれる containerd のバージョンについては、以下の VKR リリースノートをご参照ください:

VMware VKR Release Notes

 

Workaround

影響を受けているノード上で containerd を直接再起動することで、ノード上のすべてのコンテナ状態が正しく更新されます:

systemctl restart containerd