ホスト型 Argo CD を活用した ACK One GitOps を使用すると、コードコミットを起点として、コンテナイメージのビルド、マルチクラスターデプロイ、カナリアリリース、ロールバックまでを一貫して自動化できる完全な CI/CD パイプラインを構築できます。すべての処理は、Git を唯一の信頼される情報源(Single Source of Truth)として駆動されます。
本トピックでは、Container Registry と ACK One GitOps を連携させ、Dev、ステージング、本番の各クラスターへアプリケーションを配信する 8 ステップのワークフローについて説明します。
仕組み
このパイプラインでは、以下の 2 つの役割間で責任が分離されています。
開発チーム — コードをコミットし、Dev 環境へのデプロイをモニターし、ステージングおよび本番環境へのリリース承認を行います。
運用・保守(O&M)チーム — CI パイプラインおよびフィルタールールを設定し、Container Registry Enterprise Edition とパイプラインを関連付け、ステージングおよび本番環境へのカナリアリリースをトリガーします。
パイプラインの実行手順は以下のとおりです。
O&M チームがビジネスコードリポジトリおよびデプロイメントリポジトリを準備し、ACK One GitOps を有効化して CI パイプラインを設定します。
開発チームがビジネスコードリポジトリにコードをコミットします。
Container Registry Enterprise Edition が新しいコンテナイメージをビルドし、イメージリポジトリへプッシュします。
ACK One GitOps のイメージアップデーターが新しいイメージタグを検出し、それをデプロイメントリポジトリへ書き戻します。
Argo CD がデプロイメントリポジトリ内の YAML 変更を検出し、自動的に Dev クラスターへ新しいイメージをデプロイします。ステージングクラスターが自動アプリケーション同期機能を有効化している場合、ACK One GitOps が自動的にイメージバージョンを更新します。
開発チームが Dev 環境でアプリケーションの動作を検証します。
O&M チームが Argo Rollouts または Kruise Rollout を使用して、ステージングおよび本番環境へカナリアリリースによるリリースを実行します。
各環境におけるイメージ更新の取り扱い:
| Dev | ステージングおよび本番 | |
|---|---|---|
| 同期モード | 自動 | 手動トリガーが必要 |
| ロールアウト戦略 | 直接デプロイ | Argo Rollouts または Kruise Rollout を使用したカナリアリリース |
| トリガー主体 | イメージアップデーター(自動) | O&M チーム |
リージョンをまたぐステージングおよび本番クラスターにおけるローリングアップデートには、追加の手順が必要です。単なるコード変更のコミットだけでは、これらのクラスターへ更新済みイメージがデプロイされません。
基本概念
ステップ 1:デプロイメントリポジトリの構造を確認
パイプラインの設定を開始する前に、参考となるデプロイメントリポジトリの構造を確認してください。詳細については、「ACK One GitOps を基盤としたサンプルアプリケーションの紹介」をご参照ください。
ステップ 2:ACK One GitOps の有効化とログイン
ACK One コンソールまたは CLI を使用して、GitOps を有効化し、ログインします。
コンソールを使用する場合
ACK One コンソール にログインします。左側のナビゲーションウィンドウで、Fleet > マルチクラスターギャイトオプス を選択します。
マルチクラスターギャイトオプス ページで、Fleet インスタンス名の横にある
をクリックし、対象の Fleet インスタンスを選択します。新規の Fleet インスタンスでは、GitOps がデフォルトで有効化されています。GitOps が無効な場合は、GitOps の有効化 をクリックし、確認ダイアログで OK をクリックします。GitOps が有効化されると、GitOps ページに GitOps コンソール および アクセス制御 が表示されます。
GitOps コンソール をクリックします。
インターネット経由で GitOps にアクセスするには、事前にパブリックアクセスを有効化する必要があります。詳細については、「GitOps へのパブリックアクセスの有効化」をご参照ください。
CLI を使用する場合
CLI の操作手順については、「GitOps の活用」ドキュメント内の「GitOps コンソールへのパブリックアクセスの有効化」セクションおよび「GitOps システムへのログイン」をご参照ください。
ステップ 3:イメージ CI パイプラインの構築
ご利用のインフラストラクチャに合った方法を選択してください。
方法 1:Container Registry を使用する場合
Container Registry Enterprise Edition を使用してイメージリポジトリを作成し、ビジネスコードリポジトリに関連付け、構築ルールを設定します。 詳細については、「Container Registry Enterprise Edition インスタンスを使用してイメージを構築する」をご参照ください。
Kubernetes Secrets を使用せずにイメージをプルするには、Container Registry Enterprise Edition の概要ページで [匿名ユーザーからのプル] を有効化するか、aliyun-acr-credential-helper コンポーネントをデプロイします。詳細については、「シークレットを使用せずにイメージをプルするために aliyun-acr-credential-helper コンポーネントを使用する」をご参照ください。
ビジネスコードリポジトリが Git リポジトリであり、イメージのプルにタイムアウトが発生する場合は、中国本土外に展開されたサーバーでビルドを実行 を有効化してください。
方法 2:ACK One ワークフロークラスターを使用する場合
詳細については、「ACK One ワークフロークラスターを使用してイメージ CI パイプラインを構築する」をご参照ください。
ステップ 4:ACK One GitOps を使用したアプリケーションのデプロイ
GitOps を有効化した後は、Argo CD コンソールまたは CLI を使用してアプリケーションをデプロイおよび管理します。ApplicationSets を使用すると、単一の操作で複数のクラスターに同一アプリケーションを展開できます。
詳細については、「ACK One GitOps を使用したアプリケーションのデプロイ」をご参照ください。
ステップ 5:イメージアップデーターによる継続的デリバリーの自動化
イメージアップデーターは、CI パイプラインとデプロイメントリポジトリの間のフィードバックループを閉じます。
CI パイプラインが Container Registry Enterprise Edition へ新しいイメージをビルド・プッシュします。
イメージアップデーターが、設定済みのフィルタールールに一致する新しいタグを検出します。
イメージアップデーターが新しいタグをデプロイメントリポジトリへ書き戻します。
Argo CD が YAML の変更を検出し、Sync 操作を実行して更新済みイメージをデプロイします。
これにより、デプロイメントリポジトリの手動編集を伴わずに、コードコミットから実行中のコンテナに至るまでのエンドツーエンドのデプロイメントをトリガーできます。
デプロイメントリポジトリを直接更新することも可能です(例:YAML 内のイメージタグを手動で編集)。その場合、Argo CD が変更を監視し、イメージアップデーターを経由せずにデプロイを実行します。
詳細については、「ACK One GitOps および Container Registry を使用した CI/CD パイプラインの構築」をご参照ください。
ステップ 6:ステージングおよび本番環境へのカナリアリリースの実行
ステージングおよび本番環境では、直接的なイメージ交換ではなく、手動トリガーとカナリアリリース戦略を採用する必要があります。これにより、破損したイメージが本番規模のトラフィックに影響を及ぼすリスクを防止できます。
詳細については、「ACK One GitOps および Argo Rollouts を使用したカナリアリリースの実行」および「ACK One GitOps を基盤とした Kruise Rollout を使用したカナリアリリースの実装」をご参照ください。
ステップ 7:アプリケーションのロールバック
リリースによってインシデントが発生した場合、以下のいずれかの方法でロールバックを実行します。
Argo CD コンソールによる迅速なロールバック
Argo CD コンソールの Applications ページで、HISTORY AND ROLLBACK をクリックし、対象のバージョンを選択して ROLLBACK をクリックします。
詳細については、「アプリケーションバージョンへのロールバック」セクション(「ACK One GitOps を使用したアプリケーションのデプロイ」)をご参照ください。
CLI を使用した迅速なロールバック
CLI を使用したロールバック手順については、「アプリケーション管理」ドキュメント内の「Argo CD CLI の使用」セクションをご参照ください。
Git revert を使用したエンドツーエンドのロールバック
インシデントが実行中のイメージおよびソースコード履歴の両方を復元する必要がある場合、コミットを復元して変更をプッシュし、フル CI/CD パイプラインを再起動します。
# 最新のコミットを復元
git revert HEAD
# 複数の連続したコミットを復元する場合:
# git revert HEAD~3..HEAD
# 非連続した特定のコミットを復元する場合:
# git revert <commit-id-1> <commit-id-2> ... <commit-id-n>
# CI/CD パイプラインを起動するためにプッシュ
git push origin HEAD:${branch}イメージアップデーターが復元されたコードからビルドされた新しいイメージを検出し、更新済みのタグをデプロイメントリポジトリへ書き戻します。その後、Argo CD がそのイメージをデプロイします。
ステップ 8:ユーザー権限の管理
Argo CD の権限モデルでは、プロジェクトレベルでアプリケーション、クラスター、リポジトリなど特定のリソースへのアクセスを付与または制限できます。以下のポリシーテンプレートを使用します。
p, <user/group>, <resource>, <action>, <project>/<object>サポートされる操作: create、update、delete、get。
詳細については、「ACK One GitOps のマルチテナント権限の設定」をご参照ください。
次のステップ
このパイプラインの設定を完了した後は、以下の関連トピックをご参照ください。