精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

[Kubernetes]為什么有時會出現刪除POD后要等一段時間才能被刪掉

馬哥Linux運維 ? 來源:稀土掘金 ? 2023-12-22 10:38 ? 次閱讀

正常情況下,執行kubectl delete pod之后,pod一般會立即被刪除。但是偶爾會出現這樣一種情況,刪除pod之后,pod的狀態一直顯示為Terminating,需要等待一段時間才會被刪除,這是什么原因呢?


NAME    READY   STATUS        RESTARTS   AGE
nginx   1/1     Terminating   0          4m34s

首先我們來了解一下,刪除pod時,k8s做了哪些操作

Typically, with this graceful termination of the pod, kubelet makes requests to the container runtime to attempt to stop the containers in the pod by first sending a TERM (aka. SIGTERM) signal, with a grace period timeout, to the main process in each container. The requests to stop the containers are processed by the container runtime asynchronously. There is no guarantee to the order of processing for these requests. Many container runtimes respect theSTOPSIGNALvalue defined in the container image and, if different, send the container image configured STOPSIGNAL instead of TERM. Once the grace period has expired, the KILL signal is sent to any remaining processes, and the Pod is then deleted from theAPI Server

上圖為k8s官方文檔上的說明,這一大段簡單概括起來就是如下兩步:

kubelet發送kill 1到pod

經過terminationGracePeriodSeconds(一般為30s)之后,如果pod還沒被刪掉,則直接發送kill -9 1強制殺掉進程

f9eb15be-9ff2-11ee-8b88-92fbcf53809c.png

至于這里為什么會等待30s,原因如下: k8s pod在結束前可能需要執行一些命令,這些命令可以設置在preStop中進行設置,在刪除pod的時候,preStop Hook和SIGTERM 信號并行發生,但是Kubernetes 不會等待 preStop Hook 完成,所以這里需要設置一個等待時間讓preStop執行完成之后,在刪除pod,這個等待時間就是通過terminationGracePeriodSeconds進行設置的.

但是我們的pod里并沒有設置preStop,還是等待了30s pod才徹底被刪除

所以這里的問題可能是第1步中,kill 1并沒有將進程殺掉, 也就是說進程并沒有響應SIGTERM信號

為什么會出現這種情況呢, 進入到容器中看下具體的進程:


UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 08:58 ?        0000 bash /start.sh
root         7     1 94 08:58 ?        0013 python3 /server.py

可以看到有兩個進程, 其中1為主進程, 7為1的子進程, start.sh內容如下:


#!/usr/bin/env bash
python3 /server.py

通過執行shell腳本拉起真正的業務進程, 而且以阻塞方式運行, 刪除pod時, 發送的SIGTERM信號不會有任何響應, 因為傳遞不到子進程7, 無法結束子進程, 進而導致pod無法結束.

這里可能會有這樣的疑問, 為什么不直接啟動業務進程呢? 這是因為有些場景下, 在啟動業務進程之前, 需要進行一些初始化操作, 又不想或者不能通過init-container來完成, 只能通過啟動腳本去做, 啟動腳本初始化結束之后, 再將業務進程拉起.

如何避免這類問題

盡量直接啟動業務進程, 不要依賴進程拉起業務進程, 初始化操作盡量通過init-container來完成

在啟動腳本里捕獲SIGTERM, 并將其傳遞到子進程


#!/usr/bin/env bash


exit_func() {
    pkill python3
    exit
}


trap 'exit_func' SIGTERM


python3 /server.py &


while true
do
    sleep 1
done

如上所示, 將start.sh調整一下, 這樣就能將SIGTERM傳遞到子進程, 讓pod快速結束

鏈接:https://juejin.cn/post/7314804357697945637






審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Shell
    +關注

    關注

    1

    文章

    359

    瀏覽量

    23191

原文標題:[Kubernetes] 為什么有時會出現刪除POD之后,需要等待一段時間才能被刪掉?

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    STM8串口工作一段時間出現通訊異常的原因?

    能串口。發送數據前先發送幾個0x00喚醒對方再發有用數據。通訊速率很低。 產品在終端客戶手上使用一段時間可能會出現通訊不上的問題。出現問題后過
    發表于 04-15 08:05

    ESP32C3任務執行一段時間會出現任務不運行的問題,為什么?

    ESP32C3任務執行一段時間會出現任務不運行的問題, 不運行的任務優先級低,并且任務的延時時間為vTaskDelay(100/ portTICK_PERIOD_MS);
    發表于 06-05 07:23

    esp32使用esp_http_client時過了一段時間會出現報錯,為什么?

    每次都是使用了一段時間出現這個問題,甚至連wifi都異常斷開,無法重連
    發表于 06-17 07:17

    cDAQ9184運行一段時間報錯

    該設備主要功能為信號采集,在連續運行一段時間會出現板卡報錯的情況(報錯圖片在下方)。請問下各位大佬,有遇到過這種情況的嗎?該如何解決呢? 補充內容 (2018-3-6 08:4
    發表于 03-05 16:12

    STM32運行一段時間死機,手動復位無效,只能上電復位才能正常運行

    STM32運行一段時間死機,手動復位無效,只能上電復位才能正常運行,是不是STM32F030R8T6的芯片問題啊? 補充下,程序是做低功耗功能STOP模式,用到鬧鐘喚醒,外部中斷,
    發表于 01-08 09:39

    掃碼槍串口調試有時會出現斷碼的情況

    `掃碼槍在用labview程序時有時會出現斷碼的情況,后來我用串口調試助手發現本來行的碼會變成兩行,有大佬知道原因嗎,zebra的DS8108的掃碼槍.`
    發表于 08-02 18:30

    為什么enc28j60+lwip的例程有時ping一段時間延時很大?

    enc28j60+lwip的例程有時ping一段時間時會變很大,需要重新復位板子才能正常回
    發表于 09-01 22:49

    uCOS III+lwIP運行一段時間無法重連是怎么回事?

    大家好:最近項目里用到uCOSIII+lwIP,F407,出現了問題。系統中開了個TCP Server, 開了個UDP。運行了一段時間
    發表于 10-25 00:57

    FreeRtos系統運行一段時間跑死了是什么原因?

    這個是什么原因呢,有時會出現hardfault,這個是概率性事件,有時就不會卡死
    發表于 06-17 09:01

    CH582M使用一段時間再連接,能連上但是搜不到服務怎么解決?

    沁恒工程師:我個項目用了CH582M芯片,目前送樣測試。出現問題,描述如下:1. 用了一段時間,搜多到廣播,連接設備,設備Connect消息有了,但是接下來手機去獲取service
    發表于 09-19 06:12

    CH579有時會出現拔了網線,狀態燈常亮怎么解決?

    CH579有時會出現拔了網線,狀態燈常亮,這個問題有辦法解決嗎?出現這種情況時CH57xNET_GetPHYStatus() 獲取到的數據直是2,不會變成1。
    發表于 10-14 06:33

    為什么TSC測量在退出stop模式要等一段時間才能正常讀數呢

    upHAL_ResumeTick();SystemClock_Config();}我想知道為什么TSC測量在退出stop模式要等一段時間才能正常讀數。
    發表于 12-26 09:15

    STC使用一段時間真的會掉固件嗎?

    STC使用一段時間真的會掉固件?
    發表于 10-31 08:29

    Arduino 接MPU6050 9250使用IIC通訊,輸出數據一段時間死機卡死的問題解決

    Arduino 接MPU6050 9250使用IIC通訊,輸出數據一段時間死機卡死的問題解決
    發表于 12-06 15:06 ?24次下載
    Arduino 接MPU6050 9250使用IIC通訊,輸出數據<b class='flag-5'>一段時間</b><b class='flag-5'>后</b>死機卡死的問題解決

    維修力科示波器604ZI開機一段時間黑屏

    一段時間黑屏維修 、示波器維修型號:力科604ZI。 二、報修故障:開機使用一段時間黑屏。 三、故障檢測:對內部元件進行詳細檢測。儀器
    的頭像 發表于 12-11 16:18 ?380次閱讀