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

:ベースイメージの更新時にアプリケーションの更新を自動化するトリガーを作成する

最終更新日:Nov 14, 2024

Container Registryのリポジトリごとにトリガーを作成できます。 リポジトリのトリガーを作成した後、リポジトリ内のコンテナイメージが更新されたときに通知が送信されます。 アプリケーションのベースイメージが更新され、更新がトリガー条件に一致すると、更新されたベースイメージがプルされてアプリケーションが再デプロイされます。 このトピックでは、Application Centerを自動化して、更新されたベースイメージをプルし、そのイメージを使用してトリガーを作成してアプリケーションを再デプロイする方法について説明します。

前提条件

コンテナイメージは、container Registryのリポジトリにプッシュされます。 詳細については、「Container Registry Enterprise Editionインスタンスにイメージをプッシュし、インスタンスからイメージをプルする」をご参照ください。

ステップ1: アプリケーションの作成

  1. ACKコンソールにログインします。

  2. ACKコンソールの左側のナビゲーションウィンドウで、[マルチクラスター] > [アプリケーションセンター] を選択します。

  3. [アプリケーション設定] ウィザードページで、パラメーターを設定します。

    1. [名前][説明] を設定します。

    2. [テンプレートの作成] タブをクリックし、タブの右上隅にある [YAMLで作成] をクリックします。

    3. 次のコードを [作成] パネルにコピーし、[OK] をクリックします。

      apiVersion: apps/v1
      kind: Deployment
      metadata:
        creationTimestamp: null
        labels:
          app: demo
        name: demo
      spec:
        minReadySeconds: 5
        progressDeadlineSeconds: 60
        revisionHistoryLimit: 5
        selector:
          matchLabels:
            app: demo
        strategy:
          rollingUpdate:
            maxUnavailable: 1
          type: RollingUpdate
        template:
          metadata:
            annotations:
              prometheus.io/port: "9797"
              prometheus.io/scrape: "true"
            creationTimestamp: null
            labels:
              app: demo
          spec:
            containers:
            - image: liusheng-registry.cn-beijing.cr.aliyuncs.com/liusheng/rollouts-demo:blue
              imagePullPolicy: IfNotPresent
              name: demo
              ports:
              - containerPort: 8080
                name: http
                protocol: TCP
              readinessProbe:
                initialDelaySeconds: 5
                tcpSocket:
                  port: 8080
                timeoutSeconds: 5
              resources:
                limits:
                  cpu: "2"
                  memory: 512Mi
                requests:
                  cpu: 100m
                  memory: 64Mi
      status: {}
      ---
      apiVersion: v1
      kind: Service
      metadata:
        name: demo-svc
      spec:
        selector:
          app: demo
        ports:
          - protocol: TCP
            port: 80
            targetPort: 8080
      ---
      apiVersion: extensions/v1beta1
      kind: Ingress
      metadata:
        name: demo
        labels:
          app: demo
      spec:
        rules:
          - host: app.demo.example.com
            http:
              paths:
                - backend:
                    serviceName: demo-svc
                    servicePort: 80
      ---

      下表に一部のパラメーターを示します。

      パラメーター

      説明

      minReadySeconds

      ローリング更新が開始されるまでの最小待機秒数。 クラスターは、指定された期間の終了後にローリング更新を実行します。

      progressDeadlineSeconds

      ローリング更新が停止したと見なされるまでに待機する最大秒数。 ローリング更新が停止したと見なされる場合、システムは秒のカウントを停止します。

      revisionHistoryLimit

      保持するReplicaSetの最大数。

      rollingUpdate.maxUnavailable

      ローリング更新プロセス中に使用できない状態にできるポッドの最大数。

      image

      Container Registryのリポジトリに保存されているイメージのアドレス。 この例では、デモアプリケーションのイメージが使用されます。

    4. [次へ] をクリックします。

ステップ2: Application Centerでトリガーのwebhook URLを生成する

  1. ACKコンソールにログインします。

  2. ACKコンソールの左側のナビゲーションウィンドウで、[マルチクラスター] > [アプリケーションセンター] を選択します。

  3. [アプリケーションセンター] ページで、手順1で作成したアプリケーションの名前をクリックします。

  4. アプリケーションの詳細ページで、右上隅の [トリガー] をクリックします。

  5. [トリガー] パネルで、[作成] をクリックします。 トリガーのwebhook URLが表示されたら、[コピー] をクリックします。

    説明

    webhook URLを機密に保つことを推奨します。

ステップ3: Container Registryでトリガーを作成する

  1. Container Registryコンソールにログインします。

  2. 上部のナビゲーションバーで、リージョンを選択します。

  3. [インスタンス] ページで、管理するEnterprise Editionインスタンスをクリックします。

  4. Enterprise Editionインスタンスの管理ページの左側のナビゲーションウィンドウで、[Repository] > [Repositories] を選択します。

  5. [リポジトリ] ページで、手順1でアプリケーションを作成したときに使用するリポジトリの名前をクリックします。

  6. リポジトリの詳細ページで、[トリガー] をクリックします。 次に、作成 をクリックします。

  7. [トリガーの作成] ダイアログボックスで、トリガーの名前を指定し、手順2で生成されたトリガーのwebhook URLを入力し、トリガー[すべて] に設定します。 次に、[確認] をクリックします。

    AllBy RegExpBy Tagsのトリガーモードがサポートされています。 次のセクションでは、トリガーモードについて説明します。

    • All: イメージが更新されるたびに、アプリケーションセンターは更新されたイメージを取得します。

    • By RegExp: イメージの更新をフィルタリングするために正規表現が使用されます。 イメージが更新され、新しいイメージのバージョンが正規表現と一致する場合にのみ、イメージを取得します。

    • By Tags: タグは、画像更新をフィルタリングするために使用される。 イメージが更新され、新しいイメージバージョンが指定されたタグのいずれかと一致する場合にのみ、Application Centerがイメージを取得します。

    説明

    アプリケーションセンターがイメージのプルに失敗した場合は、[トリガー] ページに移動してトリガーを見つけ、[操作] 列の [アクセスログ] をクリックします。 アクセスログメッセージで、応答本文から例外の原因を確認します。

ステップ4: 更新されたコンテナイメージを使用してアプリケーションを再デプロイする

リポジトリ内のコンテナイメージが更新されると、更新されたイメージが自動的にプルされ、アプリケーションの再デプロイに使用されます。

  1. 次のコマンドを実行して、手順1でアプリケーションの作成に使用したリポジトリにログインします。

    説明

    Container Registry Enterprise Editionのインスタンスが中国 (杭州) リージョンで作成されている場合、コマンドで <Enterprise Editionのインスタンスが作成されているリージョン> をHangzhouに設定する必要があります。

    docker login -- username=<Container Registryへのログインに使用されるusername> <Container Registry Enterprise Editionのインスタンスの名前> -registry.cn-<Container Registry Enterprise Editionのインスタンスが作成されるリージョンd>.cr.aliyuncs.com
  2. 次のコマンドを実行して、画像にタグを追加します。

    docker ta g registry.cn-hangzhou.aliyuncs.com/acs/rollouts-demo: グリーn liusheng-registry.cn-beijing.cr.aliyuncs.com/liusheng/rollouts-demo: グリーン
  3. 次のコマンドを実行して、手順1でアプリケーションを作成したときに使用されるリポジトリに新しいバージョンのコンテナイメージをプッシュします。

    docker pus h liusheng-registry.cn-beijing.cr.aliyuncs.com/liusheng/rollouts-demo: グリーン

結果の検証

  1. オーケストレーションテンプレートを表示します。

    コンテナイメージが更新されると、Application Centerは更新されたイメージを取得し、アプリケーションのオーケストレーションテンプレートを更新します。

    1. ACKコンソールにログインします。

    2. ACKコンソールの左側のナビゲーションウィンドウで、[マーケットプレイス] > [オーケストレーションテンプレート] を選択します。

    3. [テンプレート] ページで、手順1で作成したテンプレートを見つけ、[詳細] をクリックします。 [詳細] ページでは、更新された画像がテンプレートで使用されます。

  2. ブラウザのアドレスバーにapp.demo.example.comを入力し、Enterキーを押してアプリケーションにアクセスします。

    次の図に示すページがブラウザに表示されると、アプリケーションが更新されます。

    Verify the result