k8s之init container與應用容器的區別

簡單的說明一下兩者的區別:

  • 他們僅運行一次,成功後就會退出。
  • init container的運行方式與應用容器不同,它們必須先於應用容器執行完成,當設置了多個init container時,將按順序逐個運行,並且只有前一個initcontainer運行成功後才能運行後一個init container。當所有initcontainer都成功運行後,kubernetes纔會初始化pod的各種信息,並開始創建和運行應用容器。
  • 在init container的定義中也可以設置資源限制、volume的使用和安全策略等等.但資源限制的設置與應用容器不同:
  • 如果多個init container都定義了資源請求/資源限制,則取最大的值作爲所有initcontainer的資源請求值/資源限制值。
  • pod的有效資源請求值/資源限制值取以下二者中的較大值:
  • 所有應用容器的資源請求值/限制值之和
  • init container的有效資源請求值/限制值
  • 調度算法將基於pod的有效資源請求值/限制值進行計算,也就是說initcontainer可以爲初始化操作預留系統資源,即使後續應用容器無須使用這些資源。
  • pod的有效QoS等級適用於init container和應用容器。
  • 資源配額和限制將根據pod的有效資源請求/限制,與調度機制一致。
  • init container不能設置readinessProbe探針,因爲必須在它們成功運行以後才能繼續運行pod中定義的普通容器。將pod重啓時,initcontainer將會重新運行,常見的pod重啓場景如下:
    1. init container的鏡像被更新時,initcontainer將重新運行,導致pod重啓,僅更新應用容器的鏡像只會使得應用容器被重啓。
    2. pod的infrastructure容器更新時,pod將會重啓。
    3. 或pod中的所有應用容器都終止了,並且RestartPolicy=Always時,則pod將會重啓。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章