当前位置: 首页 > 知识库问答 >
问题:

如何更新谷歌容器引擎上的库伯内特斯部署?

纪正德
2023-03-14

我遵循了一些指南,我已经用谷歌容器引擎和谷歌容器注册表设置了CI。问题是我的更新没有应用到部署中。

这就是我的部署。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标记,我以为每次更新部署时都会下载图像。根据文档aRollingUpdate也应该是默认策略。

但是,当我运行更新部署的CI脚本时,不会下载更新的映像,也不会应用更改。我错过了什么?我假设在部署中没有任何变化。yml,未应用任何更新。如何让Kubernetes下载我的更新图像,并使用RollingUpdate部署它?

共有2个答案

邵华皓
2023-03-14

我们最近发布了一篇关于如何在GKE中实现我们称之为GitOps方法的技术概述。

您只需配置GCR builder从Github获取代码更改并运行构建,然后在集群中安装Weave Cloud agent并连接到存储YAML文件的repo,该代理将负责使用新映像更新repo,并将更改应用到集群。

有关更高级别的概述,请参见:

  • GitOps管道
  • 部署应用程序

免责声明:我是Kubernetes的撰稿人和Weaveworks的员工。我们开发开源和商业工具,帮助人们更快地使用Kubernetes进行生产。

禹正阳
2023-03-14

可以通过更改任何字段(如标签)强制更新展开。在我的例子中,我只是在我的CI脚本末尾添加了以下内容:

kubectl patch deployment fb-video-extraction -p \
  "{\"spec\":{\"template\":{\"metadata\":{\"labels\":{\"date\":\"`date +'%s'`\"}}}}}"
 类似资料:
  • 我知道很多人已经有类似的问题,我读了其中一些,但没有发现什么实际上帮助我到目前为止。 我有一个支持私有回购的gitlab,我还使用谷歌库伯内特斯引擎。我的私人回购协议中有几个Docker容器,我想将其中一个部署到Kubernetes引擎。 我用我还尝试了创建秘密docker注册表名--docker server=registry。xy。z--docker用户名=google--docker密码=x

  • 背景: 我对谷歌的云平台很陌生,所以我想确保我没有遗漏任何明显的东西。 我们正在试验GKE和Kubernetes,我们希望通过https公开一些服务。我已经阅读了有关http(s)负载平衡的文档,这些文档似乎建议您应该维护自己的进行SSL终端和负载平衡的nginx实例。对我来说,这看起来相当复杂(我习惯于使用AWS及其负载平衡器(ELB),它支持SSL终止已有很长时间了)。 问题: 如果您只需要在

  • 我确实部署了单吊舱,自定义docker映像如下: 在开发过程中,我希望推送新的最新版本并更新部署。如果不明确定义标记/版本并为每个构建增加它,就找不到如何做到这一点,并且

  • 我使用的是Kubernetes引擎,我有多个nginx入口控制器,它们的公共IP一直在变化。 我不能在生产中使用它,因为这不是正确的行为。 这正常吗?有人能帮我吗?

  • 我正在谷歌容器引擎上运行Kubernetes集群。默认情况下,我的指标不会推送到Stackdriver。 我需要显式启动Heapster服务,还是由容器引擎本身自动管理?

  • 具体到基于Docker的部署,这两者之间有什么区别?由于Google App Engine Flexible现在也支持基于Dockerfile的部署,而且它也是完全管理的服务,所以它似乎比在Container Engine上配置Kubernetes部署更可取,不是吗? 有哪些用例更倾向于使用Google容器引擎而不是灵活的应用引擎?