簡體   English   中英

如何設置 Kubernetes 鏡像拉取重試限制

[英]How to set Kubernetes image pull retry limit

當為容器指定的映像從映像存儲庫中清除時,Kubernetes 最終會產生長時間運行的 pod。 這些部署由持續集成系統創建,有時在清除映像時運行或重新運行管道。

kubectl get pods的狀態顯示ImagePullBackOff

應該在 kube config yaml 文件中設置什么來阻止這些 pod 運行數天? 理想情況下,我們只希望 Image 被拉動幾次,如果不成功則失敗。

pod 定義是

apiVersion: v1
kind: Pod
metadata:
  name: test-missing-image

spec:
  containers:

  - image: missingimage

    name: test
    resources:
      limits:
        memory: "10000Mi"
    readinessProbe:
      httpGet:
        port: 5678
        path: /somePath
      initialDelaySeconds: 360
      periodSeconds: 30
      timeoutSeconds: 30

  restartPolicy: Never
  terminationGracePeriodSeconds: 0

謝謝!

AKAIK,在撰寫本文時控制這一點的唯一方法是使用容器規范中的imagePullPolicy

您可以將其設置為Never但您的 pod 將不會運行,因為本地不存在該圖像。 或者您可以將其設置為IfNotPresent但不知何故,您必須在您的 K8s 節點本地創建具有該特定標簽的圖像。 任一個選項都不理想,但我相信將它放入ImagePullBackOff可能有一個理由:人們想知道為什么他們的 pod 沒有運行。

所以 IMO 更大的問題是,為什么要刪除/使 docker 注冊表中仍在集群中運行的圖像無效? 為什么不在pods/deployments/daemonsets/replicasets/statefulsets注冊表(也稱為部署)中刪除或使圖像失效之前使用最新的圖像更新pods/deployments/daemonsets/replicasets/statefulsets

一般的做法可能是這樣的:

create new image => deploy it => make sure everything is ok => 
{
  ok => invalidate the old image tag.
  not ok => rollback => delete new image tag => go back to create new image => create new image tag.
}

注意,層和圖像不會在 docker 注冊表中刪除。 您可以刪除或覆蓋標簽: 如何從私有 docker 注冊表中刪除圖像?

暫無
暫無

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

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