Deployment 如何在kubernetes中部署新的应用程序版本

Deployment 如何在kubernetes中部署新的应用程序版本,deployment,kubernetes,Deployment,Kubernetes,在这一问题中: 询问者提到他编辑了部署以将版本更改为v2。假设容器v2已经存在,那么新版本的自动部署工作流程是什么?然后如何在不手动编辑部署配置或签入新版本的yaml的情况下部署它 如果您更改基础容器(如v1->另一个版本,也称为v1),Kubernetes会部署新的还是旧的?假设v1已经运行,并且您尝试使用相同的环境变量值再次部署v1。,那么k8s将看不到当前部署资源和更新部署资源之间的任何差异。 如果没有diff,k8s调度程序会假定已达到所需状态,并且不会调度任何新POD,即使设置了ima

在这一问题中:

询问者提到他编辑了部署以将版本更改为v2。假设容器v2已经存在,那么新版本的自动部署工作流程是什么?然后如何在不手动编辑部署配置或签入新版本的yaml的情况下部署它


如果您更改基础容器(如v1->另一个版本,也称为v1),Kubernetes会部署新的还是旧的?

假设
v1
已经运行,并且您尝试使用相同的环境变量值再次部署
v1
。,那么k8s将看不到当前部署资源和更新部署资源之间的任何差异。 如果没有diff,k8s调度程序会假定已达到所需状态,并且不会调度任何新POD,即使设置了
imagePullPolicy:Always
。原因是
imagePullPolicy
只对新创建的POD产生影响。因此,如果正在计划一个新的pod,那么k8s将始终再次拉取图像。尽管如此,如果您的部署没有任何差异,那么一开始就不会安排新的pod

对于我的部署,我总是设置一个虚拟环境变量,如部署时间戳
deploy\u TS
,例如:

  containers:
  - name: my-app
    image: my-app:{{ .Values.app.version }}  ## value dynamically set by my deployment pipeline
    env:
    - name: DEPLOY_TS
      value: "{{ .Values.deploy_ts }}"  ## value dynamically set by my deployment pipeline
DEPLOY\u TS
的值始终设置为当前时间戳-因此它始终是不同的值。这样,k8s将在每次部署时看到差异,并计划一个新的pod-即使重新部署相同的版本

(我目前正在运行k8s 1.7)

如果您不想:

  • 签入新的YAML版本
  • 手动更新配置文件
您可以通过以下方式更新部署:

  • 通过修补/放置新映像作为资源修改,对有问题的部署进行REST调用。i、 e.
    PUT/api/extensions/v1beta1/namespaces/{namespace}/deployments-d{…使用v2进行部署}
  • kubectl设置映像部署/::v2

我认为这是基于图像拉动策略。默认值为“imagePullPolicy:Always”。这意味着它将获得新的版本。从DevOps的开发端,我们只需添加/更新一个配置env var
RESTART=
,这样我们就可以再次重新部署相同的版本(即:
v1
)。