如何更新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'`\"}}}}}"