次の方法で共有


チュートリアル: Argo CD で GitOps を使用してアプリケーションをデプロイする

このチュートリアルでは、Azure Arc 対応 Kubernetes クラスターまたは Azure Kubernetes Service (AKS) クラスターで Argo CD で GitOps を使用する方法について説明します。 Argo CD を使用した GitOps は 、クラスターの 構成とアプリケーションのデプロイの信頼できるソースとして Git リポジトリを使用できるクラスター拡張機能として有効になっています。 Argo CD では、Helm や Open Container Initiative (OCI) リポジトリなど、他の一般的なファイル ソースもサポートされています。

バージョン 1.0.0-preview 以降、Argo CD 拡張機能では コミュニティ Helm チャートが使用されます。 この変更は、構成キーが変更された場合の重大な変更です。 拡張機能の以前のバージョン (0.0.x) をインストールした場合は、拡張機能をアンインストールし、更新された構成キーを使用して最新のファイルを再インストールします。

重要

Argo CD での GitOps は現在プレビュー段階です。 ベータ版、プレビュー版、またはその他の一般提供にまだリリースされていない Azure 機能に適用される法的条件については、 Microsoft Azure プレビューの追加使用条件 を参照してください。

[前提条件]

GitOps を使用してアプリケーションをデプロイするには、Azure Arc 対応 Kubernetes クラスターまたは AKS クラスターが必要です。

Azure Arc 対応 Kubernetes クラスター

Azure Kubernetes Service クラスター

  • 稼働している MSI ベースの AKS クラスター。

    重要

    この拡張機能を機能させるには、サービス プリンシパル名 (SPN) ではなく、マネージド サービス ID (MSI) を使用して AKS クラスターを作成する必要があります。 az aks create を使用して作成した新しい AKS クラスターの場合、クラスターは既定で MSI ベースになります。 SPN ベースのクラスターを MSI に変換するには、 az aks update -g $RESOURCE_GROUP -n $CLUSTER_NAME --enable-managed-identityを実行します。 詳細については、「 AKS でのマネージド ID の使用」を参照してください。

  • Microsoft.ContainerService/managedClusters リソースの種類に対する読み取りおよび書き込みアクセス許可。

両方のクラスターの種類に共通

  • 次のリソースの種類に対する読み取りと書き込みのアクセス許可。

    • Microsoft.KubernetesConfiguration/extensions
  • Azure CLI バージョン 2.15 以降。 Azure CLI をインストール するか、次のコマンドを使用して最新バージョンに更新します。

    az version
    az upgrade
    
  • Kubernetes コマンド ライン クライアント kubectl。 Azure Cloud Shell を使用している場合、kubectl は既にインストールされています。

    kubectl コマンドを使用して、az aks install-cli をローカルにインストールします。

    az aks install-cli
    
  • 次の Azure リソース プロバイダーの登録。

    az provider register --namespace Microsoft.Kubernetes
    az provider register --namespace Microsoft.ContainerService
    az provider register --namespace Microsoft.KubernetesConfiguration
    

    登録は非同期プロセスであり、10 分以内に終了するはずです。 登録プロセスを監視するには、次のコマンドを使用します。

    az provider show -n Microsoft.KubernetesConfiguration -o table
    
    Namespace                          RegistrationPolicy    RegistrationState
    ---------------------------------  --------------------  -------------------
    Microsoft.KubernetesConfiguration  RegistrationRequired  Registered
    

ヒント

このチュートリアルのソースは Git リポジトリですが、Argo CD では Helm や Open Container Initiative (OCI) リポジトリなどの他の一般的なファイル ソースがサポートされています。

バージョンとリージョンのサポート

GitOps は現在、パブリック リージョンでサポートされています。

ネットワークの要件

GitOps エージェントが機能するには、ポート 22 (SSH) またはポート 443 (HTTPS) のリポジトリ ソースへの送信 (エグレス) TCP が必要です。 エージェントには、次の送信 URL へのアクセス権も必要です。

エンドポイント (DNS) 説明
https://management.azure.com エージェントで Kubernetes 構成サービスと通信するために必要です。
https://<region>.dp.kubernetesconfiguration.azure.com エージェントが状態をプッシュして構成情報をフェッチするためのデータ プレーン エンドポイント。 <region> (前述のサポートされているリージョン) に依存します。
https://login.microsoftonline.com Azure Resource Manager トークンを取得し、更新するために必要です。
https://mcr.microsoft.com コントローラーのコンテナーイメージをプルする必要があります。

CLI 拡張機能を有効にする

最新の CLI 拡張機能パッケージ k8s-configuration および k8s-extension をインストールします。

az extension add -n k8s-configuration
az extension add -n k8s-extension

これらのパッケージを最新バージョンに更新するには:

az extension update -n k8s-configuration
az extension update -n k8s-extension

インストールされているすべての Azure CLI 拡張機能とそのバージョンの一覧を表示するには、次のコマンドを使います。

az extension list -o table

Experimental   ExtensionType   Name                   Path                                                       Preview   Version
-------------  --------------  -----------------      -----------------------------------------------------      --------  --------
False          whl             connectedk8s           C:\Users\somename\.azure\cliextensions\connectedk8s         False     1.10.7
False          whl             k8s-configuration      C:\Users\somename\.azure\cliextensions\k8s-configuration    False     2.2.0
False          whl             k8s-extension          C:\Users\somename\.azure\cliextensions\k8s-extension        False     1.6.4

GitOps (Argo CD) 拡張機能を作成する (簡単なインストール)

GitOps Argo CD インストール では、高可用性 (HA) モードでのマルチテナントがサポートされ、ワークロード ID がサポートされます。

重要

HA モードは既定の構成であり、クラスター内の 4 つのノードをインストールできる必要があります。 次のコマンドでは、1 つのノードに拡張機能をインストールする --config "redis-ha.enabled=false" を追加します。

このコマンドは、Argo CD コンポーネントをクラスター全体のアクセス権を持つ新しい argocd 名前空間にインストールする最も簡単な構成を作成します。 クラスター全体のアクセスにより、Argo CD アプリ定義は、クラスター内の Argo CD configmap 構成に一覧表示されている名前空間で検出できます。 例: namespace1,namespace2

az k8s-extension create --resource-group <resource-group> --cluster-name <cluster-name> \
--cluster-type managedClusters \
--name argocd \
--extension-type Microsoft.ArgoCD \
--config "redis-ha.enabled=false" \
--config "configs.params.application\.namespaces=namespace1,namespace2"

このインストール コマンドは、新しい <namespace> 名前空間を作成し、 <namespace>に Argo CD コンポーネントをインストールします。 この構成の Argo CD アプリケーション定義は、 <namespace> 名前空間でのみ機能します。

リソース制限などの追加の構成オプションについては、 values.yaml を参照してください。 拡張機能を構成するときは、Azure CLI コマンドでこれらの構成を使用します。

ワークロード ID を使用して GitOps (Argo CD) 拡張機能を作成する

運用環境での使用に推奨される別のインストール方法は、 ワークロード ID です。 この方法を使用すると、Microsoft Entra ID ID を使用して、Git リポジトリ内のシークレットや資格情報を管理しなくても、Azure リソースに対する認証を行うことができます。 このインストールでは、Argo CD の 3.0.0-rc2 以降の OSS バージョンで有効になっているワークロード ID 認証を利用します。

重要

HA モードは既定の構成であり、クラスター内の 4 つのノードをインストールできる必要があります。 'redis-ha.enabled': falseを使用して、1 つのノードに拡張機能をインストールします。

ワークロード ID を使用して拡張機能を作成するには、まず、次の変数をこの Bicep テンプレートの独自の値に置き換えます。

var clusterName = '<aks-or-arc-cluster-name>'

var workloadIdentityClientId = 'replace-me##-##-###-###'
var ssoWorkloadIdentityClientId = 'replace-me##-##-###-###'

var url = 'https://<public-ip-for-argocd-ui>/'
var oidcConfig = '''
name: Azure
issuer: https://login.microsoftonline.com/<your-tenant-id>/v2.0
clientID: <same-value-as-ssoWorkloadIdentityClientId-above>
azure:
  useWorkloadIdentity: true
requestedIDTokenClaims:
  groups:
    essential: true
requestedScopes:
  - openid
  - profile
  - email
'''

var defaultPolicy = 'role:readonly'
var policy = '''
p, role:org-admin, applications, *, */*, allow
p, role:org-admin, clusters, get, *, allow
p, role:org-admin, repositories, get, *, allow
p, role:org-admin, repositories, create, *, allow
p, role:org-admin, repositories, update, *, allow
p, role:org-admin, repositories, delete, *, allow
g, replace-me##-argocd-ui-entra-group-admin-id, role:org-admin
'''

resource cluster 'Microsoft.ContainerService/managedClusters@2024-10-01' existing = {
  name: clusterName
}

resource extension 'Microsoft.KubernetesConfiguration/extensions@2023-05-01' = {
  name: 'argocd'
  scope: cluster
  properties: {
    extensionType: 'Microsoft.ArgoCD'
    configurationSettings: {
      'redis-ha.enabled': 'true'
      'azure.workloadIdentity.enabled': 'true'
      'azure.workloadIdentity.clientId': workloadIdentityClientId
      'azure.workloadIdentity.entraSSOClientId': ssoWorkloadIdentityClientId
      'configs.cm.oidc\\.config': oidcConfig
      'configs.cm.url': url
      'configs.rbac.policy\\.default': defaultPolicy
      'configs.rbac.policy\\.csv': policy
      'configs.params.application\\.namespaces': 'default, argocd'
   }
  }
}

Bicep テンプレートは、次のコマンドを使用して作成できます。

az deployment group create --resource-group <resource-group> --template-file <bicep-file>

リソース制限などの追加の構成オプションについては、 values.yaml を参照してください。 拡張機能を構成するときは、Bicep テンプレートでこれらの構成を使用します。

パラメーター

clusterName は、AKS または Arc 対応 Kubernetes クラスターの名前です。

workloadIdentityClientId ssoWorkloadIdentityClientIdは、ワークロード ID に使用するマネージド ID のクライアント ID です。 ssoWorkloadIdentityClientIdは Argo CD UI の認証に使用され、workloadIdentityClientIdは Argo CD コンポーネントのワークロード ID に使用されます。 SSOWorkloadIdentityClientId の一般的なセットアップと構成の詳細については、 OIDC を使用した Microsoft Entra ID アプリ登録 認証に関するページを参照してください。

url は Argo CD UI のパブリック IP です。 クラスターに顧客が指定したイングレス コントローラーが既に存在しない限り、パブリック IP またはドメイン名はありません。 その場合は、デプロイ後に Argo CD UI にイングレス ルールを追加する必要があります。

oidcConfig - <your-tenant-id> を Microsoft Entra ID のテナント ID に置き換えます。 <same-value-as-ssoWorkloadIdentityClientId-above>ssoWorkloadIdentityClientIdと同じ値に置き換えます。

policy 変数は Argo CD の argocd-rbac-cm configmap 設定です。 g, replace-me##-argocd-ui-entra-group-admin-id は、Argo CD UI への管理者アクセスを提供する Microsoft Entra グループ ID です。 Microsoft Entra グループ ID は、Azure portal の Microsoft Entra ID > Groups >your-group-name> Properties にあります。 Microsoft Entra グループ ID の代わりに Microsoft Entra ユーザー ID を使用できます。 Microsoft Entra ユーザー ID は、Azure portal の Microsoft Entra ID > Users >your-user-name> Properties にあります。

ワークロード ID 資格情報の作成

新しいワークロード ID 資格情報を設定するには、次の手順に従います。

  1. AKS クラスターまたは Arc 対応 Kubernetes クラスターの OIDC 発行者 URL を取得します。

  2. マネージド ID を作成し、そのクライアント ID とテナント ID をメモします。

  3. AKS クラスターまたは Arc 対応 Kubernetes クラスターのフェデレーション ID 資格情報を確立します。 例えば次が挙げられます。

    # For source-controller
    az identity federated-credential create --name ${FEDERATED_IDENTITY_CREDENTIAL_NAME} --identity-name "${USER_ASSIGNED_IDENTITY_NAME}" --resource-group "${RESOURCE_GROUP}" --issuer "${OIDC_ISSUER}" --subject 
    
  4. argocd または image-reflector コントローラー または argocd-repo-server がプルするリソースのワークロードアイデンティティに対して、必ず適切なアクセス許可を付与してください。 たとえば、Azure Container Registry を使用している場合は、 Container Registry Repository Reader ( ABAC 対応レジストリの場合) または AcrPull (ABAC 以外のレジストリの場合) が適用されていることを確認します。

ワークロード ID を使用してプライベート ACR レジストリまたは ACR リポジトリに接続する

プライベート ACR レジストリまたは ACR リポジトリを利用するには、プライベート ACR レジストリ に接続するための Argo CD の公式ドキュメントの指示に従います。 このガイドの [ポッドのラベル付け][フェデレーション ID 資格情報の作成][サービス アカウントへの注釈の追加] の手順は、Bicep デプロイを使用した拡張機能によって完了しているため、スキップできます。

Argo CD UI にアクセスする

AKS クラスター用の既存のイングレス コントローラーがない場合は、LoadBalancer サービスを使用して Argo CD UI を直接公開できます。 次のコマンドは、ポート 80 と 443 で Argo CD UI を公開します。

kubectl -n argocd expose service argocd-server --type LoadBalancer --name argocd-server-lb --port 80 --target-port 8080

Argo CD アプリケーションをデプロイする

Argo CD 拡張機能がインストールされたので、Argo CD UI または CLI を使用してアプリケーションをデプロイできます。 次の例では、 kubectl apply を使用して、Argo CD アプリケーション内の AKS ストアを、 argocd 名前空間の既定の Argo CD プロジェクトにデプロイします。

kubectl apply -f - <<EOF
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: aks-store-demo
  namespace: argocd
spec:
  project: default
  source:    
      repoURL: https://github.com/Azure-Samples/aks-store-demo.git
      targetRevision: HEAD
      path: kustomize/overlays/dev
  syncPolicy:
      automated: {}
  destination:
      namespace: argocd
      server: https://kubernetes.default.svc
EOF

AKS ストア デモ アプリケーションが argocd 名前空間にインストールされました。 次の手順に従って、アプリケーションの Web ページを参照してください。 httpではなく、httpsを使用して IP アドレスにアクセスしてください。

拡張機能の構成を更新する

Argo CD configmaps は、インストール後に次のコマンドを使用して、その他の拡張機能の構成設定を更新できます。

az k8s-extension update --resource-group <resource-group> --cluster-name <cluster-name> --cluster-type <cluster-type> --name argocd --config "configs.cm.url='https://<public-ip-for-argocd-ui>/auth/callback'"

拡張機能を使用して Argo CD 構成マップを更新し、設定が上書きされないようにします。 Bicep テンプレートの適用 は、Azure CLI を使用して構成を更新するための代替方法です。

拡張機能を削除する

拡張機能を削除するには、次のコマンドを使用します。

az k8s-extension delete -g <resource-group> -c <cluster-name> -n argocd -t managedClusters --yes

次のステップ