Deployment 滾動更新的時候,老的 Pod 停止有事需要非常長時間甚至停不下來有什麼可能?

Kubernetes zhoudaiyu • at 2021-03-06 18:05:39 • 36 Views

K8s 1.13 ,deployment 更新,新 Pod 就緒已經 10 分鐘了,老的 Pod 還沒有被殺死,狀態是卡在 Terminating,container 已經停止了,這是 Pod 也沒有報錯,時候過幾分鐘 Pod 就被殺死了,有時候還是卡住,這時只能加上 graceful-period=0 和 force 兩個引數強制殺死 Pod,我們設定的 gracefulPeriodSecond 是 20s,也就是說發起殺 container 的訊號後 20s 即便沒有停,Pod 也應該自動被殺死了才對。由於這種問題是偶發的,我們也不太好查,也不知道去哪查。大家有啥思路嗎?

Total: 9
  • AnyISalIn 2021-03-05 22:39:35
    可以嘗試看看 Terminating 狀態中的 Pod 的 meta.finalizers 欄位的內容和所在宿主機的 kubelet 日誌排查下
  • zhoudaiyu 2021-03-05 22:41:35
    @AnyISalIn 老哥,我們還真看了 kubelet 的日誌了,沒發現啥線索,現在想的是能不能把 termination-log 給它掛載出來做持久化,這樣我們就可以看到日誌了,興許能發現什麼
  • zhoudaiyu 2021-03-05 22:41:35
    @AnyISalIn 你說的 finalizer 就是 Pod 的析構器吧,我記得有三種,但是我們的 deployment 都是用模板統一生成的,不應該有不同的析構器,而且卡主的 Deployment 也是隨機的,沒有什麼規律可循
  • AnyISalIn 2021-03-05 23:35:41
    可以嘗試一下在 Pod 執行的時候嘗試去宿主機直接 docker restart <container>,看下容器是否能夠正常重啟,Docker 的版本是多少啊 @zhoudaiyu 可以加個微信探討一下 YW55aXNhbGlu
  • zhoudaiyu 2021-03-06 07:43:13
    @AnyISalIn 加了兄弟,同意一下吧
  • Judoon 2021-03-06 11:40:08
    我遇到這個問題的時候,最後發現基本是主機導致的,load 過高,io 過高之類的。
    你說 deployment 是隨機的,那有沒有關注過卡在 terminating 狀態的 pod 是不是都出現在同一臺主機上。
    或者看一下卡住時,主機的監控
  • zhoudaiyu 2021-03-06 11:41:08
    @Judoon 有道理,我想辦法加一些監控,因為這是測試叢集我們基本沒啥監控
  • julyclyde 2021-03-07 14:21:33
    我猜你在容器裡執行了 systemd
  • zhoudaiyu 2021-03-07 16:16:51
    @julyclyde #8 容器特別乾淨 就一個 tomcat
Add a reply
For Commenting you need to Login. If you dont have a Account you need to Register.