Kubernetes 設(shè)計模式筆記 —— 生命周期管理

由云原生平臺管理的容器化應(yīng)用,并不能控制其自身的生命周期劈猪。它們必須監(jiān)聽由管理平臺發(fā)出的事件途戒,再對生命周期做出相對應(yīng)的變更。所謂的生命周期管理件豌,即代表應(yīng)用該如何讀取和響應(yīng)這些由管理平臺發(fā)出的生命周期事件疮方。

鑒于某些管理策略或者外部環(huán)境因素,在任意時間點茧彤,管理平臺都有可能需要啟動或者終止容器中的應(yīng)用骡显。容器化應(yīng)用可以決定平臺發(fā)出的哪些事件是重要的,應(yīng)該以怎樣的行為去響應(yīng)曾掂。這實際上是一個平臺用來同應(yīng)用進行溝通惫谤、向應(yīng)用發(fā)送命令的 API,應(yīng)用可以選擇接受或者忽略遭殉。

僅僅使用進程模型來啟動和終止應(yīng)用通常是不夠的石挂,現(xiàn)實世界中的應(yīng)用往往需要更細粒度的交互控制和生命周期管理。有些應(yīng)用需要 warm up险污,有些需要一個平滑痹愚、干凈的關(guān)閉流程富岳。因而 Kubernetes 設(shè)計了如下幾種由平臺發(fā)出的事件,容器可以選擇監(jiān)聽和響應(yīng)這些事件拯腮。


events

SIGTERM Signal

當(dāng) Kubernetes 決定關(guān)閉某個容器時窖式,該容器會收到一個 SIGTERM 信號,之后容器會嘗試盡快完成關(guān)閉流程动壤。對于某些應(yīng)用來說萝喘,干凈的快速終止是可行的。但另外一些應(yīng)用有可能需要完成處理中的請求琼懊,釋放打開的連接阁簸,清理臨時文件等。這會耗費更多的時間哼丈。

SIGKILL Signal

當(dāng)某個容器進程在收到 SIGTERM 信號后并沒有關(guān)閉启妹,接下來它會再收到一個 SIGKILL 信號強制終止進程。默認情況下醉旦,Kubernetes 會在發(fā)出 SIGTERM 信號 30 秒后再發(fā)送 SIGKILL饶米。這個 30 秒的過渡時間可以通過 Pod 的 .spec.terminationGracePeriodSeconds 字段進行配置。

Poststart Hook

僅僅使用進程信號來管理生命周期有一定程度的限制车胡。因而 Kubernetes 又提供了 postStartpostStop檬输。
postStart 示例:

apiVersion: v1
kind: Pod
metadata:
  name: post-start-hook
spec:
  containers:
  - image: k8spatterns/random-generator:1.0
    name: random-generator
    lifecycle:
      postStart:
        exec:
          command:
          - sh
          - -c
          - sleep 30 && echo "Wake up!" > /tmp/postStart_done

postStart 指定的命令會在容器創(chuàng)建后執(zhí)行,與容器的基礎(chǔ)進程異步匈棘。postStart 是一種阻塞請求丧慈,其 handler 完成之前,容器會一直處于 Waiting 狀態(tài)主卫,同時 Pod 處于 Pending 狀態(tài)伊滋。
postStart 的這種特性可以用來延遲容器的啟動,為容器的主進程的初始化爭取時間队秩。

另一個 postStart 的使用場景就是在 Pod 不滿足特定的前提條件時,阻止容器完成啟動昼浦。當(dāng) postStart 命令返回了一個非 0 的返回值馍资,主進程會被 Kubernetes 殺掉。

類似于 Health Probe关噪,postStart 和 preStop 有如下兩種 handler 類型:

  • exec:在容器中直接運行一個命令
  • httpGet:向容器開放的某個端口發(fā)送 HTTP GET 請求

對于 postStart 執(zhí)行的邏輯鸟蟹,需要注意以下幾點:

  • postStart 與容器進程是并行的關(guān)系,因而這個 hook 有可能在容器啟動前執(zhí)行
  • postStart 有至少執(zhí)行一次的目標(biāo)使兔,需要考慮重復(fù)執(zhí)行的情況
  • 對于失敗的 HTTP 請求建钥,postStart 不會重復(fù)嘗試

preStop

preStop hook 是一個在容器終止前發(fā)送給容器的阻塞請求。

apiVersion: v1
kind: Pod
metadata:
  name: pre-stop-hook
spec:
  containers:
  - image: k8spatterns/random-generator:1.0
    name: random-generator
    lifecycle:
      preStop:
        httpGet:
          port: 8080
          path: /shutdown

雖然 preStop 是阻塞的虐沥,但若它掛起或者返回一個非成功的結(jié)果熊经,并不會阻止進程被殺掉泽艘、容器被刪除。preStop 只是為了能夠平滑地關(guān)閉應(yīng)用镐依,是除 SIGTERM 之外的另一種方便的選擇匹涮。

總結(jié)

云原生平臺能提供的最大的好處之一,就是在不夠可靠的云計算基礎(chǔ)設(shè)施上槐壳,可靠地運行和擴展應(yīng)用然低。這類平臺設(shè)計了一系列應(yīng)用必須遵守的協(xié)議和約束。處理和響應(yīng)協(xié)議中的事件务唐,能夠確保應(yīng)用平穩(wěn)地啟動和關(guān)閉雳攘,對接受服務(wù)的客戶端只有最小的影響。應(yīng)用的生命周期不再由個人所控制枫笛,而是完全由平臺自動化管理吨灭。

參考資料

Kubernetes Patterns

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市崇堰,隨后出現(xiàn)的幾起案子沃于,更是在濱河造成了極大的恐慌,老刑警劉巖海诲,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件繁莹,死亡現(xiàn)場離奇詭異,居然都是意外死亡特幔,警方通過查閱死者的電腦和手機咨演,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蚯斯,“玉大人薄风,你說我怎么就攤上這事∨那叮” “怎么了遭赂?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長横辆。 經(jīng)常有香客問我撇他,道長,這世上最難降的妖魔是什么狈蚤? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任困肩,我火速辦了婚禮,結(jié)果婚禮上脆侮,老公的妹妹穿的比我還像新娘锌畸。我一直安慰自己,他們只是感情好靖避,可當(dāng)我...
    茶點故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布潭枣。 她就那樣靜靜地躺著比默,像睡著了一般。 火紅的嫁衣襯著肌膚如雪卸耘。 梳的紋絲不亂的頭發(fā)上退敦,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天,我揣著相機與錄音蚣抗,去河邊找鬼侈百。 笑死,一個胖子當(dāng)著我的面吹牛翰铡,可吹牛的內(nèi)容都是我干的钝域。 我是一名探鬼主播,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼锭魔,長吁一口氣:“原來是場噩夢啊……” “哼例证!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起迷捧,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤织咧,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后漠秋,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體笙蒙,經(jīng)...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年庆锦,在試婚紗的時候發(fā)現(xiàn)自己被綠了捅位。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,424評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡搂抒,死狀恐怖艇搀,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情求晶,我是刑警寧澤焰雕,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布,位于F島的核電站芳杏,受9級特大地震影響淀散,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蚜锨,卻給世界環(huán)境...
    茶點故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望慢蜓。 院中可真熱鬧亚再,春花似錦、人聲如沸晨抡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至如捅,卻和暖如春棍现,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背镜遣。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工己肮, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人悲关。 一個月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓谎僻,卻偏偏與公主長得像,于是被迫代替她去往敵國和親寓辱。 傳聞我的和親對象是個殘疾皇子艘绍,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,435評論 2 359

推薦閱讀更多精彩內(nèi)容