Kubernetes 中实现应用灰度发布的方法

前言

在互联网业务快速发展的时代背景下,应用的迭代速度越来越快,一次全量发布会给用户带来较大的影响。因此,灰度发布成为了非常重要的一种发布方式。Kubernetes 是一款非常优秀的容器集群管理工具,通过它可以非常方便地实现应用灰度发布。本文将详细介绍 Kubernetes 中实现应用灰度发布的方法,包括概念解释、实现步骤和示例代码。

概念解释

灰度发布

灰度发布(Gray Release,也称作金丝雀发布)是指在发布新应用功能时,只将该应用的一部分流量引导到新版本,一旦新版本稳定可靠,再将全部流量引导到新版本中。这种方式可以最大限度减小新版本的风险,并避免全部用户因新版本出现的问题重复遭受困扰。

Service

Service 是 Kubernetes 中的服务,它将一组 Pod 封装起来,提供可访问的 IP 地址及端口号。在访问 Service 时,Kubernetes 会自动将请求均衡分发给 Service 后端的所有 Pod 上,并隐藏 Pod 的真正 IP 地址和端口号。

Ingress

Ingress 是 Kubernetes 中的路由控制器,它可以将外部请求转发到 Service 中的后端服务,并支持负载均衡、HTTPS 等功能。

实现步骤

要在 Kubernetes 中实现应用的灰度发布,需要完成以下几个步骤。

1. 准备新版本容器镜像

首先需要开发并提交新版本的应用代码,并将其构建成新的容器镜像,并上传到镜像仓库。

2. 部署新版本应用

创建新版本应用的 Deployment,使用新版本容器镜像,并指定 replicas 为 0,即不启动 Pod。

----------- -------
----- ----------
---------
  ----- ----------
  -------
    ---- ----------
-----
  --------- -
  ---------
    ------------
      ---- ----------
  ---------
    ---------
      -------
        ---- ----------
    -----
      -----------
        - ----- ----------
          ------ -------------------------------
          ------
            - -------------- --

3. 创建新版本 Service

创建新版本的 Service,指定 selector 为新版本应用的标签。

----------- --
----- -------
---------
  ----- ----------
-----
  ---------
    ---- ----------
  ------
    - ----- ----
      --------- ---
      ----- --
      ----------- --

4. 创建 Ingress

创建 Ingress,指定新版本 Service 的服务名称和路径,将请求转发到新版本应用中。

----------- --------------------
----- -------
---------
  ----- ------
  ------------
    ------------------------------------------- -
-----
  ------
    - ----- -----------
      -----
        ------
          - ----- ---
            --------- ------
            --------
              --------
                ----- ----------
                -----
                  ----- ----

5. 启动新版本应用

修改新版本应用的 Deployment,将 replicas 设置为需要的数量,启动新版本应用。

----------- -------
----- ----------
---------
  ----- ----------
-----
  --------- -
  ---------
    ------------
      ---- ----------
  ---------
    ---------
      -------
        ---- ----------
    -----
      -----------
        - ----- ----------
          ------ -------------------------------
          ------
            - -------------- --

6. 切换流量

在完成新版本应用的部署后,可以通过 Ingress 的 annotation 将流量逐渐切换到新版本应用中。例如,可以将流量逐渐从原版本的路径 /v1 切换到新版本的路径 /v2,直到全部流量都被切换到新版本。

----------- --------------------
----- -------
---------
  ----- ------
  ------------
    ------------------------------------------- -
    ----------------------------------- ------
    --------------------------------------------- -----
    --------------------------------------------- ---------
-----
  ------
    - ----- -----------
      -----
        ------
          - ----- ---
            --------- ------
            --------
              --------
                ----- ----------
                -----
                  ----- ----
            ------------
              ------------------------------------------ ----
          - ----- ---
            --------- ------
            --------
              --------
                ----- ----------
                -----
                  ----- ----
            ------------
              ------------------------------------------ ----

在上面的例子中,将流量的切换通过 Ingress 的 annotation 实现,设置 canary 为 true,指定根据 uid 头进行分流,权重为 9:1。

示例代码

完整示例代码可以在下面的链接中找到:

https://github.com/kubernetes-sigs/ingress-nginx/blob/master/docs/examples/canary.md

结论

在 Kubernetes 中,实现应用灰度发布非常简单,只需要通过 Deployment、Service 和 Ingress 就可以灵活地控制流量分发。在应用迭代速度越来越快的今天,应用灰度发布已经成为了非常重要的一种发布方式,能够最大限度地减少发布风险,保护用户利益。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/67374615317fbffedf0948fa