跳至内容

流量分割

流量分割对 蓝绿部署金丝雀部署 很有效。

一个 修订版 是应用程序代码和配置的快照。每次您更改 Knative 服务的配置时,都会创建一个新的修订版。在分割流量时,Knative 会在 Knative 服务的不同修订版之间分割流量。

创建新的修订版

将您的 Knative 服务上的环境变量 TARGET 更新为问候“Knative”,而不是 TARGET=World

通过运行以下命令来部署更新后的 Knative 服务版本

kn service update hello \
--env TARGET=Knative

与之前一样,kn 会在 CLI 中打印一些有用的信息。

预期输出

Service 'hello' created to latest revision 'hello-00002' is available at URL:
http://hello.default.${LOADBALANCER_IP}.sslip.io
  1. 编辑您现有的 hello.yaml 文件,使其包含以下内容
    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: hello
    spec:
      template:
        spec:
          containers:
            - image: ghcr.io/knative/helloworld-go:latest
              ports:
                - containerPort: 8080
              env:
                - name: TARGET
                  value: "Knative"
    
  2. 通过运行以下命令来部署更新后的 Knative 服务版本

    kubectl apply -f hello.yaml
    

    预期输出

    service.serving.knative.dev/hello configured
    

因为您正在更新现有的 Knative 服务,所以 URL 不会改变,但新的修订版将拥有新的名称 hello-00002

访问新的修订版

要查看更改,请再次访问浏览器上的 Knative 服务,或者在终端中使用 curl

echo "Accessing URL $(kn service describe hello -o url)"
curl "$(kn service describe hello -o url)"

预期输出

Hello Knative!

查看现有修订版

您可以使用 Knative (kn) 或 kubectl CLI 查看现有修订版的列表

通过运行以下命令查看修订版列表

kn revisions list

预期输出

NAME            SERVICE   TRAFFIC   TAGS   GENERATION   AGE   CONDITIONS   READY   REASON
hello-00002     hello     100%             2            30s   3 OK / 4     True
hello-00001     hello                      1            5m    3 OK / 4     True

通过运行以下命令查看修订版列表

kubectl get revisions

预期输出

NAME          CONFIG NAME   K8S SERVICE NAME   GENERATION   READY   REASON   ACTUAL REPLICAS   DESIRED REPLICAS
hello-00001   hello                            1            True             0                 0
hello-00002   hello                            2            True             0                 0

运行 kn 命令时,相关的列是 TRAFFIC。您可以看到 100% 的流量都流向了最新的修订版 hello-00002,它位于 GENERATION 最高的行。0% 的流量流向了修订版 hello-00001

当您创建 Knative 服务的新修订版时,Knative 默认将 100% 的流量定向到此最新的修订版。您可以通过指定每个修订版想要接收的流量来更改此默认行为。

在修订版之间分割流量

在两个修订版之间分割流量

运行以下命令

kn service update hello \
--traffic hello-00001=50 \
--traffic @latest=50

  1. traffic 部分添加到您现有的 hello.yaml 文件的底部
    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: hello
    spec:
      template:
        spec:
          containers:
            - image: ghcr.io/knative/helloworld-go:latest
              ports:
                - containerPort: 8080
              env:
                - name: TARGET
                  value: "Knative"
      traffic:
      - latestRevision: true
        percent: 50
      - latestRevision: false
        percent: 50
        revisionName: hello-00001
    
  2. 通过运行以下命令应用 YAML
    kubectl apply -f hello.yaml
    

信息

@latest 始终指向“最新”修订版,在本例中为 hello-00002

验证流量分割

要验证流量分割是否已正确配置,请再次通过运行以下命令列出修订版

kn revisions list

预期输出

NAME            SERVICE   TRAFFIC   TAGS   GENERATION   AGE   CONDITIONS   READY   REASON
hello-00002     hello     50%              2            10m   3 OK / 4     True
hello-00001     hello     50%              1            36m   3 OK / 4     True

在浏览器中多次访问您的 Knative 服务,以查看每个修订版提供的不同输出。

类似地,您可以在终端中多次访问服务 URL,以查看流量在修订版之间的分割情况。

echo "Accessing URL $(kn service describe hello -o url)"
curl "$(kn service describe hello -o url)"

预期输出

Hello Knative!
Hello World!
Hello Knative!
Hello World!

我们使用分析和 Cookie 来了解网站流量。有关您使用我们网站的信息将为此目的与 Google 共享。 了解更多。