チュートリアル: 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 Arc 対応 Kubernetes に接続されたクラスター。
microsoft.flux
バージョン 1.7.0 以降では、ARM64 ベースのクラスターがサポートされています。Kubernetes クラスターを Azure Arc に接続する方法を確認します。送信プロキシ経由で接続する必要がある場合は、プロキシ設定を使用して Arc エージェントをインストールするようにします。
Microsoft.Kubernetes/connectedClusters
リソースの種類に対する読み取りおよび書き込みアクセス許可。
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 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 は、
infra
とapps
という名前で指定されます。 それぞれがリポジトリ内のパスに関連付けられています。 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 構成オブジェクトを保持します。nginx
、podinfo
、redis
: Git リポジトリのマニフェストで説明されているワークロードの名前空間。
名前空間を確認するには、次のコマンドを実行します。
kubectl get namespaces
flux-system
名前空間には Flux 拡張オブジェクトが含まれています。
- Azure Flux コントローラー:
fluxconfig-agent
、fluxconfig-controller
- OSS Flux コントローラー:
source-controller
、kustomize-controller
、helm-controller
、notification-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 コントローラーを変更したい場合もあるでしょう。
source
、helm
、kustomize
、notification
の 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.enabled
をfalse
に設定します。
このコマンド例では、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 ソースを使用する
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
ビルド後の厳密な変数置換
ビルド後の厳密な変数置換は、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 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
memoryThreshold
とoutOfMemoryWatch
の値を指定しない場合、既定のメモリしきい値は 95% に設定され、メモリ使用率をチェックする間隔は 500 ミリ秒に設定されます。
構成可能なログ レベルのパラメーター
既定では、Flux コントローラーの log-level
は info
に設定されます。 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>
有効な値は、debug
、info
、または error
です。 たとえば、source-controller
と kustomize-controller
の log-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-controller
は info
および error
ログ レベルをサポートします (ただし、debug
はサポートされません)。 これらは、次のように k8s-extension コマンドを使用して変更できます。
--config fluxconfig-agent.log-level=<info/error>
--config fluxconfig-controller.log-level=<info/error>
たとえば、次のコマンドは log-level
を error
に変更します。
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 サポートの終了」を参照してください。
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
AKS クラスターのワークロード ID
microsoft.flux
v1.8.0 以降では、ワークロード ID が有効な AKS クラスターで Flux 構成を作成できます。 これを行うには、次の手順に示すように、flux 拡張機能を変更します。
クラスターの OIDC 発行者 URL を取得します。
マネージド ID を作成し、そのクライアント ID を書き留めます。
次のコマンドを使ってクラスターに 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>
フェデレーション 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 # For kustomize-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":"kustomize-controller" --audience api://AzureADTokenExchange
ワークロード 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
ソースコントローラーまたはイメージリフレクター コントローラーでプルするリソースのワークロード 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
を代わりに使用します。
次のステップ
- 詳細については、構成と GitOps に関する記事を参照してください。
- Azure Policy を使って GitOps を大規模に適用する方法に関する記事を参照してください。
- GitOps (Flux v2) の状態とアクティビティの監視について学習します。