簡體   English   中英

如何在 kubernetes 中提取已經緩存的圖像?

[英]How to repull image in kubernetes that is already cached?

我正在使用具有 20 個工作節點的 kubernetes 集群。 我已將圖像拉取策略設置為 IfNotPresent 以減少創建時間。 圖像托管在 dockerhub 上。

當我在 dockerhub 中更新圖像時,我需要清除所有 20 個工作節點的緩存。 目前我正在做 docker 拉所有 20 個工作節點以更新最新圖像。

是否有任何 kubernetes 原生解決方案或任何其他最佳行業解決方案來更新所有節點上的圖像?

最好的行業解決方案是為每個部署的圖像使用一個唯一的標簽。 更改圖像標簽,k8s 將為您處理升級。 你只有這個問題,因為你想使用相同的標簽,即使圖像發生變化。 無論您認為不值得明確對圖像進行版本控制的原因是什么,您都錯了:P。 顯式版本很好地指定了它們

你需要在 ImagePullPolicy 中使用 Always。 如果是這樣,只要提交 hash 有特定標簽的更改,K8S 就會再次拉取。 記得也要設置 rollingUpdate。

這取決於您是否在 Docker Hub 上對映像進行版本控制。

出於幾個原因,強烈建議您對圖像進行版本控制。

  • 出現問題時回滾更快,因為您只需將版本號更改為以前的版本

  • 您所有的 pod 都將使用相同版本的圖像

您可以在 Kubernetes 文檔中閱讀有關容器鏡像配置的信息。

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

  • imagePullPolicy: IfNotPresent :僅當圖像在本地不存在時才被拉取。

  • imagePullPolicy: Always :每次啟動 Pod 時都會拉取鏡像。

  • imagePullPolicy被省略並且圖像標簽是:latest或者被省略: Always應用。

  • imagePullPolicy被省略並且圖像標簽存在但不存在:latest : IfNotPresent被應用。

  • imagePullPolicy: Never :假設圖像存在於本地。 沒有嘗試拉取圖像。

注意:為確保容器始終使用相同版本的映像,您可以指定其摘要,例如sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2 摘要唯一標識映像的特定版本,因此除非您更改摘要值,否則 Kubernetes 永遠不會更新它。

注意:在生產環境中部署容器時應避免使用:latest標簽,因為很難跟蹤哪個版本的鏡像正在運行並且更難以正確回滾。

注意:底層圖像提供程序的緩存語義甚至使imagePullPolicy: Always高效。 以 Docker 為例,如果鏡像已經存在,那么拉取嘗試很快,因為所有鏡像層都被緩存,不需要下載鏡像。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM