流量分割¶
一个 修订版 是应用程序代码和配置的快照。每次您更改 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
- 编辑您现有的
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"
-
通过运行以下命令来部署更新后的 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
- 将
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
- 通过运行以下命令应用 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!