Kubernetes 部署 - 如果映像校驗和未更改,請勿重新啟動 Pod

Kubernetes 部署 - 如果映像校驗和未更改,請勿重新啟動 Pod

docker-compose我們有一個目前用於部署容器(有效)的系統docker-compose pull && docker-compose up,並且正在將該系統轉換為 Kubernetes。

我們有 CI/CD,可以根據推送到 git 儲存庫的 git 標籤自動部署到生產環境。對於分期,我們不斷推進一個分支。 docker 映像像是用 git 生產標籤或 git staging 分支名稱建構和標記的。

在部署時,docker-compose如果鏡像實際上是相同的,即兩個生產標籤指向同一個鏡像,則足夠智能,不會重新啟動容器。

我正在尋找一種在 Kubernetes 中做同樣事情的方法 - 如果在部署時用於 pod 容器的實際鏡像與已經運行的鏡像相同(基於鏡像校驗和,而不僅僅是鏡像標籤),那麼它不應該重新啟動Pod。這可能嗎?

謝謝

答案1

正如我在評論中提到的,它應該可以開箱即用imagePullPolicy:Always

根據文件

容器鏡像

imagePullPolicy 和鏡像的標籤會影響 kubelet 嘗試拉取指定鏡像的時間。

影像拉取策略:總是:每次 kubelet 啟動容器時,kubelet 都會查詢容器映像註冊表以將名稱解析為鏡像摘要。如果 kubelet 有一個容器鏡像,該鏡像在本機快取了確切的摘要,那麼 kubelet 將使用其快取的鏡像;否則,kubelet 將下載(拉取)具有已解析摘要的映像,並使用映像來啟動容器。

注意:為了確保容器始終使用相同版本的鏡像,您可以指定其摘要;將 : 替換為 @(例如 image@sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2)。摘要唯一地識別了映像的特定版本,因此 Kubernetes 永遠不會更新它,除非您更改摘要值。


另外還有一個工具叫意象,值得一看。 Imago 檢查正在執行的 pod sha256,然後重新啟動需要使用較新映像的資源。

相關內容