chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

[Kubernetes]為什么有時(shí)會(huì)出現(xiàn)刪除POD后要等一段時(shí)間才能被刪掉

馬哥Linux運(yùn)維 ? 來源:稀土掘金 ? 2023-12-22 10:38 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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


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

首先我們來了解一下,刪除pod時(shí),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發(fā)送kill 1到pod

經(jīng)過terminationGracePeriodSeconds(一般為30s)之后,如果pod還沒被刪掉,則直接發(fā)送kill -9 1強(qiáng)制殺掉進(jìn)程

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

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

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

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

為什么會(huì)出現(xiàn)這種情況呢, 進(jìn)入到容器中看下具體的進(jìn)程:


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

可以看到有兩個(gè)進(jìn)程, 其中1為主進(jìn)程, 7為1的子進(jìn)程, start.sh內(nèi)容如下:


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

通過執(zhí)行shell腳本拉起真正的業(yè)務(wù)進(jìn)程, 而且以阻塞方式運(yùn)行, 刪除pod時(shí), 發(fā)送的SIGTERM信號不會(huì)有任何響應(yīng), 因?yàn)閭鬟f不到子進(jìn)程7, 無法結(jié)束子進(jìn)程, 進(jìn)而導(dǎo)致pod無法結(jié)束.

這里可能會(huì)有這樣的疑問, 為什么不直接啟動(dòng)業(yè)務(wù)進(jìn)程呢? 這是因?yàn)橛行﹫鼍跋? 在啟動(dòng)業(yè)務(wù)進(jìn)程之前, 需要進(jìn)行一些初始化操作, 又不想或者不能通過init-container來完成, 只能通過啟動(dòng)腳本去做, 啟動(dòng)腳本初始化結(jié)束之后, 再將業(yè)務(wù)進(jìn)程拉起.

如何避免這類問題

盡量直接啟動(dòng)業(yè)務(wù)進(jìn)程, 不要依賴進(jìn)程拉起業(yè)務(wù)進(jìn)程, 初始化操作盡量通過init-container來完成

在啟動(dòng)腳本里捕獲SIGTERM, 并將其傳遞到子進(jìn)程


#!/usr/bin/env bash


exit_func() {
    pkill python3
    exit
}


trap 'exit_func' SIGTERM


python3 /server.py &


while true
do
    sleep 1
done

如上所示, 將start.sh調(diào)整一下, 這樣就能將SIGTERM傳遞到子進(jìn)程, 讓pod快速結(jié)束

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






審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • Shell
    +關(guān)注

    關(guān)注

    1

    文章

    373

    瀏覽量

    24891

原文標(biāo)題:[Kubernetes] 為什么有時(shí)會(huì)出現(xiàn)刪除POD之后,需要等待一段時(shí)間才能被刪掉?

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    STM8串口工作一段時(shí)間出現(xiàn)通訊異常的原因?

    能串口。發(fā)送數(shù)據(jù)前先發(fā)送幾個(gè)0x00喚醒對方再發(fā)有用數(shù)據(jù)。通訊速率很低。 產(chǎn)品在終端客戶手上使用一段時(shí)間可能會(huì)出現(xiàn)通訊不上的問題。出現(xiàn)問題后過
    發(fā)表于 04-15 08:05

    esp32使用esp_http_client時(shí)過了一段時(shí)間會(huì)出現(xiàn)報(bào)錯(cuò),為什么?

    每次都是使用了一段時(shí)間出現(xiàn)這個(gè)問題,甚至連wifi都異常斷開,無法重連
    發(fā)表于 06-17 07:17

    ADS1220運(yùn)行一段時(shí)間出現(xiàn)ADC = -1 的錯(cuò)值,怎么解決?

    ADS1220可以轉(zhuǎn)換出數(shù)據(jù),但是經(jīng)常運(yùn)行一段時(shí)間出現(xiàn)ADC = -1 的錯(cuò)值,并且復(fù)位單片機(jī)無法恢復(fù),只有把ADS1220斷電才能
    發(fā)表于 12-06 07:23

    ADS1243 DRDY有時(shí)會(huì)出現(xiàn)總是高電平,為什么?

    客戶采用ADS1243,DRDY是低電平有效,現(xiàn)在發(fā)現(xiàn)DRDY有時(shí)會(huì)出現(xiàn)總是高電平,不清楚是什么原因,大部分時(shí)間是可以變?yōu)榈碗娖降?
    發(fā)表于 12-09 06:27

    ADS1013采集運(yùn)放輸出數(shù)據(jù),一段時(shí)間變的很低是為什么?

    我用ADS1013采集AD8237運(yùn)放輸出直流數(shù)據(jù),開始采集得到的原始數(shù)據(jù)為683,對應(yīng)1.3v。一段時(shí)間大概5-9分鐘,ads1013讀出來的數(shù)據(jù)變成11,對應(yīng)0.02v,然后不再發(fā)生變化。需要系統(tǒng)復(fù)位ADS1013采集的數(shù)據(jù)才會(huì)變成683,但過了
    發(fā)表于 12-17 07:09

    使用stm32的spi讀取ads1256數(shù)據(jù),ads1256正常輸出數(shù)據(jù)一段時(shí)間會(huì)出現(xiàn)異常默認(rèn)設(shè)置,為什么?

    使用stm32的spi讀取ads1256數(shù)據(jù),發(fā)現(xiàn)ads1256在正常輸出數(shù)據(jù)一段時(shí)間(不確定多少時(shí)間,有時(shí)候幾秒有時(shí)候一兩分鐘)之后,總會(huì)出現(xiàn)
    發(fā)表于 01-07 08:23

    ADS8328兩路輸入端在配置成自動(dòng)或手動(dòng)都會(huì)出現(xiàn)一段時(shí)間通道翻轉(zhuǎn)的情況,為什么?

    ADS8328兩路輸入端在配置成自動(dòng)或手動(dòng)都會(huì)出現(xiàn)一段時(shí)間通道翻轉(zhuǎn)的情況,且翻轉(zhuǎn)輸出信號也會(huì)變成反向的信號。
    發(fā)表于 02-05 06:30

    LSM6DSR工作一段時(shí)間就算靜止不動(dòng)也會(huì)出現(xiàn)Y軸數(shù)據(jù)偏移,是什么原因?qū)е碌模?/a>

    LSM6DSR工作一段時(shí)間就算靜止不動(dòng)也會(huì)出現(xiàn)Y軸數(shù)據(jù)偏移,請問下是什么原因可能會(huì)導(dǎo)致出現(xiàn)這個(gè)異常?
    發(fā)表于 03-11 07:52

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

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

    uCOS III+lwIP運(yùn)行一段時(shí)間無法重連是怎么回事?

    大家好:最近項(xiàng)目里用到uCOSIII+lwIP,F(xiàn)407,出現(xiàn)了問題。系統(tǒng)中開了個(gè)TCP Server, 開了個(gè)UDP。運(yùn)行了一段時(shí)間
    發(fā)表于 10-25 00:57

    FreeRtos系統(tǒng)運(yùn)行一段時(shí)間跑死了是什么原因?

    這個(gè)是什么原因呢,有時(shí)會(huì)出現(xiàn)hardfault,這個(gè)是概率性事件,有時(shí)就不會(huì)卡死
    發(fā)表于 06-17 09:01

    CH579有時(shí)會(huì)出現(xiàn)拔了網(wǎng)線,狀態(tài)燈常亮怎么解決?

    CH579有時(shí)會(huì)出現(xiàn)拔了網(wǎng)線,狀態(tài)燈常亮,這個(gè)問題有辦法解決嗎?出現(xiàn)這種情況時(shí)CH57xNET_GetPHYStatus() 獲取到的數(shù)據(jù)直是2,不會(huì)變成1。
    發(fā)表于 10-14 06:33

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

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

    STC使用一段時(shí)間真的會(huì)掉固件嗎?

    STC使用一段時(shí)間真的會(huì)掉固件?
    發(fā)表于 10-31 08:29

    Arduino 接MPU6050 9250使用IIC通訊,輸出數(shù)據(jù)一段時(shí)間死機(jī)卡死的問題解決

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