Kubernetes 蓝绿部署

3

Kubernetes蓝绿部署,我正在修补Kubernetes应用程序服务,将流量从app-v1重定向到app-v2(在负载均衡器后面)。如果在“修补”期间进行任何连接,是否会断开连接?如果没有!!我该如何测试这一点?

根据您的看法,从app-v1到app-v2进行版本部署的最佳方法是什么,可以实现温暖的交接(无连接丢失)?

2个回答

1
这个问题似乎是关于同时支持两个版本的问题。这有点类似于金丝雀部署,它使生产流量逐渐从app-v1转移到app-v2。
可以通过以下方式实现:
  • 允许部署具有基于连接数的自定义度量标准的HPA。也就是说,当达到一定数量的连接时,进行规模扩大/缩小。
  • 同时允许两个部署,app-v1app-v2
  • 通过某些Ingress注释允许新流量路由到新部署,但仍保留对旧版本的访问,以便不会断开任何现有的连接。
  • 现在,所有新请求都将路由到新版本。 HPA最终会从旧版本中缩小Pod。(甚至可以允许部署没有副本)。
针对您上面关于蓝绿部署的问题,蓝绿部署是指拥有两个完全相同的环境,其中一个环境处于活动状态,比如说当前生产环境正在使用蓝色环境。一旦你准备好一个新版本进行部署,比如说绿色环境,那么就可以分别进行部署和测试。最后,当你对绿色环境的测试结果感到满意时,就可以将流量切换到绿色环境,使得绿色变为活动状态,而蓝色则变为空闲或在稍后终止。(参考自Martin Fowler的文章)。
在Kubernetes中,这可以通过拥有两个相同的部署来实现。这里有一个很好的参考资料

基本上,您可以拥有两个完全相同的部署,假设您当前的部署 my-deployment-blue 在生产环境中。一旦您准备好新版本,您可以将其作为一个全新的部署进行部署,例如 my-deployment-green,并使用单独的测试服务来测试 green 环境。最后,在所有测试通过后将流量切换到 my-deployment-green


谢谢提供信息,如果在“打补丁”期间有任何连接正在进行中,它们会被断开吗? - me25
在蓝绿部署中,一旦我们确认测试结果正常,流量就会完全切换到“绿色”环境。另一种方法是使用金丝雀部署,只有部分流量会切换到新版本。https://codefresh.io/kubernetes-tutorial/fully-automated-canary-deployments-kubernetes/ - wpnpeiris
@me25,是的,一旦负载均衡器切换到新的部署,现有的连接应该会被断开。 - wpnpeiris
@me25,我有一个想法,可以通过HPA实现,基于自定义指标,使旧版本的Pod最终被删除。请查看更新后的答案。 - wpnpeiris

0
如果您正在尝试在Kubernetes中实现Blue/Green部署,那么我的回答可能会对您有所帮助。
通过设置以下配置进行滚动更新:
  1. maxUnavailable = 0
  2. maxSurge = 100%
怎么做呢? 部署控制器首先将最新版本扩展到过时版本的100%。一旦最新版本健康运行,它立即将过时版本缩减为0%。
示例代码:
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
        image: nginx:1.14.2
        ports:
          - containerPort: 80
  strategy:
    rollingUpdate:
      maxSurge: 100%
      maxUnavailable: 0
      type: RollingUpdate

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接