如何设置Kubernetes镜像拉重试限制

时间:2018-10-30 19:46:49

标签: kubernetes kubernetes-container

从映像存储库中清除为容器指定的映像时,Kubernetes会长时间运行。这些部署是由持续集成系统创建的,有时在清除映像后会运行或重新运行管道。

kubectl get pods中的状态显示为ImagePullBackOff

应该在kube config yaml文件中设置什么以阻止这些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

谢谢!

1 个答案:

答案 0 :(得分:1)

AKAIK,在撰写本文时,控制此操作的唯一方法是使用容器规范中的imagePullPolicy

您可以将其设置为Never,但由于图像不在本地显示,因此无法运行您的广告连播。或者,您可以将其设置为IfNotPresent,但必须以某种方式在K8s节点中本地创建具有该特定标签的图像。两种方法都不理想,但我认为将其放入ImagePullBackOff是有道理的:人们可能想知道为什么他们的吊舱未运行。

因此,IMO更大的问题是,为什么要删除/使仍在群集中运行的Docker注册表中的图像无效?在删除或禁用Docker注册表中的映像(也称为deploy)之前,为什么不使用最新的映像更新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注册表中删除。您可以删除或覆盖标签:How to delete images from a private docker registry?