如何更新Google Container Engine上的Kubernetes部署?

我遵循了一些指南,并且已经使用Google Container Engine和Google Container Registrybuild立了CI。 问题是我的更新没有被应用到部署。

所以这是我的包含Kubernetes服务和部署的deployment.yml:

apiVersion: v1 kind: Service metadata: name: my_app labels: app: my_app spec: type: LoadBalancer ports: - port: 80 targetPort: 3000 selector: app: my_app --- apiVersion: extensions/v1beta1 kind: Deployment metadata: name: my_app spec: replicas: 1 template: metadata: labels: app: my_app spec: containers: - name: node image: gcr.io/me/my_app:latest ports: - containerPort: 3000 resources: requests: memory: 100 - name: phantom image: docker.io/wernight/phantomjs:2.1.1 command: ["phantomjs", "--webdriver=8910", "--web-security=no", "--load-images=false", "--local-to-remote-url-access=yes"] ports: - containerPort: 8910 resources: requests: memory: 1000 

作为我的CI过程的一部分,我运行一个脚本,在谷歌云registry中更新图像,然后运行kubectl apply -f /deploy/deployment.yml 。 这两个任务都成功了,我收到通知,部署和服务已经更新:

 2016-09-28T14:37:26.375Zgoogleclouddeploymentservice "my_app" configured 2016-09-28T14:37:27.370Zgoogleclouddeploymentdeployment "my_app" configured 

由于我在图像上包含了:latest标签,因此我认为每次部署更新时都会下载图像。 根据文档 RollingUpdate也应该是默认策略。

但是,当我运行我更新部署的CI脚本 – 更新的图像不下载,更改不适用。 我错过了什么? 我假设,因为没有更改deployment.yml ,没有更新正在应用。 如何让Kubernetes下载我的更新映像并使用RollingUpdate进行部署?

您可以通过更改任何字段(如标签)来强制更新部署。 所以在我的情况下,我刚刚在我的CI脚本的末尾添加了这个:

 kubectl patch deployment fb-video-extraction -p \ "{\"spec\":{\"template\":{\"metadata\":{\"labels\":{\"date\":\"`date +'%s'`\"}}}}}"