流量分割¶
修訂版本是應用程式程式碼和組態的即時快照。每次您變更 Knative 服務的組態時,都會建立新的修訂版本。分割流量時,Knative 會在 Knative 服務的不同修訂版本之間分割流量。
建立新的修訂版本¶
不要使用 TARGET=World
,而是更新 Knative 服務上的環境變數 TARGET
,以問候「Knative」。
執行命令以部署 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!