共用方式為


教學課程: 使用 GitOps 搭配 Flux v2 部署應用程式

本教學課程說明如何在 Kubernetes 叢集中使用 GitOps。 在已啟用 Azure Arc 的 Kubernetes 叢集或 Azure Kubernetes Service (AKS) 叢集中,搭配 Flux v2 的 GitOps 已啟用作為叢集延伸模組microsoft.flux 叢集延伸模組安裝之後,您可以建立一或多個 fluxConfigurations 資源,將 Git 存放庫來源同步至叢集,並協調叢集至所需的狀態。 搭配 GitOps,可讓您使用 Git 存放庫做為叢集設定和應用程式部署的事實來源。

在本教學課程中,我們會使用範例 GitOps 設定搭配兩個 kustomizations,讓您了解一個 kustomization 如何與另一個有相依性。 根據案例,您可以視需要新增更多 kustomization 和相依性。

在深入探討之前,請花點時間了解搭配 Flux 的 GitOps 在概念上如何運作

提示

雖然本教學課程中的來源是 Git 存放庫,但 Flux 也提供其他常見檔案來源的支援,例如 Helm 存放庫、貯體和 Azure Blob 儲存體。

您也可以使用 Bicep、ARM 範本或 Terraform AzAPI 提供者來建立 Flux 設定。 如需詳細資訊,請參閱 Microsoft.KubernetesConfiguration fluxConfigurations

重要

microsoft.flux 延伸模組已發行主要版本 1.0.0。 這包括多租用戶功能。 如果您現有的 GitOps Flux v2 設定使用舊版 microsoft.flux 延伸模組,您可以使用 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 叢集已啟動並執行。

    重要

    請確定 AKS 叢集是使用 MSI (而非 SPN) 所建立,因為 microsoft.flux 延伸模組不會與 SPN 型 AKS 叢集搭配運作。 針對使用 az aks create 所建立的新 AKS 叢集,叢集預設會是 MSI 型叢集。 針對需要轉換成 MSI 的已建立 SPN 型叢集,請執行 az aks update -g $RESOURCE_GROUP -n $CLUSTER_NAME --enable-managed-identity。 如需詳細資訊,請參閱在 AKS 中使用受控識別

  • 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
    

版本和區域支援

已啟用 Azure Arc 的 Kubernetes 所支援的所有區域目前都支援 GitOps。 AKS 所支援的區域子集目前支援 GitOps。 GitOps 服務會定期新增支援的區域。

支援最新版的 Flux v2 延伸模組和兩個舊版 (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 延伸模組

安裝最新的 k8s-configurationk8s-extension CLI 延伸模組套件:

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

套用 Flux 設定

使用 k8s-configuration Azure CLI 延伸模組或 Azure 入口網站,在 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 範圍,請參閱所需的變更
  • 兩個 kustomization 會以名稱指定為 infraapps。 每個都與存放庫中的路徑相關聯。
  • appsKustomization 取決於 infra kustomization。 (infra kustomization 必須在 apps kustomization 執行之前完成。)
  • 在兩個 kustomizations 上設定 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 設定時,初始合規性狀態可能為 PendingNon-compliant,因為協調仍在進行中。 約一分鐘後,請再次查詢設定,以查看最終的合規性狀態。

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 代理程式和控制器 Pod 應該處於執行中狀態。 使用下列命令確認這一點:

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-automationimage-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-reflectorimage-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

使用 Kubelet 身分識別作為 AKS 叢集的驗證方法

對於 AKS 叢集,要使用的驗證選項之一為 kubelet 身分識別。 根據預設,AKS 在受控資源群組中建立自己的 kubelet 身分識別。 如果您想要,您可以使用預先建立的 kubelet 受控識別。 若要這樣做,請在 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 控制器需要非根資訊安全內容限制式,才能在叢集上正確佈建 Pod。 這些限制式必須先新增至叢集,才能部署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 圖表可能會導致記憶體尖峰和 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 來源

如果您的 Helm 圖表儲存在您設定為 fluxConfigurations 資源之一部分的 GitRepository 來源中,您可以藉由將 clusterconfig.azure.com/use-managed-source: "true" 新增至 HelmRelease.yaml 檔案,來指出所設定的來源應該作為 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 監看式

microsoft.flux v1.7.5開始,您可以啟用 Helm OOM 監看式。 如需詳細資訊,請參閱啟用近 OOM 偵測的 Helm

請務必檢閱潛在的補救策略,並在啟用此功能時視需要套用它們。

若要啟用 OOM 監看式,請執行下列命令:

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

有效值為 debuginfoerror。 例如,若要變更 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-agentfluxconfig-controller 支援 infoerror 記錄層級 (但不支援 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-RSA 作為使用 SSH 連線到 Azure 存放庫的支援加密方法。 如果您使用 SSH 金鑰連線到 Flux 設定中的 Azure 存放庫,建議您移至更安全的 RSA-SHA2-256 或 RSA-SHA2-512 密鑰。

重新協調 Flux 設定時,您可能會看到錯誤訊息,指出 ssh-rsa 即將淘汰或不受支援。 如果是,請使用 az k8s-extension update 命令更新用於建立 Flux source-controllerimage-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 延伸模組 Pod 上設定註釋

設定 Azure 防火牆以外的解決方案時,AKS 叢集需要網路和 FQDN/應用程式規則。 從 microsoft.flux v1.11.1 開始,Flux 控制器 Pod 現在可以在其 Pod 規格中設定註釋 kubernetes.azure.com/set-kube-service-host-fqdn。 這可讓流量流向 API Server 的網域名稱,即使第 7 層防火牆存在,也有助於在延伸模組安裝期間進行部署。 若要在使用 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 叢集中的工作負載身分識別

microsoft.flux v1.8.0開始,您可以在已啟用工作負載身分識別的 AKS 叢集中建立 Flux 設定。 若要這樣做,請修改 flux 延伸模組,如下列步驟所示。

  1. 擷取叢集的 OIDC 簽發者 URL

  2. 建立受控識別並記下其用戶端識別碼。

  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. 建立同盟身分識別認證。 例如:

    # 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
    
  5. 請確定需要使用工作負載身分識別的自訂資源已將.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. 請務必為您想要 source-controller 或image-reflector 控制器提取的資源提供適當的工作負載身分識別權限。 例如,如果使用 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

下一步