次の方法で共有


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

このチュートリアルでは、Kubernetes クラスターで GitOps を使用する方法について説明します。 ArgoCD を使用した GitOps は、Azure Arc 対応 Kubernetes クラスターまたは Azure Kubernetes Service (AKS) クラスターでクラスター 拡張機能 として有効になります。 GitOps を使用すると、クラスター構成とアプリケーションのデプロイの正しいソースとして Git リポジトリを使用できます。

重要

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

ヒント

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

[前提条件]

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
    

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

GitOps は現在、 Azure Arc 対応 Kubernetes がサポートするすべてのリージョンでサポートされています。 GitOps は現在、AKS でサポートされるリージョンのサブセットでサポートされています。 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 (ArgoCD) 拡張機能を作成する (簡単なインストール)

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

重要

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

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

az k8s-extension create --resource-group <resource-group> --cluster-name <cluster-name> \
--cluster-type managedClusters \
--name argocd \
--extension-type Microsoft.ArgoCD \
--auto-upgrade false \
--release-train preview \
--version 0.0.7-preview \
--config deployWithHightAvailability=false \
--config namespaceInstall=false \
--config "config-maps.argocd-cmd-params-cm.data.application\.namespaces=namespace1,namespace2"

ArgoCD アクセスを特定の名前空間に制限する場合は、--config namespaceInstall=trueパラメーターと共に--target-namespace <namespace>を使用します。 このインストール コマンドは、新しい <namespace> 名前空間を作成し、 <namespace>に ArgoCD コンポーネントをインストールします。 インストール コマンドを使用すると、ArgoCD の複数のインスタンスを同じクラスターにインストールすることもできます。 この構成の ArgoCD アプリケーション定義は、 <namespace> 名前空間でのみ機能します。

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

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

重要

HA モードは既定の構成であり、クラスター内の 3 つのノードをインストールできる必要があります。 --config deployWithHighAvailability=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-Microsoft 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'
    autoUpgradeMinorVersion: false
    releaseTrain: 'preview'
    version: '0.0.7-preview'
    configurationSettings: {
      'workloadIdentity.enable': 'true'
      'workloadIdentity.clientId': workloadIdentityClientId
      'workloadIdentity.entraSSOClientId': ssoWorkloadIdentityClientId
      'config-maps.argocd-cm.data.oidc\\.config': oidcConfig
      'config-maps.argocd-cm.data.url': url
      'config-maps.argocd-rbac-cm.data.policy\\.default': defaultPolicy
      'config-maps.argocd-rbac-cm.data.policy\\.csv': policy
      'config-maps.argocd-cmd-params-cm.data.application\\.namespaces': 'default, argocd'
    }
  }
}

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

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

パラメーター

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

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

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

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

policy 変数は ArgoCD の argocd-rbac-cm configmap 設定です。 g, replace-me##-argocd-ui-entra-group-admin-id は、ArgoCD 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 system:serviceaccount:"argocd":"source-controller" --audience api://AzureADTokenExchange
    
  4. ソースコントローラーまたはイメージリフレクター コントローラーでプルするリソースのワークロード ID に対して、必ず適切なアクセス許可を付与します。 たとえば、Azure Container Registry を使用している場合は、 Container Registry Repository Reader ( ABAC 対応レジストリの場合) または AcrPull (ABAC 以外のレジストリの場合) が適用されていることを確認します。

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

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

ArgoCD UI にアクセスする

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

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

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

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

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

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

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

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

拡張機能を使用して ArgoCD configmap を更新することが重要であるため、設定は上書きされません。 bicep テンプレートの適用 は、構成を更新するための az cli の代替方法です。

拡張機能を削除する

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

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

次のステップ