このトピックでは、Java アプリケーションを使用してマイクロサービスガバナンスのコア機能を開始する方法について説明します。
前提条件
Container Service for Kubernetes (ACK) マネージドクラスターが作成されていること。詳細については、「ACK マネージドクラスターを作成する」をご参照ください。
説明Kubernetes クラスターに必要な最小構成は、CPU 12 コア、メモリ 24 GiB です。
インターネット経由で Kubernetes クラスターにアクセスできる必要があります。これにより、GitHub からデモをダウンロードできます。
エラスティック IP アドレス (EIP) を使用して、CloudShell にアクセスするための API サーバーを公開します。
ACK クラスタ内のアプリケーションに対して MSE のマイクロサービスガバナンスが有効になっていること。詳細については、「ACK または ACS クラスタ内の Java マイクロサービスアプリケーションに対してマイクロサービスガバナンスを有効にする」をご参照ください。
ack-kubernetes-cronhpa-controller コンポーネントが ACK クラスタにインストールされていること。詳細については、「コンポーネント」をご参照ください。
デモをデプロイする
デモの概要
このデモでは、レジストリとして Nacos インスタンスを使用し、Spring Cloud ゲートウェイと Zuul ゲートウェイを備えています。ビジネス要件に基づいて 2 つのゲートウェイを有効にすることができます。デモのデフォルトのアプリケーション呼び出しワークフローは A -> B -> C で、アプリケーション A とアプリケーション C にはそれぞれのカナリアバージョンがあります。コードリポジトリからアプリケーションコードを取得できます。
アプリケーション名 | サービスフレームワークバージョン | 関連コンポーネント | デモ構成 |
Zuul | Spring Cloud Greenwich | zuul | |
SpringCloudGateway | spring-cloud-starter-gateway 4.1.2 | spring-cloud-starter-gateway | |
A | Spring Cloud 2023.0.1 Dubbo 3.3.0 | openfeign/httpclient/rocketmq/nacos/loadbalancer | |
B | Spring Cloud 2023.0.1 Dubbo 3.3.0 | httpclient/mybatis/druid/nacos | |
C | Spring Cloud 2023.0.1 Dubbo 3.3.0 | openfeign/httpclient/nacos |
Helm パッケージをダウンロードする
リンクからデモの Helm パッケージをダウンロードします。Helm パッケージとイメージは GitHub で定期的に更新されます。
デプロイ方法
ACK クラスタの CloudShell を使用して mse-simple-demo をデプロイする
mse-simple-demo ファイルをパッケージ化します。
ACK コンソールにログインします。 クラスタの名前をクリックします。表示されるページで、[cloudshell を使用してクラスタを管理] をクリックします。
Helm パッケージをアップロードします。
unzip mse-simple-demo.zip
コマンドを実行して、デモパッケージを解凍します。kubectl create namespace mse-demo
コマンドを実行して、--namespace パラメータに対応する名前空間を作成します。
Helm を使用して mse-simple-demo をデプロイする
次の Helm コマンドを実行して、mse-simple-demo をデプロイします。
helm upgrade mse-simple-demo mse-simple-demo \
--set mse.namespace=mse-demo \
--set gateway.springcloud=true \
--install \
--namespace mse-demo \
--values mse-simple-demo/values.yaml
次のパラメータを変更できます。
namespace
: mse-simple-demo が属する Kubernetes 名前空間。このパラメータはオプションです。ほとんどの場合、default という名前のネームスペースが使用されます。registry
: コンテナイメージアドレスのプレフィックス。クラスタがデモイメージをプルできない場合は、デモイメージをアカウントのイメージリポジトリに同期し、このアドレスを変更できます。images.version
: イメージのバージョン。最新バージョンは 3.1.0 です。mse.namespace
: MSE マイクロサービスガバナンスに接続されているマイクロサービス名前空間。このパラメータを使用して、異なる環境を区別できます。デフォルト値: mse-demo。nacos.host
: Nacos レジストリのアドレス。デモは自動的に Nacos サーバーを起動します。デモアプリケーションを別の Nacos サーバーに登録する場合は、このパラメータを構成する必要があります。autoscaling
: 自動スケーリングを有効にするかどうかを指定します。デフォルト値: false。自動スケーリングを有効にする前に、kubernetes-cronhpa-controller コンポーネントがクラスタにインストールされていることを確認してください。resources.enable
: リソースのリクエストを構成するかどうかを指定します。デフォルト値: true。
基本機能を確認する
エンドツーエンドカナリアリリース
MSE コンソール にログインします。左側のナビゲーションペインで、[マイクロサービスガバナンス] > [フルリンクグレースケール] を選択します。
レーングループを作成する
[フルリンクグレースケール] ページで、次の手順を実行します。
[レーングループとレーンを作成] をクリックします。選択したマイクロサービス名前空間にレーングループが使用可能な場合は、[+ レーングループを作成] をクリックします。
[レーングループを作成] パネルで、パラメータを構成し、[OK] をクリックします。
レーンを作成する
[フルリンクグレースケール] ページの下部で、次の手順を実行します。
[最初の分割レーンを作成] をクリックします。選択したマイクロサービス名前空間にレーングループが使用可能な場合は、[レーンを作成] をクリックします。
[レーンを作成] パネルで、レーン関連のパラメータを構成し、[OK] をクリックします。
共通リクエストをベースバージョンにルーティングする
Web ページの IP アドレスは、ゲートウェイにバインドされている Server Load Balancer (SLB) インスタンスの IP アドレスです。 [ACK コンソール] のクラスタ詳細ページで、[ワークロード] > [デプロイメント] を選択します。[デプロイメント] ページで、spring-cloud-gateway をクリックします。表示されるページで、[アクセス方法] をクリックします。[サービス情報] のアクセス方法で、[外部エンドポイント] 列の IP アドレスとポート番号を確認できます。
ブラウザを使用してゲートウェイの SLB アドレスにアクセスし、次のリクエストを開始します。
カナリアリクエストをカナリアバージョンにルーティングする
詳細については、「セルフマネージド Spring Cloud または Zuul ゲートウェイに基づいてエンドツーエンドカナリアリリースを実装する」をご参照ください。
グレースフルスタートとシャットダウン
MSE コンソールにログインします。左側のナビゲーションウィンドウで、[マイクロサービスガバナンス] > [アプリケーションガバナンス] を選択します。[アプリケーションリスト] ページで、目的のアプリケーションの名前をクリックして、[アプリケーションの概要] ページに移動します。
グレースフルスタートとシャットダウンを構成する
[アプリケーションの概要] ページで、左側のナビゲーションウィンドウの [トラフィック管理] をクリックします。デフォルトでは、システムはいくつかのグレースフルスタートとシャットダウン機能を提供します。グレースフルスタートとシャットダウンの全機能を活用するには、コンソールでグレースフルスタートとシャットダウンの設定を有効にして構成できます。
イベントとプロセスを表示する
詳細については、「グレースフルスタートとシャットダウン」をご参照ください。
スロットリングルール
エントリ: MSE コンソールにログインします。左側のナビゲーションウィンドウで、[マイクロサービスガバナンス] > [アプリケーションガバナンス] を選択します。[アプリケーションリスト] ページで、目的のアプリケーションのカードをクリックして、[アプリケーションの概要] ページに移動します。
スロットリングルールを追加する
[アプリケーションの概要] ページで、左側のナビゲーションウィンドウの [トラフィック管理] をクリックします。[トラフィック管理] ページで、[フロー保護] タブをクリックします。[フロー保護] タブで、[インターフェースフロー制御] サブタブをクリックし、[スロットリングルールを追加] をクリックします。
スロットリング効果を表示する
ブラウザを使用してゲートウェイの SLB アドレスにアクセスし、次のリクエストを開始します。
アプリケーション A には 1 つのノードがあります。単一マシンのスロットリングしきい値は 5 に設定されており、クエリ/秒 (QPS) 値は 5 に維持されます。
詳細については、「概要」をご参照ください。
サンプルリクエスト
localhost フィールドの値を、ゲートウェイにバインドされている SLB インスタンスの IP アドレスに変更する必要があります。その後、ゲートウェイのポッドを使用してリクエストを開始できます。
# 共通リクエスト
http://localhost:20000/A/a
A[10.0.0.47][config=base] -> B[10.0.0.39] -> C[10.0.0.48]
# カナリアリクエスト
http://localhost:20000/A/a?name=xiaoming
Agray[10.0.0.41][config=base] -> B[10.0.0.55] -> Cgray[10.0.0.30]
# 共通リクエスト (Feign)
http://localhost:20000/A/aByFeign
A[10.0.0.47][config=base] -> B[10.0.0.55]
# 共通リクエスト (アプリケーション A がアプリケーション B とアプリケーション C に個別にリクエストを開始します。)
http://localhost:20000/A/a2bc
A[10.0.0.47][config=base] -> C[10.0.0.48]
A[10.0.0.47][config=base] -> B[10.0.0.55] -> C[10.0.0.49]
# Dubbo リクエスト
http://localhost:20000/A/dubbo
A[10.0.0.44] -> B[10.0.0.39]name:A -> C[10.0.0.49] params:A
# カナリア Dubbo リクエスト
http://localhost:20000/A/dubbo?name=xiaoming
Agray[10.0.0.41] -> B[10.0.0.39]name:A -> Cgray[10.0.0.30] params:A
# スロットリングテストのリクエスト
http://localhost:20000/A/flow
A[10.0.0.17][config=base] -> B[10.0.0.39] sleepTime:9 -> C[10.0.0.48] sleepTime:8 code:200
http://localhost:20000/A/dubbo-flow
A[10.0.0.17] -> B[10.0.0.55]name:A -> C[10.0.0.48] params:A
http://localhost:20000/A/isolate
A[10.0.0.42][config=base] -> B[10.0.0.55] sleepTime:504 -> C[10.0.0.48] sleepTime:8 code:200
http://localhost:20000/A/dubbo-isolate
A[10.0.0.17] -> B[10.0.0.55]name:isolate -> C[10.0.0.49] params:isolate
http://localhost:20000/A/params/hot
A[10.0.0.17][config=base] params:hot -> B[10.0.0.55] sleepTime:5 params:hot -> C[10.0.0.49] sleepTime:6 params:hot code:200
http://localhost:20000/A/dubbo-params/hot
A[10.0.0.17] params:hot -> B[10.0.0.55]name:hot -> C[10.0.0.49] params:hot
# データベースリクエスト
http://localhost:20000/A/sql?command=query&id=1
A[10.0.0.44][config=base] -> B[10.0.0.39] result:{"age":1,"email":"emailUpdate%40demo.com","id":1,"name":"name1Update"}
http://localhost:20000/A/sql?command=update&name=name1Update&email=emailUpd***@demo.com&age=1&id=1
A[10.0.0.44][config=base] -> B[10.0.0.55] result:true
# Spring Boot リクエスト
http://localhost:20000/spring_boot
追加情報
アプリケーション統合
現在の方法は、マイクロサービスガバナンスを有効にする必要がある各アプリケーションのデプロイメントのラベルに msePilotAutoEnable: "on"
を明示的に追加することです。実際のユースケースでは、O&M センターページで、Kubernetes クラスタの名前空間内のアプリケーションに対してマイクロサービスガバナンスを一度に有効にすることができます。
詳細については、「ACK または ACS クラスタ内の Java マイクロサービスアプリケーションに対してマイクロサービスガバナンスを有効にする」をご参照ください。
グレースフルスタートとシャットダウン
アプリケーションのデプロイ時にグレースフルスタートとシャットダウンを有効にしなかったが、後続のプロセスでグレースフルスタートとシャットダウン機能を使用し、その効果を確認したい場合は、このセクションで説明する手順を実行できます。
グレースフルスタートとシャットダウン機能を使用するには、ACK コンソールにログインします。[クラスタ情報] ページで、左側のナビゲーションウィンドウの [操作] > [アドオン] を選択し、検索ボックスに
cronhpa
を入力して、コンポーネントカードの [インストール] をクリックします。次の YAML コードを使用して、自動スケーリングタスクを作成します。namespace フィールドは、Helm パッケージをインストールするときに選択した Kubernetes 名前空間と同じである必要があります。
apiVersion: autoscaling.alibabacloud.com/v1beta1
kind: CronHorizontalPodAutoscaler
metadata:
labels:
controller-tools.k8s.io: "1.0"
name: cronhpa-deployment-spring-cloud-b
namespace: mse-demo # namespace フィールドは、Helm パッケージをインストールするときに選択した Kubernetes 名前空間と同じである必要があります。
spec:
jobs:
- name: scale-out
schedule: 0 0/6 * * * *
targetSize: 6
- name: scale-in
schedule: 0 5/6 * * * *
targetSize: 2
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: spring-cloud-b
ゲートウェイによる自動リクエスト開始の構成
デフォルトでは、すべてのリクエストの自動送信が有効になっています。ACK コンソールにログインし、[クラスタ情報] ページに移動します。左側のナビゲーションウィンドウで、[ワークロード] > [デプロイメント] を選択します。[デプロイメント] ページで、spring-cloud-gateway アプリケーションをクリックします。アプリケーション詳細ページで、右上隅にある [編集] をクリックし、さまざまなリクエストの自動開始のための環境変数を構成します。
環境変数キー | 説明 | デフォルト値 |
enable.auto | ゲートウェイのリクエストの自動開始を有効にするかどうかを指定します。 | true |
enable.rpc.invoke | Dubbo リクエストの自動開始を有効にするかどうかを指定します。 | true |
enable.sql | データベースリクエストの自動開始を有効にするかどうかを指定します。 | true |
enable.sentinel.demo.flow | Sentinel ルール関連のリクエストの自動開始を有効にするかどうかを指定します。
| true |
enable.gray | タグベースのカナリアリリースに関連するリクエストの自動開始を有効にするかどうかを指定します。 | false |
demo.qps | リクエスト QPS。このパラメータは、/a パスのリクエスト QPS を制御します。/a パスのリクエスト QPS が変更されると、他のパスのリクエスト QPS もそれに応じて調整されます。 | 20 |