Kubernetes Deployments的最佳CD策略

Lee*_*ulb 13 continuous-deployment gitlab-ci kubernetes

我们当前的CI部署阶段的工作方式如下:

  1. 构建容器.
  2. 将图像标记为"latest"< commit hash >.
  3. 将图像推送到存储库.
  4. 在适当的RC上调用滚动更新.

这对于基于RC的部署非常有用,但是现在Deployment对象变得更加稳定并且是一个底层功能,我们希望利用这种抽象优于当前的部署方案和开发阶段.

我遇到的问题是找到一种理智的方法来自动更新DeploymentCI工作流程.我一直在尝试的是拆分git repo并执行以下操作:

  1. [App Build]构建容器.
  2. [App Build]将图像标记为"latest"< commit hash >.
  3. [App Build]将图像推送到存储库.
  4. [App Build]调用app的Deploymentrepo的构建,传递当前的提交哈希.
  5. [部署构建]插入清单文件令牌(当前只是传递的提交哈希例如image: app-%%COMMIT_HASH%%)
  6. [部署构建]将更新的清单应用于适当的Deployment资源.

当然,虽然有更好的方法来处理这个问题.如果Deployment监控图像的"最新"标签的哈希变化,那将会很棒......也许它已经存在了?我没有成功.如何更好地处理部署的任何想法或见解Deployment将不胜感激:)

jan*_*kuo 7

Deploymentpod模板(.spec.template)的唯一监视器更改.如果图像名称没有更改,Deployment则不会进行更新.您可以Deployment通过更改pod模板来触发滚动更新(使用s),例如,使用commit hash标记它.此外,您需要设置.spec.template.spec.containers.imagePullPolicyAlways(Always如果:latest指定了tag并且无法更新,则默认设置为),否则将重用该图像.

  • 但是我建议不要使用`:latest`标签,这就是原因:http://developers.redhat.com/blog/2016/02/24/10-things-to-avoid-in-docker-containers/ - 请参阅"6)不要只使用"最新"标签" (2认同)