kubernetes蓝绿色部署

时间:2020-03-02 09:06:32

标签: kubernetes

Kubernetes蓝绿色部署,我正在修补Kubernetes-application-service,以将流量从app-v1重定向到app-v2(在负载均衡器后面)。如果在“修补”期间正在进行任何连接,将断开连接吗?如果不 !!我该如何测试?

从app-v1到app-v2进行热切换(没有任何连接丢失)的情况下,您进行版本部署的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

问题似乎与同时支持两个版本有关。这就是Canary deployment,它使生产流量逐渐从app-v1转移到app-v2。

这可以通过以下方式实现:

  • 允许部署使HPA具有基于连接数的自定义指标。也就是说,当达到一定数量的连接时,将按比例放大/缩小。
  • 同时允许两个部署app-v1app-v2
  • 允许新流量通过某些Ingress注释路由到新部署上,但仍保持对旧版本的访问权限,因此不会删除现有连接。
  • 现在,所有新请求都将路由到新版本。 HPA最终将旧版本的Pod缩小了。 (您甚至可以允许部署具有零个副本)。

除了您的问题之外,还有蓝绿色部署。 蓝绿色部署是关于具有两个相同的环境,其中一个环境同时处于活动状态,假设blue现在在生产中处于活动状态。准备好要部署的新版本后,green就将分别进行部署和测试。最后,当您对绿色环境下的测试结果感到满意时,便将流量切换到绿色环境。因此green处于活动状态,而blue处于空闲状态或稍后终止。 (引自马丁·福勒article)。

在Kubernetes中,可以通过具有两个相同的部署来实现。这是一个不错的reference

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

答案 1 :(得分:0)

如果您尝试在Kubernetes中实现“蓝色/绿色”,那么我的回答可能会对您有所帮助。

通过设置以下配置进行滚动更新

  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