Kubernetes CKA課程筆記 49

擁有複數Containers的Pod

ZONGRU Li
Nov 13, 2021

前面章節過後,開發者已經可以順利的開發與Debug各自的Pod

在一般情況下,一個Pod內只會建立(定義)一個Container

或我們可以稱Main Container,也就是處理主要工作的Container

但是開發者有時候會有需求,需要附掛一些小程式一併執行,例如:

  1. 更新Cache內容
  2. 做一些認證(authentication)的處理
  3. 蒐集主要程式的log資訊

這邊可先將這類程式稱作:Helper Application

並且還有其他種類的形式如在主要程式運作前要跑的腳本,例如:

4.在主要應用程式啟動前要設置環境參數

所以又該如何佈署這類小程式或腳本到K8s?

  • K8sPod就如同虛擬的OS系統,Pod本身有自己的以下資訊:
  • 1. 自己的IP位置
  • 2. 自己的PORT
  • 3. 進入的條件….etc
  • 並且Pod內允許存在多個Container
  • 不同Container可以是一個MainHelper的應用程式
  • 一般Helper Container術語上又可被稱為Sidecar Container
  • 通常Sidecar Container都與Main Container非同步(asynchronously)地運行
  • 如下範例Sidecar同步mysql-db的資料
sidecar可能每五分鐘同步著mysql-db的資料,但運行上是非同步
  • 或是一般app應用程式蒐集log數據如下圖
  • 由於sidecar都在同一個Pod(如機台一樣)
  • 所以sidecarMain Container溝通都是走localhost,而不用hostname
  • 並且彼此分享Data
  • 甚至Pod內的sidecar container可以很多個!!如下圖

Init Container:

考量到前面提到的情境,如果要在Main Container啟動前

先執行一個script.sh內容,而且可能只執行"乙次"

可能是設置系統環境變數,或是系統檢查

抑或是等待另一個service是可以取用的狀態,才要將Main Container啟動

在上述的情境下

可能side-by-side,週期性持續在Main Container旁邊一起啟動運作的

Sidecar Container就不是那麼合適

我們要求的情境下,只在最初運作執行任務,甚至要比Main Container先執行

完成任務即exits!

符合上述條件者的就叫做 → Init Container

Pod Configuration File寫法如下:

link

執行上會有如下連續圖的順序動作:

最初先啟動init container
執行其任務
結束
Main與sidecar Container才會啟動!

以上Kubernetes提供總共有兩種Multi-Container Pod形式:

  1. Sidecar Container
  2. Init Container

都有不同運行特性,可以挑選使用!

下一篇就是教如何佈署這兩種額外的Container!

參考課程(reference)

--

--

ZONGRU Li
ZONGRU Li

Written by ZONGRU Li

2022/11/17 開源部分個人筆記給LINE "Java程式語言討論區"社群,希望能對社群的技術學習做一點點貢獻.(掩面....記得退訂閱!

No responses yet