【问题标题】:Upgrade image in a Deployment's pods在 Deployment 的 pod 中升级镜像
【发布时间】:2016-04-28 20:50:42
【问题描述】:

我有一个 Deployment,其中包含 3 个运行镜像 172.20.20.20:5000/my_app 的 pod 副本,该镜像位于我的私有注册表中。

当我将该映像的新 latest 版本推送到我的注册表时,我想在部署中进行滚动更新。

我以这种方式推送新图像(将 v3.0 标记为最新):

$ docker tag 172.20.20.20:5000/my_app:3.0 172.20.20.20:5000/my_app
$ docker push 172.20.20.20:5000/my_app

但是什么也没发生。 Pod 的映像未升级。这是我的部署定义:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: myapp-deployment
spec:
  replicas: 3
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: app
        image: 172.20.20.20:5000/my_app:latest
        ports:
        - containerPort: 8080

有没有办法自动做到这一点?我应该像在 ReplicaControllers 中那样运行 rolling-update 这样的命令吗?

【问题讨论】:

    标签: kubernetes


    【解决方案1】:

    为了upgrade a Deployment,您必须使用新图像修改部署资源。例如,将 172.20.20.20:5000/my_app:v1 更改为 172.20.20.20:5000/my_app:v2。由于您只是在 Docker 注册表中修改映像,因此不会注意到更改。

    如果您(手动)杀死单个 Pod,部署将重新启动它们。由于部署映像指定了“最新”标签,由于隐含的"Always" ImagePullPolicy,Kubernetes 将下载最新版本(在您的情况下为“v3”)。

    【讨论】:

    • 谢谢。这对我帮助很大:)
    • 那么,如果我想自动化更新过程,我是否需要手动杀死 pod?真的吗?请检查:stackoverflow.com/questions/36920171/…
    • @bigdestroyer 不,如果您使用不同的映像版本,部署将为您处理一切。混乱是因为您没有指定任何标签,因此您将新版本作为“最新”推送到注册表。
    猜你喜欢
    • 2018-03-04
    • 2020-02-26
    • 2017-04-09
    • 2021-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-03
    相关资源
    最近更新 更多