トラフィック分割¶
トラフィック分割は、ブルー/グリーンデプロイメントやカナリアデプロイメントに役立ちます。
リビジョンは、アプリケーションコードと構成の特定の時点のスナップショットです。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
が最も高い行にあります。リビジョンhello-00001
には、トラフィックの0%が送られています。
Knativeサービスの新しいリビジョンを作成すると、Knativeはデフォルトでトラフィックの100%をこの最新リビジョンに送るように設定されます。各リビジョンが受信するトラフィック量を指定することで、このデフォルトの動作を変更できます。
リビジョン間のトラフィック分割¶
2つのリビジョン間でトラフィックを分割します。
次のコマンドを実行します。
kn service update hello \
--traffic hello-00001=50 \
--traffic @latest=50
- 既存の
hello.yaml
ファイルの末尾にtraffic
セクションを追加します。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!