toolkit-maven-plugin は、Enterprise Distributed Application Service (EDAS) にデプロイされた Spring Cloud、Dubbo、および High-speed Service Framework (HSF) アプリケーションのカナリアリリースを自動化します。カナリアリリースでは、すべてのインスタンスを一度に更新するのではなく、まずインスタンスの小さなサブセットに変更をロールアウトし、その後、残りのインスタンスにバッチで段階的に更新を適用します。
カナリアリリースの仕組み
toolkit-maven-plugin を使用したカナリアリリースは、2 つのフェーズのプロセスに従います。
カナリアフェーズ: 新しいバージョンを、指定された数のインスタンス (
gray) にデプロイします。これらのインスタンスはライブトラフィックを受信するため、完全なロールアウトの前に新しいバージョンを検証できます。バッチロールアウトフェーズ: 新しいバージョンを、制御されたバッチ (
batch) で残りのインスタンスにロールアウトします。各バッチ間には設定可能な間隔 (batchWaitTime) があります。バッチは自動で実行することも、手動での承認を必要とすることもできます。
このプロセスの EDAS 更新ストラテジータイプは GrayBatchUpdate です。
前提条件
開始する前に、以下が準備できていることを確認してください。
EDAS Kubernetes クラスターにデプロイされた Spring Cloud、Dubbo、または HSF アプリケーション
Resource Access Management (RAM) ユーザーの AccessKey ID と AccessKey Secret (ルートアカウントの認証情報よりも推奨)
アプリケーション ID (
appId)、または対象アプリケーションの microservices namespace ID (namespaceId) とアプリケーション名 (appName) の両方
カナリアリリースの設定
カナリアリリースを設定するには、プラグインの依存関係を追加し、設定ファイルを作成し、デプロイメントコマンドを実行します。
ステップ 1: プラグインの依存関係の追加
次の依存関係を pom.xml に追加します。
<build>
<plugins>
<plugin>
<groupId>com.alibaba.cloud</groupId>
<artifactId>toolkit-maven-plugin</artifactId>
<version>1.1.9</version>
</plugin>
</plugins>
</build>常に最新バージョンの toolkit-maven-plugin を使用してください。
ステップ 2: 設定ファイルの作成
パッケージ化されたプロジェクトのルートディレクトリに 3 つの YAML ファイルを作成します。Maven サブモジュールをデプロイする場合は、代わりにサブモジュールディレクトリにパッケージ設定ファイルを作成します。
アカウント設定 (toolkit_profile.yaml)
regionId: # アプリケーションがデプロイされているリージョン (例: cn-hangzhou)
accessKeyId: # RAM ユーザーの AccessKey ID
accessKeySecret: # RAM ユーザーの AccessKey Secret
jarPath: # (任意) デプロイメントパッケージへのパス。指定した場合、Maven のパッケージングはスキップされます。パッケージ設定 (toolkit_package.yaml)
apiVersion: V1
kind: AppPackage
spec:
packageType: # War、FatJar、Image、または url
packageUrl: # (任意) リモートデプロイメントパッケージの URL。packageType が url の場合に使用されます。
imageUrl: # (任意) イメージ URL。packageType が Image の場合に使用されます。デプロイメント設定 (toolkit_deploy.yaml)
apiVersion: V1
kind: AppDeployment
spec:
type: kubernetes
target:
appId: # アプリケーション ID。指定した場合、namespaceId と appName は不要です。
namespaceId: # microservices namespace ID。appId が指定されていない場合に必須です。
appName: # アプリケーション名。appId が指定されていない場合に必須です。
updateStrategy:
type: GrayBatchUpdate
grayUpdate:
gray: 2 # カナリアフェーズで更新するインスタンス数
batchUpdate:
batch: 3 # 残りのインスタンスのバッチ数
releaseType: auto # auto または manual
batchWaitTime: 5 # バッチ間の待機時間 (分)次の表に、カナリアリリースのパラメーターを示します。
| パラメーター | 説明 | 例 |
|---|---|---|
appId | EDAS アプリケーション ID | 6bbc57a2-a2a0-4edb-****-************ |
namespaceId | microservices namespace ID | cn-hangzhou:my-namespace |
gray | カナリアインスタンスの数 | 2 |
batch | ロールアウトバッチの数 | 3 |
releaseType | auto (自動) または manual (承認が必要) | auto |
batchWaitTime | バッチ間隔(分) | 5 |
ステップ 3: デプロイメントコマンドの実行
pom.xml (またはサブモジュールの pom.xml) を含むディレクトリに移動し、次を実行します。
mvn clean package toolkit:deploy \
-Dtoolkit_profile=toolkit_profile.yaml \
-Dtoolkit_package=toolkit_package.yaml \
-Dtoolkit_deploy=toolkit_deploy.yamlデプロイメントが成功すると、出力に BUILD SUCCESS と表示されます。
コマンドパラメーター:
| パラメーター | 説明 |
|---|---|
toolkit:deploy | Maven のパッケージング完了後にアプリケーションをデプロイします。 |
-Dtoolkit_profile | アカウント設定ファイルへのパス。 |
-Dtoolkit_package | パッケージ設定ファイルへのパス。 |
-Dtoolkit_deploy | デプロイメント設定ファイルへのパス。 |
-Ddeploy_version | (任意) デプロイメントバージョン。toolkit_deploy.yaml 内のバージョンを上書きします。toolkit-maven-plugin 1.0.6 以降が必要です。 |
-Dtoolkit_profile、-Dtoolkit_package、および -Dtoolkit_deploy パラメーターを省略するには、設定ファイルを pom.xml と同じディレクトリに配置し、各ファイル名の先頭にドットを付けます (.toolkit_profile.yaml、.toolkit_package.yaml、.toolkit_deploy.yaml)。プラグインはこれらを自動的に検出します。
デプロイメントシナリオ
ローカルの WAR または FatJar パッケージを使用したデプロイ
WAR または FatJar パッケージをローカルでビルドし、既存の EDAS アプリケーションにデプロイします。
toolkit_package.yaml:
apiVersion: V1
kind: AppPackage
spec:
packageType: War # または FatJartoolkit_deploy.yaml:
apiVersion: V1
kind: AppDeployment
spec:
type: kubernetes
target:
appId: # アプリケーション ID
namespaceId: # (任意) namespace ID。appId が指定されていない場合に必須
appName: # (任意) アプリケーション名。appId が指定されていない場合に必須既存のイメージ URL を使用したデプロイ
レジストリに既に存在するコンテナイメージを使用してアプリケーションをデプロイします。
toolkit_package.yaml:
apiVersion: V1
kind: AppPackage
spec:
packageType: Image
imageUrl: registry.cn-beijing.aliyuncs.com/test/gateway:latesttoolkit_deploy.yaml:
apiVersion: V1
kind: AppDeployment
spec:
type: kubernetes
target:
appId: # アプリケーション ID
namespaceId: # (任意) namespace ID。appId が指定されていない場合に必須
appName: # (任意) アプリケーション名。appId が指定されていない場合に必須ローカル Docker イメージのビルドとプッシュ
Docker イメージをローカルでビルドし、Alibaba Cloud コンテナイメージリポジトリにプッシュしてデプロイします。
toolkit_package.yaml:
apiVersion: V1
kind: AppPackage
spec:
packageType: Image
build:
docker:
dockerfile: Dockerfile
imageRepoAddress: # イメージリポジトリのアドレス
imageTag: # イメージタグ
imageRepoUser: # リポジトリのユーザー名
imageRepoPassword: # リポジトリのパスワードtoolkit_deploy.yaml:
apiVersion: V1
kind: AppDeployment
spec:
type: kubernetes
target:
appId: # アプリケーション ID
namespaceId: # (任意) namespace ID。appId が指定されていない場合に必須
appName: # (任意) アプリケーション名。appId が指定されていない場合に必須設定リファレンス
パッケージパラメーター
apiVersion: V1
kind: AppPackage
spec:
packageType: # War、FatJar、Image、または url
imageUrl: # イメージ URL。イメージを使用してデプロイする場合に必須。
packageUrl: # パッケージ URL。packageType が url の場合に使用されます。
build:
docker:
dockerfile: # Dockerfile のパス。ローカルイメージのビルドに必須。
imageRepoAddress: # Alibaba Cloud イメージリポジトリのアドレス
imageTag: # イメージタグ
imageRepoUser: # リポジトリのユーザー名
imageRepoPassword: # リポジトリのパスワード
oss:
bucket: # Object Storage Service (OSS) のバケット名
key: # OSS オブジェクトパス
accessKeyId: # OSS アクセス用の AccessKey ID
accessKeySecret: # OSS アクセス用の AccessKey Secret