Docker 如何在Google容器引擎上更新Kubernetes部署?
我遵循了一些指南,我已经用Google容器引擎和Google容器注册表设置了CI。问题是我的更新未应用于部署 这是my deployment.yml,它包含Kubernetes服务和部署:Docker 如何在Google容器引擎上更新Kubernetes部署?,docker,kubernetes,google-cloud-platform,google-kubernetes-engine,Docker,Kubernetes,Google Cloud Platform,Google Kubernetes Engine,我遵循了一些指南,我已经用Google容器引擎和Google容器注册表设置了CI。问题是我的更新未应用于部署 这是my deployment.yml,它包含Kubernetes服务和部署: apiVersion: v1 kind: Service metadata: name: my_app labels: app: my_app spec: type: LoadBalancer ports: - port: 80 targetPort: 3000
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过程的一部分,我运行一个脚本,更新google cloud 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
标记,因此我认为映像将在部署更新时显示。根据aRollingUpdate
的规定,也应该是默认策略
但是,当我运行更新部署的CI脚本时,不会下载更新的映像,也不会应用更改。我错过了什么?我假设由于
部署.yml
中没有任何变化,因此没有应用任何更新。如何让Kubernetes下载更新的映像并使用RollingUpdate
部署它?您可以通过更改任何字段(如标签)强制更新部署。在我的例子中,我只是在我的CI脚本末尾添加了以下内容:
kubectl patch deployment fb-video-extraction -p \
"{\"spec\":{\"template\":{\"metadata\":{\"labels\":{\"date\":\"`date +'%s'`\"}}}}}"
我们最近发表了一篇关于如何在GKE中实现我们称之为GitOps方法的文章 您只需配置GCR builder从Github获取代码更改并运行构建,然后在集群中安装Weave Cloud agent并连接到存储YAML文件的repo,该代理将负责使用新映像更新repo并将更改应用到集群 有关更高级别的概述,请参见:
免责声明:我是Kubernetes撰稿人和Weaveworks员工。我们构建了开源和商业工具,帮助人们更快地使用Kubernetes进行生产。Quick bit of extra Details:我知道它的最佳做法是将版本包含在图像名称的末尾,但我们的设置需要更改多个文件,这将是一个难题。因此,我们很乐意将我们的git分支作为当前部署的真相的来源,如果需要返回版本,只需回滚该分支即可。