Docker 如何在Google容器引擎上更新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

我遵循了一些指南,我已经用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
  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
标记,因此我认为映像将在部署更新时显示。根据a
RollingUpdate
的规定,也应该是默认策略


但是,当我运行更新部署的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分支作为当前部署的真相的来源,如果需要返回版本,只需回滚该分支即可。