チュートリアル: GitOps with Flux v2 を使ってアプリケーションをデプロイする

このチュートリアルでは、Kubernetes クラスターで GitOps を使用する方法について説明します。 GitOps with Flux v2 は、Azure Arc 対応 Kubernetes クラスターまたは Azure Kubernetes Service (AKS) クラスターでクラスター拡張機能として有効になります。 microsoft.flux クラスター拡張機能をインストールしたら、Git リポジトリ ソースをクラスターに同期する 1 つ以上の fluxConfigurations リソースを作成し、クラスターを目的の状態に調整できます。 GitOps を使用すると、クラスター構成とアプリケーションのデプロイの正しいソースとして Git リポジトリを使用できます。

このチュートリアルでは、2 つの kustomization を持つ GitOps 構成の例を使って、ある kustomization が別の kustomization にどう依存するかがわかるようにします。 必要であればさらに kustomization と依存関係を、シナリオに応じて追加できます。

始める前に、少し時間を取って Flux を使用した GitOps の概念的な動作について学習します

ヒント

このチュートリアルのソースは Git リポジトリですが、Flux では Helm リポジトリ、Buckets、Azure Blob Storage などの他の一般的なファイル ソースもサポートされています。

Bicep、ARM テンプレート、または Terraform AzAPI プロバイダーを使用して Flux 構成を作成することもできます。 詳細については、「Microsoft.KubernetesConfiguration fluxConfigurations」を参照してください。

重要

この microsoft.flux 拡張機能はメジャー バージョン 1.0.0 をリリースしました。 これには、マルチテナント機能が含まれます。 以前のバージョンの microsoft.flux 拡張機能を使っている既存の GitOps Flux v2 構成がある場合は、Azure CLI (az k8s-extension create -g <RESOURCE_GROUP> -c <CLUSTER_NAME> -n flux --extension-type microsoft.flux -t <CLUSTER_TYPE>) を使って手動で最新のバージョンにアップグレードできます (Arc クラスターの場合は -t connectedClusters を、AKS クラスターの場合は -t managedClusters を使います)。

前提条件

GitOps を Flux v2 と合わせて使用してアプリケーションをデプロイするには次のものが必要です。

Azure Arc 対応 Kubernetes クラスターの場合

Azure Kubernetes Service クラスターの場合

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

    重要

    microsoft.flux 拡張機能は SPN ベースの AKS クラスターでは機能しないので、AKS クラスターが (SPN ではなく) MSI で作成されるようにしてください。 az aks create で作成された新しい AKS クラスターの場合、クラスターは既定で MSI ベースです。 MSI に変換する必要がある既に作成された SPN ベースのクラスターの場合は、az aks update -g $RESOURCE_GROUP -n $CLUSTER_NAME --enable-managed-identity を実行します。 詳細については、AKS でのマネージド ID の使用に関するページを参照してください。

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

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

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

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

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

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

    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 サービスでは、サポートされる新しいリージョンが定期的に追加されています。

Flux v2 拡張機能の最新バージョンと、前の 2 つのバージョン (N-2) がサポートされています。 一般的に、拡張機能の最新バージョンを使用することをお勧めします。

ネットワークの要件

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 Flux コントローラー用のコンテナー イメージをプルするために必要です。

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.2.7
False          whl             k8s-configuration      C:\Users\somename\.azure\cliextensions\k8s-configuration    False     1.5.0
False          whl             k8s-extension          C:\Users\somename\.azure\cliextensions\k8s-extension        False     1.1.0

ヒント

エラーの解決については、Azure Arc 対応 Kubernetes クラスターの拡張機能の問題のトラブルシューティングに関する記事の GitOps (Flux v2) セクションを参照してください。

Flux の構成を適用

k8s-configuration Azure CLI 拡張機能または Azure portal を使用して AKS または Arc 対応 Kubernetes クラスターで GitOps を有効にします。 デモの場合は、パブリック gitops-flux2-kustomize-helm-mt リポジトリを使用します。

重要

デモンストレーション リポジトリは、このチュートリアルの使用を単純化し、いくつかの重要な原則を例示する目的で設計されています。 最新の状態を維持するために、リポジトリには、バージョンのアップグレードによる破壊的変更が生じる場合があります。 それらの変更がこのチュートリアルの新しいアプリケーションに影響することはありませんが、まだ削除されていない以前のチュートリアル アプリケーションはその影響を受けます。 それらの変更への対応方法については、破壊的変更の免責事項を参照してください。

次の例では、示された値と設定を使用し、az k8s-configuration create コマンドを使用して Flux 構成をクラスターに適用しています。

  • クラスターが含まれているリソース グループは flux-demo-rg です。
  • Azure Arc クラスターの名前は flux-demo-arc です。
  • クラスターの種類は Azure Arc (-t connectedClusters) ですが、この例は AKS (-t managedClusters) でも動作します。
  • Flux 構成の名前は cluster-config です。
  • 構成インストールの名前空間は cluster-config です。
  • パブリック Git リポジトリの URL は https://github.com/Azure/gitops-flux2-kustomize-helm-mt です。
  • Git リポジトリ ブランチは main です。
  • 構成のスコープは cluster です。 このスコープは、オペレーターにクラスター全体で変更を行う権限を付与します。 このチュートリアルで namespace スコープを使用するには、必要な変更を参照してください。
  • 2 つの kustomization は、infraapps という名前で指定されます。 それぞれがリポジトリ内のパスに関連付けられています。
  • apps kustomization は infra kustomization に依存します。 (infra kustomization は apps kustomization の実行前に終了する必要があります。)
  • 両方の kustomization で prune=true を設定します。 この設定により、Flux がクラスターにデプロイしたオブジェクトが、それらがリポジトリから削除されたり、Flux の構成や kustomization が削除されたりした場合に、確実にクリーンアップされることが保証されます。
az k8s-configuration flux create -g flux-demo-rg \
-c flux-demo-arc \
-n cluster-config \
--namespace cluster-config \
-t connectedClusters \
--scope cluster \
-u https://github.com/Azure/gitops-flux2-kustomize-helm-mt \
--branch main  \
--kustomization name=infra path=./infrastructure prune=true \
--kustomization name=apps path=./apps/staging prune=true dependsOn=\["infra"\]

microsoft.flux 拡張機能はクラスターにインストールされます (以前の GitOps デプロイにまだインストールされていない場合)。

ヒント

az k8s-configuration create コマンドは microsoft.flux 拡張機能をクラスターにデプロイし、構成を作成します。 シナリオによっては、構成リソースを作成する前に、Flux 拡張機能のインスタンスを個別に作成することが必要な場合があります。 これを行うには、az k8s-extension create コマンドを使用してクラスター上に拡張機能のインスタンスを作成します。

flux 構成が事前にインストールされている場合、調整がまだ進行中であるため、初期コンプライアンス状態は Pending または Non-compliant である可能性があります。 約 1 分後に、構成に対して再度クエリを実行し、最終的なコンプライアンスの状態を確認します。

az k8s-configuration flux show -g flux-demo-rg -c flux-demo-arc -n cluster-config -t connectedClusters

デプロイが成功したことを確認するには、次のコマンドを実行します。

az k8s-configuration flux show -g flux-demo-rg -c flux-demo-arc -n cluster-config -t connectedClusters

デプロイに成功すると、以下の名前空間が作成されます。

  • flux-system: Flux 拡張機能コントローラーを保持します。
  • cluster-config: Flux 構成オブジェクトを保持します。
  • nginxpodinforedis: Git リポジトリのマニフェストで説明されているワークロードの名前空間。

名前空間を確認するには、次のコマンドを実行します。

kubectl get namespaces

flux-system 名前空間には Flux 拡張オブジェクトが含まれています。

  • Azure Flux コントローラー: fluxconfig-agentfluxconfig-controller
  • OSS Flux コントローラー: source-controllerkustomize-controllerhelm-controllernotification-controller

Flux エージェントおよびコントローラー ポッドは実行中状態である必要があります。 次のコマンドを使ってこれを確認します。

kubectl get pods -n flux-system

NAME                                      READY   STATUS    RESTARTS   AGE
fluxconfig-agent-9554ffb65-jqm8g          2/2     Running   0          21m
fluxconfig-controller-9d99c54c8-nztg8     2/2     Running   0          21m
helm-controller-59cc74dbc5-77772          1/1     Running   0          21m
kustomize-controller-5fb7d7b9d5-cjdhx     1/1     Running   0          21m
notification-controller-7d45678bc-fvlvr   1/1     Running   0          21m
source-controller-df7dc97cd-4drh2         1/1     Running   0          21m

名前空間 cluster-config には Flux 構成オブジェクトがあります。

kubectl get crds

NAME                                                   CREATED AT
alerts.notification.toolkit.fluxcd.io                  2022-04-06T17:15:48Z
arccertificates.clusterconfig.azure.com                2022-03-28T21:45:19Z
azureclusteridentityrequests.clusterconfig.azure.com   2022-03-28T21:45:19Z
azureextensionidentities.clusterconfig.azure.com       2022-03-28T21:45:19Z
buckets.source.toolkit.fluxcd.io                       2022-04-06T17:15:48Z
connectedclusters.arc.azure.com                        2022-03-28T21:45:19Z
customlocationsettings.clusterconfig.azure.com         2022-03-28T21:45:19Z
extensionconfigs.clusterconfig.azure.com               2022-03-28T21:45:19Z
fluxconfigs.clusterconfig.azure.com                    2022-04-06T17:15:48Z
gitconfigs.clusterconfig.azure.com                     2022-03-28T21:45:19Z
gitrepositories.source.toolkit.fluxcd.io               2022-04-06T17:15:48Z
helmcharts.source.toolkit.fluxcd.io                    2022-04-06T17:15:48Z
helmreleases.helm.toolkit.fluxcd.io                    2022-04-06T17:15:48Z
helmrepositories.source.toolkit.fluxcd.io              2022-04-06T17:15:48Z
imagepolicies.image.toolkit.fluxcd.io                  2022-04-06T17:15:48Z
imagerepositories.image.toolkit.fluxcd.io              2022-04-06T17:15:48Z
imageupdateautomations.image.toolkit.fluxcd.io         2022-04-06T17:15:48Z
kustomizations.kustomize.toolkit.fluxcd.io             2022-04-06T17:15:48Z
providers.notification.toolkit.fluxcd.io               2022-04-06T17:15:48Z
receivers.notification.toolkit.fluxcd.io               2022-04-06T17:15:48Z
volumesnapshotclasses.snapshot.storage.k8s.io          2022-03-28T21:06:12Z
volumesnapshotcontents.snapshot.storage.k8s.io         2022-03-28T21:06:12Z
volumesnapshots.snapshot.storage.k8s.io                2022-03-28T21:06:12Z
websites.extensions.example.com                        2022-03-30T23:42:32Z

他の構成の詳細は、次のコマンドを使って確認します。

kubectl get fluxconfigs -A

NAMESPACE        NAME             SCOPE     URL                                                       PROVISION   AGE
cluster-config   cluster-config   cluster   https://github.com/Azure/gitops-flux2-kustomize-helm-mt   Succeeded   44m
kubectl get gitrepositories -A

NAMESPACE        NAME             URL                                                       READY   STATUS                                                            AGE
cluster-config   cluster-config   https://github.com/Azure/gitops-flux2-kustomize-helm-mt   True    Fetched revision: main/4f1bdad4d0a54b939a5e3d52c51464f67e474fcf   45m
kubectl get helmreleases -A

NAMESPACE        NAME      READY   STATUS                             AGE
cluster-config   nginx     True    Release reconciliation succeeded   66m
cluster-config   podinfo   True    Release reconciliation succeeded   66m
cluster-config   redis     True    Release reconciliation succeeded   66m
kubectl get kustomizations -A


NAMESPACE        NAME                   READY   STATUS                                                            AGE
cluster-config   cluster-config-apps    True    Applied revision: main/4f1bdad4d0a54b939a5e3d52c51464f67e474fcf   65m
cluster-config   cluster-config-infra   True    Applied revision: main/4f1bdad4d0a54b939a5e3d52c51464f67e474fcf   65m

ワークロードは、Git リポジトリのマニフェストからデプロイされます。

kubectl get deploy -n nginx

NAME                                       READY   UP-TO-DATE   AVAILABLE   AGE
nginx-ingress-controller                   1/1     1            1           67m
nginx-ingress-controller-default-backend   1/1     1            1           67m

kubectl get deploy -n podinfo

NAME      READY   UP-TO-DATE   AVAILABLE   AGE
podinfo   1/1     1            1           68m

kubectl get all -n redis

NAME                 READY   STATUS    RESTARTS   AGE
pod/redis-master-0   1/1     Running   0          68m

NAME                     TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)    AGE
service/redis-headless   ClusterIP   None          <none>        6379/TCP   68m
service/redis-master     ClusterIP   10.0.13.182   <none>        6379/TCP   68m

NAME                            READY   AGE
statefulset.apps/redis-master   1/1     68m

Flux クラスター拡張機能を使用してデプロイするコントローラーを制御する

シナリオによっては、Flux クラスター拡張機能と一緒にインストールされる Flux コントローラーを変更したい場合もあるでしょう。

sourcehelmkustomizenotification の Flux コントローラーが既定でインストールされます。 新しいコンテナー イメージが使用可能になったときに Git リポジトリを更新するために使用される image-automation および image-reflector コントローラー は、明示的に有効にする必要があります。

k8s-extension コマンドを使用して、既定のオプションを変更できます。

  • --config source-controller.enabled=<true/false> (既定値: true)
  • --config helm-controller.enabled=<true/false> (既定値: true)
  • --config kustomize-controller.enabled=<true/false> (既定値: true)
  • --config notification-controller.enabled=<true/false> (既定値: true)
  • --config image-automation-controller.enabled=<true/false> (既定値: false)
  • --config image-reflector-controller.enabled=<true/false> (既定値: false)

たとえば、通知を無効にするには、notification-controller.enabledfalse に設定します。

このコマンド例では、image-reflector コントローラーと image-automation コントローラーをインストールします。 Flux 構成を最初に作成したときに Flux 拡張機能が自動的に作成された場合、拡張機能名は flux です。

az k8s-extension create -g <cluster_resource_group> -c <cluster_name> -t <connectedClusters or managedClusters or provisionedClusters> --name flux --extension-type microsoft.flux --config image-automation-controller.enabled=true image-reflector-controller.enabled=true

AKS クラスターの認証方法として Kubelet ID を使用する

AKS クラスターの場合、使用するべき認証の選択肢の 1 つは kubelet ID です。 既定では、AKS はマネージド リソース グループに独自の kubelet ID を作成します。 必要に応じて、事前に作成された kubelet マネージド ID を使用できます。 そのためには、Flux 拡張機能のインストール時にパラメーター --config useKubeletIdentity=true を追加してください。

az k8s-extension create --resource-group <resource-group> --cluster-name <cluster-name> --cluster-type managedClusters --name flux --extension-type microsoft.flux --config useKubeletIdentity=true

Red Hat OpenShift のオンボード ガイダンス

Flux コントローラーでは、クラスターでポッドを適切にプロビジョニングするには 非ルートセキュリティ コンテキスト制約 が必要です。 これらの制約は、microsoft.flux拡張機能をオンボードする前にクラスターに追加する必要があります。

NS="flux-system"
oc adm policy add-scc-to-user nonroot system:serviceaccount:$NS:kustomize-controller
oc adm policy add-scc-to-user nonroot system:serviceaccount:$NS:helm-controller
oc adm policy add-scc-to-user nonroot system:serviceaccount:$NS:source-controller
oc adm policy add-scc-to-user nonroot system:serviceaccount:$NS:notification-controller
oc adm policy add-scc-to-user nonroot system:serviceaccount:$NS:image-automation-controller
oc adm policy add-scc-to-user nonroot system:serviceaccount:$NS:image-reflector-controller

Flux のオンボードに関する OpenShift ガイダンスの詳細については、「Flux のドキュメント」を参照してください。

パラメーターを操作する

Flux は、さまざまなシナリオを実現する多くのパラメーターをサポートしています。 Flux でサポートされるすべてのパラメーターの説明については、Flux 公式ドキュメントを参照してください。 Azure の Flux では、まだすべてのパラメーターをサポートしているわけではありません。 必要なパラメーターが Azure の実装にない場合はお知らせください。

使用可能なパラメーターとその使用方法については、「GitOps (Flux v2) でサポートされているパラメーター」を参照してください。

Flux Kustomize コントローラーを使用してクラスター構成を管理する

Flux Kustomize コントローラーは、microsoft.flux クラスター拡張機能の一部としてインストールされます。 これにより、Git リポジトリから同期される Kubernetes マニフェストを使用して、クラスター構成とアプリケーションのデプロイの宣言型管理を行うことができます。 これらの Kubernetes マニフェストには、必要に応じて kustomize.yaml ファイルを含めることができます。

使用法の詳細については、次のリソースを参照してください。

Flux Helm コントローラーを使用して、Helm チャートのリリースを管理する

Flux Helm コントローラーは、microsoft.flux クラスター拡張機能の一部としてインストールされます。 これにより、Git リポジトリで保持する Kubernetes マニフェストを使用して、Helm チャートのリリースを宣言によって管理できます。

使用法の詳細については、次のリソースを参照してください。

ヒント

Helm のインデックス ファイル処理の仕様上、Helm チャートの処理は負荷の大きい操作であり、メモリ占有領域が非常に大きくなる場合があります。 その結果、一度に多数の Helm chart を調整すると、メモリ スパイクと OOMKilled エラーが発生する可能性があります。 既定では、コントローラーによってそのメモリの上限は 1Gi に、またメモリ要求は 64Mi に設定されます。 調整する Helm チャートが大量にあるために、上限および要求を引き上げるには、microsoft.flux 拡張機能のインストール後に次のコマンドを実行してください。

az k8s-extension update -g <resource-group> -c <cluster-name> -n flux -t connectedClusters --config source-controller.resources.limits.memory=2Gi source-controller.resources.requests.memory=300Mi

Helm チャートに GitRepository ソースを使用する

fluxConfigurations リソースの一部として構成した GitRepository ソースに、Helm チャートが格納されている場合は、次の例のように HelmRelease の .yaml ファイルに clusterconfig.azure.com/use-managed-source: "true" を追加することで、Helm チャートのソースとして構成されたソースを使用する必要があることを指示できます。

---
apiVersion: helm.toolkit.fluxcd.io/v2beta1
kind: HelmRelease
metadata:
  name: somename
  namespace: somenamespace
  annotations:
    clusterconfig.azure.com/use-managed-source: "true"
spec:
  ...

この注釈を使用すると、デプロイされた HelmRelease には構成されたソースへの参照を使用してパッチが適用されます。 現時点では、GitRepository ソースのみがサポートされています。

Helm ドリフト検出

Helm リリースのドリフト検出は、既定では有効になっていません。 microsoft.flux v1.7.5 以降では、次のコマンドを実行して Helm ドリフト検出を有効にすることができます。

az k8s-extension update --resource-group <resource-group> --cluster-name <cluster-name> --name flux --cluster-type <cluster-type> --config helm-controller.detectDrift=true 

Helm OOM watch

microsoft.flux v1.7.5 以降では、Helm OOM watchを有効にすることができます。 詳細については、「OOM 検出の近くで Helm を有効にする」をご覧ください。

この機能を有効にする場合は、潜在的な修復戦略を確認し、必要に応じて適用してください。

OOM watch を有効にするには、次のコマンドを実行します。

az k8s-extension update --resource-group <resource-group> --cluster-name <cluster-name> --name flux --cluster-type <cluster-type> --config helm-controller.outOfMemoryWatch.enabled=true helm-controller.outOfMemoryWatch.memoryThreshold=70 helm-controller.outOfMemoryWatch.interval=700ms

memoryThresholdoutOfMemoryWatchの値を指定しない場合、既定のメモリしきい値は 95% に設定され、メモリ使用率をチェックする間隔は 500 ミリ秒に設定されます。

構成可能なログ レベルのパラメーター

既定では、Flux コントローラーの log-levelinfo に設定されます。 microsoft.flux v1.8.3 以降、次のように k8s-extension コマンドを使用してこれらの既定の設定を変更できます。

--config helm-controller.log-level=<info/error/debug>
--config source-controller.log-level=<info/error/debug>
--config kustomize-controller.log-level=<info/error/debug>
--config notification-controller.log-level=<info/error/debug>
--config image-automation-controller.log-level=<info/error/debug>
--config image-reflector-controller.log-level=<info/error/debug>

有効な値は、debuginfo、または error です。 たとえば、source-controllerkustomize-controllerlog-level を変更するには、次のコマンドを使用します。

az k8s-extension update --resource-group <resource-group> --cluster-name <cluster-name> --cluster-type <cluster-type> --name flux --config source-controller.log-level=error kustomize-controller.log-level=error

microsoft.flux v1.9.1 以降、fluxconfig-agent および fluxconfig-controllerinfo および error ログ レベルをサポートします (ただし、debug はサポートされません)。 これらは、次のように k8s-extension コマンドを使用して変更できます。

--config fluxconfig-agent.log-level=<info/error>
--config fluxconfig-controller.log-level=<info/error>

たとえば、次のコマンドは log-levelerror に変更します。

az k8s-extension update --resource-group <resource-group> --cluster-name <cluster-name> --cluster-type <cluster-type> --name flux --config fluxconfig-agent.log-level=error fluxconfig-controller.log-level=error

Azure DevOps SSH-RSA の非推奨

Azure DevOps は、SSH を使用して Azure リポジトリに接続するためにサポートされている暗号化方法として、SSH-RSA が非推奨になったことを発表しました。 SSH キーを使用して Flux 構成の Azure リポジトリに接続する場合は、より安全な RSA-SHA2-256 または RSA-SHA2-512 キーに移行することをお勧めします。

Flux 構成を調整するときに、SSH-RSA が非推奨またはサポートされていないことを示すエラー メッセージが表示されることがあります。 その場合は、az k8s-extension update コマンドを使用して Flux source-controller および image-automation-controller (有効になっている場合) から Azure DevOps リポジトリへの SSH 接続を確立するために使用するホスト キー アルゴリズムを更新してください。 次に例を示します。

az k8s-extension update --cluster-name <cluster-name> --resource-group <resource-group> --cluster-type <cluster-type> --name flux --config source-controller.ssh-host-key-args="--ssh-hostkey-algos=rsa-sha2-512,rsa-sha2-256"

az k8s-extension update --cluster-name <cluster-name> --resource-group <resource-group> --cluster-type <cluster-type> --name flux --config image-automation-controller.ssh-host-key-args="--ssh-hostkey-algos=rsa-sha2-512,rsa-sha2-256"

Azure DevOps SSH-RSA の非推奨の詳細については、「Azure Repos の SSH-RSA サポートの終了」を参照してください。

AKS クラスターのワークロード ID

microsoft.flux v1.8.0 以降では、ワークロード ID が有効な AKS クラスターで Flux 構成を作成できます。 これを行うには、次の手順に示すように、flux 拡張機能を変更します。

  1. クラスターの OIDC 発行者 URL を取得します。

  2. マネージド ID を作成し、そのクライアント ID を書き留めます。

  3. 次のコマンドを使ってクラスターに flux 拡張機能を作成します。

    az k8s-extension create --resource-group <resource_group_name> --cluster-name <aks_cluster_name> --cluster-type managedClusters --name flux --extension-type microsoft.flux --config workloadIdentity.enable=true workloadIdentity.azureClientId=<user_assigned_client_id>
    
  4. フェデレーション 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 "${AKS_OIDC_ISSUER}" --subject system:serviceaccount:"flux-system":"source-controller" --audience api://AzureADTokenExchange
    
    # For image-reflector controller if you plan to enable it during extension creation, it is not deployed by default
    az identity federated-credential create --name ${FEDERATED_IDENTITY_CREDENTIAL_NAME} --identity-name "${USER_ASSIGNED_IDENTITY_NAME}" --resource-group "${RESOURCE_GROUP}" --issuer "${AKS_OIDC_ISSUER}" --subject system:serviceaccount:"flux-system":"image-reflector-controller" --audience api://AzureADTokenExchange
    
  5. ワークロード ID を使う必要があるカスタム リソースで、必ずマニフェストの .spec.provider 値を azure に設定します。 次に例を示します。

    apiVersion: source.toolkit.fluxcd.io/v1beta2
    kind: HelmRepository
    metadata:
      name: acrrepo
    spec:
      interval: 10m0s
      type: <helm_repository_type>
      url: <helm_repository_link>
      provider: azure
    
  6. ソースコントローラーまたはイメージリフレクター コントローラーでプルするリソースのワークロード ID に対して、必ず適切なアクセス許可を付与します。 たとえば、Azure Container Registry を使う場合は、AcrPull アクセス許可が必要です。

Flux の構成と拡張機能を削除する

次のコマンドを使って、Flux の構成と、必要に応じて Flux 拡張機能自体を削除します。

Flux 構成を削除する

次のコマンドは、Azure 内の fluxConfigurations リソースとクラスター内の Flux 構成オブジェクトの両方を削除します。 Flux 構成はもともと kustomization の prune=true パラメーターを使用して作成されたため、Flux 構成が削除されると、Git リポジトリのマニフェストに基づいてクラスター内に作成されたオブジェクトはすべて削除されます。 しかし、このコマンドは Flux 拡張機能自体は削除しません。

az k8s-configuration flux delete -g flux-demo-rg -c flux-demo-arc -n cluster-config -t connectedClusters --yes

Flux クラスター拡張機能を削除する

Flux 拡張機能を削除すると、Azure 内の microsoft.flux 拡張機能リソースとクラスター内の Flux 拡張機能オブジェクトの両方が削除されます。

重要

Flux 拡張機能を削除する前に、クラスター内のすべての Flux 構成を削除してください。 Flux 構成を最初に削除せずに拡張機能を削除すると、クラスターが不安定な状態になる可能性があります。

Flux 構成を最初に作成したときに Flux 拡張機能が自動的に作成された場合、拡張機能名は flux になります。

az k8s-extension delete -g flux-demo-rg -c flux-demo-arc -n flux -t connectedClusters --yes

ヒント

これらのコマンドで使用する -t connectedClusters は、Azure Arc 対応 Kubernetes クラスターに適しています。 AKS クラスターの場合は、-t managedClusters を代わりに使用します。

次のステップ