存储库映像更改时重新部署Google容器控制器

时间:2016-06-25 01:01:32

标签: kubernetes

我有什么方法可以复制我在cloud.docker上获得的行为,其中可以使用最新映像手动重新部署服务,或者在更新存储库映像时自动重新部署服务?

现在我在我的控制器和服务文件的shell脚本中手动执行此类操作:

kubectl delete -f ./ticketing-controller.yaml || true
kubectl delete -f ./ticketing-service.yaml || true
kubectl create -f ./ticketing-controller.yaml
kubectl create -f ./ticketing-service.yaml

即使这看起来有点沉重,但工作正常。我真的错过了我在cloud.docker上的autoredeploy功能。

2 个答案:

答案 0 :(得分:1)

根据Kubernetes documentation

  

假设您运行的是nginx版本1.7.9:

$ kubectl run my-nginx --image=nginx:1.7.9 --replicas=3
deployment "my-nginx" created
     

要更新到1.9.1版,只需更改即可   来自.spec.template.spec.containers[0].image的{​​{1}}   nginx:1.7.9,使用kubectl命令。

nginx:1.9.1
     

就是这样!部署将以声明方式更新已部署的nginx   应用程序逐步落后于现场。它确保只有一个   一定数量的旧复制品可能会在它们存在时失效   更新,并且只能创建一定数量的新副本   超过所需数量的豆荚。

答案 1 :(得分:1)

删除控制器yaml文件本身不会删除kubernetes中的实际控制器,除非您有特殊配置。如果您有多个实例正在运行,删除控制器可能不是您想要的,因为它会删除正在运行的应用程序的所有实例。你真正想要做的是执行应用程序的滚动更新,逐步用运行新映像的容器替换运行旧映像的容器。

您可以通过以下方式手动执行此操作:

  1. 对于Deployment控制器更新yaml文件图像并执行kubectl apply
  2. 对于ReplicationController更新yaml文件并执行kubectl rollingupdate。请参阅:http://kubernetes.io/docs/user-guide/rolling-updates/
  3. 使用v1.3,您将可以使用kubectl set image
  4. 或者,您可以使用PaaS在回购中更新图像时自动推送图像。以下是几个Paas选项的不完整列表:

    • Red Hat OpenShift
    • 三角帆
    • Deis Workflow
相关问题