すべてのプロダクト
Search
ドキュメントセンター

Enterprise Distributed Application Service:toolkit-maven-plugin を使用して Kubernetes クラスタ内のアプリケーションで段階的リリースを実装する

最終更新日:Jan 07, 2025

このトピックでは、toolkit-maven-plugin プラグインを使用して、Enterprise Distributed Application Service (EDAS) にデプロイされている Spring Cloud、Dubbo、または High-speed Service Framework (HSF) アプリケーションの段階的リリースを実装する方法について説明します。

自動デプロイ

toolkit-maven-plugin を使用してアプリケーションのデプロイを自動化するには、プラグインの依存関係を追加し、プラグインを構成し、デプロイジョブをビルドします。

  1. プラグイン依存関係を追加します。

    pom.xml ファイルに次のプラグイン依存関係を追加します。

    <build>
        <plugins>
            <plugin>
                <groupId>com.alibaba.cloud</groupId&gt
    説明 最新の toolkit-maven-plugin バージョンを使用することをお勧めします。
  2. プラグインを構成します。

    プラグインの構成には、アカウント構成、パッケージ構成、およびデプロイ構成が含まれます。より詳細なカスタム構成項目については、パッケージパラメータを指定する および デプロイパラメータを指定する をご参照ください。

    1. アカウント構成を完了します。

      パッケージ化されたプロジェクトのルートディレクトリに、YAML 形式のアカウント構成ファイルを作成します。ファイル名を toolkit_profile.yaml にし、以下の情報をファイルに追加します。

      regionId:        # アプリケーションがデプロイされるリージョン。たとえば、値 cn-beijing は中国 (北京) リージョン、値 cn-shanghai は中国 (上海) リージョン、値 cn-hangzhou は中国 (杭州) リージョンを示します。
      jarPath:         # デプロイパッケージのパス。このパラメータを指定する場合、Maven でアプリケーションファイルをパッケージ化する必要はありません。指定されたパスにあるパッケージを使用してアプリケーションがデプロイされます。絶対パスまたは相対パスを指定できます。
      accessKeyId:     # Alibaba Cloud リソースへのアクセスに使用する AccessKey ID。セキュリティリスクを軽減するために、Resource Access Management (RAM) ユーザーの AccessKey ID を使用することをお勧めします。
      accessKeySecret: # Alibaba Cloud リソースへのアクセスに使用する AccessKey シークレット。セキュリティリスクを軽減するために、RAM ユーザーの AccessKey シークレットを使用することをお勧めします。
    2. パッケージ構成を完了します。

      パッケージ化されたプロジェクトのルートディレクトリに、YAML 形式のパッケージ構成ファイルを作成します。パッケージ化されたプロジェクトが Maven サブモジュール用に作成されている場合は、サブモジュールのディレクトリにファイルを作成します。ファイル名を toolkit_package.yaml にし、以下の情報をファイルに追加します。

      apiVersion: V1
      kind: AppPackage
      spec:
       packageType: # アプリケーションデプロイパッケージのタイプ。有効な値は、War、FatJar、Image、および url です。
       packageUrl:  # パッケージの URL。 packageType パラメータを url に設定した場合、このパラメータをアプリケーションのデプロイに使用するパッケージのアドレスに設定できます。このパラメータを空のままにすると、現在の Maven ビルドパッケージを使用してアプリケーションがデプロイされます。
       imageUrl:    # イメージの URL。このパラメータは、packageType パラメータを Image に設定した場合にのみ有効になります。オンプレミス環境で Docker イメージをビルドしてアプリケーションをデプロイすることもできます。
    3. デプロイ構成を完了します。

      パッケージ化されたプロジェクトのルートディレクトリに、YAML 形式のデプロイファイルを作成します。ファイル名を toolkit_deploy.yaml にし、以下の情報をファイルに追加します。

      apiVersion: V1
      kind: AppDeployment
      spec:
        type: kubernetes
        target:
          appId:        # デプロイするアプリケーションの ID。 appId パラメータを指定する場合、namespaceId パラメータと appName パラメータを指定する必要はありません。
          namespaceId:  # アプリケーションをデプロイするマイクロサービス名前空間の ID。 appId の値が使用できない場合、namespaceId と appName の値を使用して、デプロイするアプリケーションを識別できます。
          appName:      # アプリケーションの名前。 appId の値が使用できない場合、namespaceId と appName の値を使用して、デプロイするアプリケーションを識別できます。
        updateStrategy:
          type: GrayBatchUpdate    # 段階的リリースモード。
          grayUpdate:              # 段階的リリース設定。
            gray: x                 # 段階的リリースを適用するインスタンスの数を指定する整数値。
          batchUpdate:             # 段階的リリースのバッチの設定。
            batch: x                # バッチの数を指定する整数値。
            releaseType: xxx        # リリースタイプ。値 auto は自動リリースを示します。値 manual は手動リリースを示します。
            batchWaitTime: x        # 2 つの連続したバッチの間隔を指定する整数値。単位:分。
  3. デプロイジョブをビルドします。
    pom.xml があるディレクトリに移動します。Maven サブモジュールをデプロイする場合は、サブモジュールの pom.xml ファイルがあるディレクトリに移動します。次に、次のコマンドを実行します。
    mvn clean package toolkit:deploy -Dtoolkit_profile=toolkit_profile.yaml -Dtoolkit
    • toolkit:deploy: パッケージ操作の完了後にアプリケーションをデプロイするようにシステムに指示します。
    • -Dtoolkit_profile: アカウント構成ファイルを指定します。pom.xml と同じディレクトリにアカウント構成ファイルがあり、ファイル名が .toolkit_profile.yaml の場合、このパラメーターは不要です。この場合、アカウント構成ファイルはプラグインによって自動的に取得されます。ファイル名の先頭にピリオド (.) が含まれていることに注意してください。
    • -Dtoolkit_package: パッケージファイルを指定します。pom.xml と同じディレクトリにパッケージファイルがあり、ファイル名が .toolkit_package.yaml の場合、このパラメーターは不要です。この場合、パッケージファイルはプラグインによって自動的に取得されます。ファイル名の先頭にピリオド (.) が含まれていることに注意してください。
    • -Dtoolkit_deploy: デプロイファイルを指定します。pom.xml と同じディレクトリにデプロイファイルがあり、ファイル名が .toolkit_deploy.yaml の場合、このパラメーターは不要です。この場合、デプロイファイルはプラグインによって自動的に取得されます。ファイル名の先頭にピリオド (.) が含まれていることに注意してください。
    • -Ddeploy_version: デプロイするバージョンを指定します。指定されたバージョンは、デプロイ構成ファイルで構成されているバージョンよりも優先されます。
      説明 toolkit-maven-plugin 1.0.6 以降では、このパラメーターがサポートされています。
    パッケージングコマンドを実行すると、次の情報が表示されます。[ビルド成功] と表示された場合は、デプロイメントは成功です。

詳細設定項目

  1. パッケージング パラメーターを指定します。

    パッケージ ファイルでは、次のパラメーターがサポートされています。

    apiVersion: V1
    kind: AppPackage
    spec:
      packageType:  # アプリケーションデプロイメントパッケージのタイプ。有効な値は、War、FatJar、Image、および url です。
      imageUrl:     # イメージの URL。アプリケーションをデプロイするためにイメージを使用する場合、このパラメーターは必須です。
      packageUrl:   # パッケージの URL。packageType パラメーターを url に設定した場合、このパラメーターをアプリケーションのデプロイに使用されるパッケージのアドレスに設定できます。
    build:
        docker:
           dockerfile:        # Docker イメージのビルドに使用されるファイル。オンプレミス環境でイメージをビルドしてアプリケーションをデプロイする場合、このパラメーターは必須です。
           imageRepoAddress:  # 使用する Alibaba Cloud イメージリポジトリのアドレス。オンプレミス環境でイメージをビルドしてアプリケーションをデプロイする場合、このパラメーターは必須です。
           imageTag:          # イメージタグ。オンプレミス環境でイメージをビルドしてアプリケーションをデプロイする場合、このパラメーターは必須です。
           imageRepoUser:     # Alibaba Cloud イメージリポジトリへのアクセスに使用されるユーザー名。オンプレミス環境でイメージをビルドしてアプリケーションをデプロイする場合、このパラメーターは必須です。
           imageRepoPassword: # Alibaba Cloud イメージリポジトリへのアクセスに使用されるパスワード。オンプレミス環境でイメージをビルドしてアプリケーションをデプロイする場合、このパラメーターは必須です。
         oss:
           bucket:          # デプロイメントパッケージの保存先となるオブジェクトストレージサービス(OSS)バケットの名前。カスタム OSS バケットを使用してデプロイメントパッケージを保存する場合、このパラメーターは必須です。
           key:             # OSS バケットのパス。カスタム OSS バケットを使用してデプロイメントパッケージを保存する場合、このパラメーターは必須です。
           accessKeyId:     # OSS へのアクセスに使用される AccessKey ID。カスタム OSS バケットを使用してデプロイメントパッケージを保存する場合、このパラメーターは必須です。
           accessKeySecret: # OSS へのアクセスに使用される AccessKey シークレット。カスタム OSS バケットを使用してデプロイメントパッケージを保存する場合、このパラメーターは必須です。
  2. デプロイメント パラメーターを指定します。

    デプロイメント ファイルでサポートされているパラメーターを表示するには、ここをクリックしてください。

    apiVersion: V1
    kind: AppDeployment
    spec:
      type: kubernetes
      target:
        appName:     # アプリケーションの名前。
        namespaceId: # アプリケーションがデプロイされるマイクロサービス名前空間。
        appId:       # アプリケーションの ID。プラグインは、指定された ID で識別されるアプリケーションをデプロイします。このパラメーターを指定しない場合、namespaceId と appName の値を使用して、デプロイするアプリケーションが識別されます。
        version:     # デプロイするバージョン。デフォルトの形式は、日、時、分、秒の値で構成されます。
        jdk:         # デプロイされたパッケージが依存する Java Development Kit(JDK)のバージョン。Open JDK 7 および Open JDK 8 がサポートされています。イメージを使用してアプリケーションをデプロイする場合、このパラメーターは使用できません。
        webContainer:  # デプロイされたパッケージが依存する Tomcat コンテナのバージョン。apache-tomcat-7.0.91 がサポートされています。イメージを使用してアプリケーションをデプロイする場合、このパラメーターは使用できません。
        batchWaitTime: # 2 つの連続したバッチ間のインターバル。
        command:       # イメージの起動に使用されるコマンド。コマンドは、コンテナ内の既存の実行可能オブジェクトである必要があります。たとえば、コマンドを sleep に設定できます。このパラメーターを指定すると、イメージの元の起動コマンドは無効になります。
        commandArgs:   # イメージ起動コマンドのパラメーター。これらのパラメーターは、上記の起動コマンドで必要です。
        - 1d
      envs:       # コンテナ環境変数。
        - name: envtmp0
          value: '0'
        - name: envtmp1
          value: '1'
      liveness:   # コンテナのヘルス ステータスを確認します。ヘルス チェックに合格しなかったコンテナは停止され、その後回復されます。
        exec:    # exec、tcpSocket、httpGet パラメーターのいずれかを指定する必要があります。
          command:
            - sleep
            - 1s
        tcpSocket: # exec、tcpSocket、httpGet パラメーターのいずれかを指定する必要があります。
          host: "192.168.1.109"  # (オプション) ホスト IP アドレス。このパラメーターを空のままにすると、デフォルト値であるポッドの IP アドレスが使用されます。
          port: "18081"  # ポート番号。値は文字列である必要があります。
        httpGet:  # exec、tcpSocket、httpGet パラメーターのいずれかを指定する必要があります。
          host: "192.168.1.109"  # (オプション) ホスト IP アドレス。このパラメーターを空のままにすると、デフォルト値であるポッドの IP アドレスが使用されます。
          port: "18081"  # ポート番号。値は文字列である必要があります。
          path: "/health"
          scheme: "HTTP"  # 有効な値は HTTP および HTTPS です。
          httpHeaders:
           - name: "color"
             value: "blue"
        initialDelaySeconds: 5
        timeoutSeconds: 11
        periodSeconds: 5
        successThreshold: 1   # 値は 1 に固定されており、変更できません。
        failureThreshold: 3
      readiness:   # アプリケーションの起動ステータスを確認します。このヘルス チェックに複数回合格しなかったコンテナは停止され、その後再起動されます。ヘルス チェックに合格しなかったコンテナは、サーバーロードバランサー(SLB)インスタンスからトラフィックを受信しません。
        exec:    # exec、tcpSocket、httpGet パラメーターのいずれかを指定する必要があります。
          command:
            - sleep
            - 1s
        tcpSocket: # exec、tcpSocket、httpGet パラメーターのいずれかを指定する必要があります。
          host: "192.168.1.109"  # (オプション) ホスト IP アドレス。このパラメーターを空のままにすると、デフォルト値であるポッドの IP アドレスが使用されます。
          port: "18081"  # ポート番号。値は文字列である必要があります。
        httpGet:  # exec、tcpSocket、httpGet パラメーターのいずれかを指定する必要があります。
          host: "192.168.1.109"  # (オプション) ホスト IP アドレス。このパラメーターを空のままにすると、デフォルト値であるポッドの IP アドレスが使用されます。
          port: "18081"  # ポート番号。値は文字列である必要があります。
          path: "/health"
          scheme: "HTTP"  # 有効な値は HTTP および HTTPS です。
          httpHeaders:
           - name: "color"
             value: "blue"
        initialDelaySeconds: 5
        timeoutSeconds: 11

一般的なシナリオ

このセクションでは、一般的なデプロイシナリオといくつかの関連する構成例について説明します。
  • シナリオ 1:オンプレミス環境で WAR または FatJar パッケージをビルドしてアプリケーションをデプロイする
    たとえば、中国 (北京) リージョンで WAR または FatJar パッケージを使用して EDAS にデプロイされているアプリケーションがあり、オンプレミス環境で WAR または FatJar パッケージをビルドしてアプリケーションを再デプロイするとします。以下は、パッケージ化とデプロイの構成です。
    • パッケージファイル:
      apiVersion: V1
      kind: AppPackage
      spec:
        packageType: War                                    # パッケージタイプ
    • デプロイファイル:
      apiVersion: V1
      kind: AppDeployment
      spec:
        type: kubernetes
        target:
          appId:        # アプリケーションの ID。プラグインは、指定された ID によって識別されるアプリケーションをデプロイします。このパラメーターを指定しない場合、namespaceId と appName の値を使用して、デプロイするアプリケーションが識別されます。
          namespaceId:  # (オプション) アプリケーションをデプロイするマイクロサービスの名前空間。appId の値が使用できない場合、namespaceId と appName の値を使用して、デプロイするアプリケーションを識別できます。
          appName:      # (オプション) アプリケーションの名前。appId の値が使用できない場合、namespaceId と appName の値を使用して、デプロイするアプリケーションを識別できます。
  • シナリオ 2:既存のイメージの URL を使用してアプリケーションをデプロイする
    たとえば、中国 (北京) リージョンでイメージを使用してデプロイされているアプリケーションがあり、既存のイメージ (registry.cn-beijing.aliyuncs.com/test/gateway:latest) を使用してアプリケーションを再デプロイするとします。以下は、パッケージ化とデプロイの構成です。
    • パッケージファイル:
      apiVersion: V1
      kind: AppPackage
      spec:
        packageType: Image
        imageUrl: registry.cn-beijing.aliyuncs.com/test/gateway:latest                                    # イメージの URL
    • デプロイファイル:
      apiVersion: V1
      kind: AppDeployment
      spec:
        type: kubernetes
        target:
          appId:        # アプリケーションの ID。プラグインは、指定された ID によって識別されるアプリケーションをデプロイします。このパラメーターを指定しない場合、namespaceId と appName の値を使用して、デプロイするアプリケーションが識別されます。
          namespaceId:  # (オプション) アプリケーションをデプロイするマイクロサービスの名前空間。appId の値が使用できない場合、namespaceId と appName の値を使用して、デプロイするアプリケーションを識別できます。
          appName:      # (オプション) アプリケーションの名前。appId の値が使用できない場合、namespaceId と appName の値を使用して、デプロイするアプリケーションを識別できます。
  • シナリオ 3:オンプレミス環境でイメージをビルドし、リポジトリにアップロードしてアプリケーションをデプロイする
    たとえば、中国 (北京) リージョンでイメージを使用してデプロイされているアプリケーションがあり、オンプレミス環境でイメージをコンパイルおよびビルドし、Alibaba Cloud イメージリポジトリにアップロードしてアプリケーションを再デプロイするとします。以下は、パッケージ化とデプロイの構成です。
    • パッケージファイル:
      apiVersion: V1
      kind: AppPackage
      spec:
        packageType: Image
        build:
          docker:
             dockerfile: Dockerfile # Dockerfile
             imageRepoAddress:      # イメージリポジトリのアドレス
             imageTag:              # イメージタグ
             imageRepoUser:         # イメージリポジトリにアクセスするためのユーザー名
             imageRepoPassword:     # イメージリポジトリにアクセスするためのパスワード
    • デプロイファイル:
      apiVersion: V1
      kind: AppDeployment
      spec:
        type: kubernetes
        target:
          appId:        # アプリケーションの ID。プラグインは、指定された ID によって識別されるアプリケーションをデプロイします。このパラメーターを指定しない場合、namespaceId と appName の値を使用して、デプロイするアプリケーションが識別されます。
          namespaceId:  # (オプション) アプリケーションをデプロイするマイクロサービスの名前空間。appId の値が使用できない場合、namespaceId と appName の値を使用して、デプロイするアプリケーションを識別できます。
          appName:      # (オプション) アプリケーションの名前。appId の値が使用できない場合、namespaceId と appName の値を使用して、デプロイするアプリケーションを識別できます。