次の方法で共有


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

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

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

先に進む前に、Flux を使用した GitOps の概念的な動作について説明します

ヒント

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

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

代わりに、新しい Microsoft GitOps ArgoCD 拡張機能を使用して試してみることを検討してください。 Argo CD は、Flux v2 とは異なる機能セットを提供する一般的なオープンソース GitOps ツールです。

前提条件

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

Azure Arc 対応 Kubernetes クラスター

Azure Kubernetes Service クラスター

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

    重要

    microsoft.flux拡張機能は SPN ベースの AKS クラスターでは機能しないため、AKS クラスターが MSI (SPN ではなく) で作成されていることを確認します。 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
    • Microsoft.KubernetesConfiguration/fluxConfigurations
  • 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 サービスでは、サポートされる新しいリージョンが定期的に追加されています。

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 flux 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 flux 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) でサポートされているパラメーターを参照してください。

ローカル シークレットの認証参照を使用する

ローカル シークレット認証参照を使用するには、 fluxConfiguration がデプロイされているのと同じ名前空間内にシークレットが存在する必要があります。 また、シークレットには、ソースに必要なすべての認証パラメーターが含まれている必要もあります。

さまざまな fluxConfiguration ソースのシークレットの作成については、「ソースを使用した 認証用のローカル シークレット」を参照してください。

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 ソースを使用する

GitRepository リソースの一部として構成した fluxConfigurations ソースに、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 

ビルド後の厳密な変数置換

ビルド後の厳密な変数 置換は、 microsoft.flux v1.13.1 以降で使用できます。

厳密な置換ポリシーを有効にして Flux 拡張機能を作成するには、次のコマンドを実行します。

az k8s-extension create --resource-group <resource-group> --cluster-name <cluster-name> --cluster-type <cluster-type> --name flux --extension-type microsoft.flux --config kustomize-controller.strict-substitution-mode=true

既存の Flux 拡張機能を更新して厳密な置換ポリシーを有効にするには、次のコマンドを実行します。

az k8s-extension update --resource-group <resource-group> --cluster-name <cluster-name> --cluster-type <cluster-type> --name flux --config kustomize-controller.strict-substitution-mode=true

垂直方向のスケーリング

microsoft.flux v1.12.0 以降では、垂直スケーリングのサポートを利用できます。 現時点では、 Flux 垂直スケーリングのドキュメント で説明されている特定のパラメーターのみがネイティブにサポートされています。 他のパラメーターは手動でクラスターに適用できます。

コントローラーのリソース制限を 現在の制限を超えて増やすには、次のコマンドを実行し、必要に応じて特定のリソースの種類と値を変更します。

az k8s-extension update --resource-group <resource-group> --cluster-name <cluster-name> --cluster-type <cluster-type> --name flux --config kustomize-controller.resources.limits.memory=2Gi kustomize-controller.resources.limits.cpu=2000m

並列で実行できる調整の数を増やすには、次のコマンドを実行します。

az k8s-extension update --resource-group <resource-group> --cluster-name <cluster-name> --cluster-type <cluster-type> --name flux --config kustomize-controller.concurrent=6 kustomize-controller.requeue-dependency=50s

インメモリ ビルドを有効にするには、次のコマンドを実行します。

az k8s-extension update --resource-group <resource-group> --cluster-name <cluster-name> --cluster-type <cluster-type> --name flux --config kustomize-controller.enable-in-memory-build=true

Helm OOM ウォッチ

microsoft.flux v1.7.5 以降では、Helm OOM ウォッチを有効にすることができます。 詳細については、「 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 です。 たとえば、log-levelsource-controllerkustomize-controller を変更するには、次のコマンドを使用します。

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-agentfluxconfig-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

Flux 拡張機能ポッドで注釈を構成する

Azure Firewall 以外のソリューションを構成する場合、AKS クラスターには ネットワークと FQDN/アプリケーションの規則 が必要です。 microsoft.flux v1.11.1 以降、Flux コントローラー ポッドは、ポッドの仕様で注釈kubernetes.azure.com/set-kube-service-host-fqdnを設定できるようになりました。 この注釈により、レイヤー 7 ファイアウォールが存在する場合でも API Server のドメイン名へのトラフィックが許可され、拡張機能のインストール中のデプロイが容易になります。 Flux 拡張機能の使用時にこの注釈を構成するには、次のコマンドを使います。

# Create flux extension with annotation

az k8s-extension create --resource-group <resource-group> --cluster-name <cluster-name> --cluster-type <cluster-type> --name flux --extension-type microsoft.flux --config setKubeServiceHostFqdn=true
    
# Update flux extension with annotation

az k8s-extension update --resource-group <resource-group> --cluster-name <cluster-name> --cluster-type <cluster-type> --name flux --config setKubeServiceHostFqdn=true

Arc 対応 Kubernetes クラスターと AKS クラスターのワークロード アイデンティティ

ワークロード ID が有効になっているクラスターで Flux 構成を作成できます。 ワークロード ID が有効になっている AKS クラスターの Flux 構成は、microsoft.flux v1.8.0 以降、およびワークロード ID が有効になっている Azure Arc 対応クラスターでは、microsoft.flux v1.15.1 以降でサポートされています。

ワークロード ID が有効になっているクラスターで Flux 構成を作成するには、次の手順に示すように拡張機能を変更します。

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

  2. マネージド ID を作成し、そのクライアント 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> workloadIdentity.azureTenantId=<tenant_id>
    
  4. 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:"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 "${OIDC_ISSUER}" --subject system:serviceaccount:"flux-system":"image-reflector-controller" --audience api://AzureADTokenExchange
    
    # For image-automation 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 "${OIDC_ISSUER}" --subject system:serviceaccount:"flux-system":"image-automation-controller" --audience api://AzureADTokenExchange
    
    # For kustomize-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:"flux-system":"kustomize-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 を使用している場合は、 Container Registry Repository Reader ( ABAC 対応レジストリの場合) または AcrPull (ABAC 以外のレジストリの場合) が適用されていることを確認します。

Azure DevOps でワークロード ID を使用する

Azure DevOps でワークロード ID を使用するには、次の前提条件を有効にします。

  • Azure DevOps 組織が Microsoft Entra に接続されていることを確認します。
  • AKS クラスターまたは Arc 対応 Kubernetes クラスターの手順に従って、クラスターでワークロード ID が適切に設定されていることを確認します。
  • このセクションで前述したように、マネージド ID とフェデレーション資格情報を作成し、Flux 拡張機能の flux コントローラー ポッドでワークロード ID を有効にします。
  • マネージド ID をユーザーとして Azure DevOps 組織に追加し、Azure DevOps リポジトリにアクセスするためのアクセス許可があることを確認します。 詳細な手順については、「 Azure DevOps でサービス プリンシパルとマネージド ID を使用する」を参照してください。

次に、flux 構成の gitRepository プロバイダーを "azure" に設定して、資格情報のない認証を有効にします。 これは、Bicep、ARM テンプレート、または Azure CLI を使用して構成できます。 たとえば、Azure CLI を使用してプロバイダーを設定するには、次のコマンドを実行します。

az k8s-configuration flux update --cluster-name <cluster-name> --resource-group <resource-group> --cluster-type <cluster-type> --name flux --provider "azure"

Azure DevOps SSH-RSA の非推奨

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

Flux 構成を調整するときに、SSH-RSA が非推奨またはサポートされていないことを示すエラー メッセージが表示されることがあります。 その場合は、source-controller コマンドを使用して Flux image-automation-controller および az k8s-extension update (有効になっている場合) から 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 終了」を参照してください。

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 を代わりに使用します。

次のステップ