微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何为两个依赖部署执行滚动更新,其中一个部署有更长的宽限期?

如何解决如何为两个依赖部署执行滚动更新,其中一个部署有更长的宽限期?

我有一个包含以下组件的 Kubernetes 集群(nginx-ingress)。

enter image description here

当我部署新版本的 Tomcat 时,旧版本会停留一段时间(出于应用程序原因)可能大约 10 分钟,然后它们就会死亡。在短时间内,一些用户会连接到旧的 Pod,一些用户会连接到新的 Pod。连接到 tomcat V2 的用户需要获取新的静态资产,这意味着他们需要连接到 Apache v2。问题是,即使我将两个版本的 apache 保留相同的时间,我将如何确保使用新版本 tomcat 的用户连接到新版本的 apache 和使用旧版本的用户tomcat 连接到旧版本的apache?我希望 apache pod 是无状态的。

解决方法

我认为您应该尝试蓝绿部署模型。

蓝/绿部署是一种用于发布软件代码的变更管理策略。蓝/绿部署,也可以称为 A/B 部署,需要两个完全相同的配置方式的相同硬件环境。当一个环境处于活动状态并为最终用户提供服务时,另一个环境保持空闲。

容器技术提供了一个独立的环境来运行所需的服务,这使得创建蓝/绿部署所需的相同环境变得非常容易。松散耦合的服务 - ReplicaSets 和 Kubernetes 中基于标签/选择器的服务路由可以轻松地在不同的后端环境之间切换。使用这些技术,Kubernetes 中的蓝/绿部署可以如下完成:

  • 在部署之前,基础设施准备如下:
    • 准备蓝色部署和绿色部署,TOMCAT_VERSION=7 和 TARGET_ROLE 分别设置为蓝色或绿色。
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: tomcat-deployment-${TARGET_ROLE}
spec:
  replicas: 2
  template:
    metadata:
      labels:
        app: tomcat
        role: ${TARGET_ROLE}
    spec:
      containers:
      - name: tomcat-container
        image: tomcat:${TOMCAT_VERSION}
        ports:
        - containerPort: 8080
        readinessProbe:
          httpGet:
            path: /
            port: 8080

准备公共服务端点,它最初路由到后端环境之一,例如 TARGET_ROLE=blue。

kind: Service
apiVersion: v1
metadata:
  name: tomcat-service
  labels:
    app: tomcat
    role: ${TARGET_ROLE}
    env: prod
spec:
  type: LoadBalancer
  selector:
    app: tomcat
    role: ${TARGET_ROLE}
  ports:
    - port: 80
      targetPort: 8080

可选地,准备一个测试端点,以便我们可以访问后端环境进行测试。它们类似于公共服务端点,但仅供开发/运营团队内部访问。

kind: Service
apiVersion: v1
metadata:
  name: tomcat-test-${TARGET_ROLE}
  labels:
    app: tomcat
    role: test-${TARGET_ROLE}
spec:
  type: LoadBalancer
  selector:
    app: tomcat
    role: ${TARGET_ROLE}
  ports:
    - port: 80
      targetPort: 8080
  • 在非活动环境(例如绿色环境)中更新应用程序。在部署配置中设置 TARGET_ROLE=green 和 TOMCAT_VERSION=8 以更新绿色环境。
  • 通过 tomcat-test-green 测试端点测试部署,以确保绿色环境已准备好为客户端流量提供服务。
  • 通过使用 TARGET_ROLE=green 更新服务配置,将前端服务路由切换到绿色环境。
  • 在公共端点上运行额外的测试以确保其正常工作。
  • 现在蓝色环境空闲,我们可以:
    • 将其保留在旧应用程序中,以便我们在新应用程序出现问题时回滚
    • 更新它以使其成为活动环境的热备份
    • 减少其副本数量以节省占用的资源

enter image description here

与 Rolling Update 相比,blue/green up* 公共服务要么路由到旧应用程序,要么路由到新应用程序,但不会同时路由。

  • 新 Pod 准备就绪所需的时间不会影响公共服务质量,因为只有在所有新 Pod 都经过测试准备就绪后,流量才会路由到新 Pod。
  • 我们可以在新环境服务于任何公共交通之前对其进行全面测试。请记住,这是在生产中,测试不应污染实时应用程序数据。

References

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。