This question already has answers here:
Kubernetes: kubectl apply does not update pods when using “latest” tag

(4个答案)


9个月前关闭。




问题

关于Slack和Stack Overflow的一个常见问题是,当镜像标签未更改但基础镜像已更改时,如何触发对Deployment / RS / RC的更新。

考虑:
  • 有一个带有镜像foo的现有部署:Latest
  • 用户构建一个新镜像foo:最新的
  • 用户将foo:最新推送到其注册表
  • 用户想要在这里做一些事情,以告诉Deployment提取新镜像并滚动更新现有Pod

  • 例如:
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: worker-deployment
    spec:
      replicas: 1
      selector:
        matchLabels:
          component: worker
      template:
        metadata:
          labels:
            component: worker
        spec:
          containers:
            - name: worker
              image: stephengrider/multi-worker
              env:
                - name: REDIS_HOST
                  value: redis-cluster-ip-service
                - name: REDIS_PORT
                  value: "6379"
    

    现在,我对multiWorker镜像进行了更改

    并重新部署,但不获取最新镜像?

    最佳答案

    的默认拉取策略是IfNotPresent,如果该图像已经存在,它将导致Kubelet跳过拉取图像。 Refer Link

    如果您想始终强制拉动,则可以执行以下操作之一:

    1:将容器的imagePullPolicy设置为Always

    2:省略imagePullPolicy,并使用:latest作为要使用的图像的标签。

    3:省略 imagePullPolicy和要使用的图像标签。

    4:启用AlwaysPullImages接纳 Controller 的



    当kubelet尝试拉出下面列出的指定图像时,图像的各种imagePullPolicytag影响。 Refer Link for Details

    1)imagePullPolicy:IfNotPresent:仅当图像本地不存在时才拉图像。

    2)imagePullPolicy:始终:每次启动pod时都会拉动图像。

    3)省略imagePullPolicy,并且图像标签为:latest或被省略:始终应用。

    4)省略了imagePullPolicy,并且存在image标签,但没有:latest:IfNotPresent被应用。

    5)imagePullPolicy:从不:假定图像在本地存在。没有尝试拉图像。

    09-13 00:28