跳至內容

流量分割

流量分割適用於 藍/綠部署金絲雀部署

修訂版本是應用程式程式碼和組態的即時快照。每次您變更 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
  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 分享。了解更多資訊。