このチュートリアルでは、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 Arc 対応 Kubernetes に接続されたクラスター。
Kubernetes クラスターを Azure Arc に接続する方法について説明します。送信プロキシ経由で接続する必要がある場合は、プロキシ 設定を使用して Arc エージェントをインストールしてください。
Microsoft.Kubernetes/connectedClusters
リソースの種類に対する読み取りおよび書き込みアクセス許可。
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 クラスターの名前です。
workloadIdentityClientId
ssoWorkloadIdentityClientId
は、ワークロード 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 資格情報を設定するには、次の手順に従います。
AKS クラスターまたは Arc 対応 Kubernetes クラスターの OIDC 発行者 URL を取得します。
マネージド ID を作成し、そのクライアント ID とテナント ID をメモします。
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
ソースコントローラーまたはイメージリフレクター コントローラーでプルするリソースのワークロード 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
次のステップ
- Azure/AKS リポジトリで問題と機能の要求をファイルし、説明またはタイトルに必ず "ArgoCD" という単語を含めるようにします。
- Backstage と Azure 用クラスター API プロバイダー (CAPZ) または Crossplane を使用して OSS ArgoCD をデプロイする AKS-Platform エンジニアリング コード サンプルをご確認ください。