このトピックでは、ACK One GitOps に基づいてデプロイされたサンプルアプリケーションについて説明します。
デプロイメントリポジトリのディレクトリツリー
完全な CI/CD パイプラインには、主にビジネスコードリポジトリとアプリケーションデプロイメントコードリポジトリの 2 種類のリポジトリが含まれます。コードリポジトリの構成には変更が必要なため、次のコードリポジトリを自分のアカウントにフォークする必要があります。
ビジネスコードリポジトリ: echo-server プロジェクトおよび echo-web-server プロジェクト。
アプリケーションデプロイメントコードリポジトリ: クラスターにデプロイする必要があるアプリケーションの YAML ファイルを格納するために使用されます。詳細については、「Alibaba Cloud GitOps Demo プロジェクト (example ブランチ)」をご参照ください。主なディレクトリ構造を以下に示します。このベストプラクティスでは、Dev、Staging、Production 環境を含む完全な開発プロセスの例を、Helm と Kustomize の両方のメソッドでカバーしています。実際のニーズに基づいて、これらのメソッドのいずれかを使用してデプロイできます。
manifests ├── helm │ ├── echo-server │ │ ├── .argocd-source-app-helm-dev.yaml │ │ ├── .argocd-source-app-helm-production.yaml │ │ ├── .argocd-source-app-helm-staging.yaml │ │ ├── Chart.yaml │ │ ├── templates │ │ │ ├── NOTES.txt │ │ │ ├── _helpers.tpl │ │ │ ├── deployment-echo-server.yaml │ │ │ ├── deployment-echo-web-server.yaml │ │ │ ├── external-secret.yaml │ │ │ ├── hpa.yaml │ │ │ ├── ingress.yaml │ │ │ ├── rollout.yaml │ │ │ ├── service-echo-server.yaml │ │ │ ├── service-echo-web-server.yaml │ │ │ ├── serviceaccount.yaml │ │ │ └── tests │ │ │ └── test-connection.yaml │ │ ├── values-dev.yaml │ │ ├── values-production.yaml │ │ ├── values-staging.yaml │ │ └── values.yaml │ └── web-demo │ ├── Chart.yaml │ ├── templates │ │ ├── deployment.yaml │ │ └── service.yaml │ └── values.yaml └── kustomize ├── base │ ├── deployment.yaml │ ├── kustomization.yaml │ └── service.yaml └── overlay ├── dev │ ├── .argocd-source-app-kust-dev.yaml │ ├── deployment.yaml │ └── kustomization.yaml ├── production │ ├── .argocd-source-app-kust-production.yaml │ ├── deployment.yaml │ └── kustomization.yaml └── staging ├── .argocd-source-app-kust-staging.yaml ├── deployment.yaml └── kustomization.yamlこのデプロイメントリポジトリのディレクトリ構造で Helm によって管理される echo-server プロジェクトには、複数の環境またはクラスター、複数の Deployment、マルチクラスターの Secret 管理、および Rollout の機能が含まれています。
複数環境またはマルチクラスターデプロイメント
次のセクションでは、Helm と Kustomize で管理されるアプリケーションの構成について説明します。
Helm で管理されるアプリケーション
異なる
values.yamlファイルを使用して、異なる構成のアプリケーションをデプロイできます。たとえば、前述のディレクトリ構造にあるvalues-dev.yaml、values-staging.yaml、values-production.yamlファイルなどです。Dev 環境で Rollout を無効にし、Staging 環境と Production 環境で Rollout を有効にする場合は、対応する
values.yamlファイルで異なる設定を構成できます。values-****.yamlファイル内のイメージリポジトリ情報を、実際に使用する Container Registry Enterprise Edition インスタンス (ACR EE) に変更してください。このベストプラクティスでは、ACR EE インスタンス名はdemo-testで、名前空間はcidemoです。必要に応じて構成してください。
Kustomize で管理されるアプリケーション
これらのアプリケーションは base+overlay アプローチに基づいてリソースを変更する必要があるため、overlay 内の異なるディレクトリを使用して、異なる環境に対して異なる構成を実装できます。
アプリケーションイメージが更新されると、Image Updater は、次の図に示すように、最新のイメージ情報を Git リポジトリ内の .argocd-source-app-helm-xxx.yaml および .argocd-source-app-kust-xxx.yaml ファイルに自動的に更新します。アプリケーションの構成に関する詳細については、「ACK One GitOps と Container Registry を使用して CI/CD パイプラインを構築する」をご参照ください。

複数クラスター間での機密情報の差別化された配布
異なるクラスターで異なる構成を使用するアプリケーションをデプロイし、データベースのユーザー名やパスワードなどの機密情報を使用する必要がある場合は、前述のマルチクラスターの差別化されたデプロイメントの後に Secrets Manager を使用して認証情報を暗号化できます。その後、各クラスターから 認証情報を Key Management Service (KMS) にインポートできます。Secrets Manager の詳細については、「シークレットの概要」をご参照ください。
この機能を使用するには、対応する YAML ファイル (external-secret.yaml) をアプリケーションデプロイメントリポジトリに追加する必要があります。アプリケーションのデプロイメント中に、このファイルは ExternalSecret を作成して KMS からサービス資格情報を取得し、対応する Secret を deployment-echo-server.yaml にマウントします。
このベストプラクティスでは、異なる環境に対して values-****.yaml ファイルに異なる情報を構成する必要があります。たとえば、Dev 環境では secretManager 機能を無効にすることができます。必要に応じて変更してください。
カナリアリリース
Staging 環境および Production 環境では、通常、Rollout 機能を使用してローリングデプロイを実装する必要があります。したがって、カナリアリリースとローリングアップデートをトリガーする Rollout リソースをデプロイするために、対応する YAML ファイルをアプリケーションデプロイメントリポジトリに追加する必要があります。これは、ディレクトリ構造内の rollout.yaml ファイルです。カナリアリリースの詳細については、「ACK One Gitops と Argo Rollouts を使用してカナリアリリースを実行する」および「Kruise Rollout を使用してカナリアリリースと A/B テストを実行する」をご参照ください。
異なる環境に対応するアプリケーション
以下の内容は、Helm と Kustomize の両方のメソッドを使用して、異なる環境 (Dev、Staging、Production) にアプリケーションをデプロイするための YAML の例を示しています。必要に応じて argocd-image-updater.argoproj.io/image-list と repoURL の構成を変更してください。
Helm
以下のコードブロックは、前述のディレクトリツリーの Helm ディレクトリ以下にある、異なる環境に対応するアプリケーションを示しています。
Dev 環境
Staging 環境
Production 環境
Kustomize
以下のコードブロックは、前述のディレクトリツリーの Kustomize ディレクトリ以下にある、異なる環境に対応するアプリケーションを示しています。
Dev 環境
Staging 環境
Production 環境