教學課程: 使用 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 Arc 的 Kubernetes 已連線叢集已啟動並執行。 從
microsoft.flux
1.7.0 版開始,支援 ARM64 型叢集。了解如何將 Kubernetes 叢集連線到 Azure Arc。如果您需要透過輸出 Proxy 進行連線,則請確定使用 Proxy 設定來安裝 Arc 代理程式。
Microsoft.Kubernetes/connectedClusters
資源類型的讀取和寫入權限。
針對 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-configuration
和 k8s-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
提示
如需解決任何錯誤的協助,請參閱針對已啟用 Azure Arc 的 Kubernetes 叢集的延伸模組問題進行疑難排解的 GitOps (Flux v2) 一節。
套用 Flux 設定
使用 k8s-configuration
Azure CLI 延伸模組或 Azure 入口網站,在 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
範圍,請參閱所需的變更。 - 兩個 kustomization 會以名稱指定為
infra
和apps
。 每個都與存放庫中的路徑相關聯。 apps
Kustomization 取決於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 flux create
命令會將 microsoft.flux
延伸模組部署至叢集,並建立設定。 在某些案例下,您可能想要在建立設定資源之前,個別建立 flux 延伸模組執行個體。 若要這樣做,請使用 az k8s-extension create
命令,在叢集上建立延伸模組的執行個體。
第一次安裝 flux 設定時,初始合規性狀態可能為 Pending
或 Non-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 設定物件。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 代理程式和控制器 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 叢集延伸模組安裝。
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
使用 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
嚴格建置後變數替代
從 v1.13.1 開始,即可使用microsoft.flux
嚴格的建置後變數替代。
若要建立已啟用嚴格替代原則的 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 監看式,請執行下列命令:
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-RSA 作為使用 SSH 連線到 Azure 存放庫的支援加密方法。 如果您使用 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 延伸模組 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 延伸模組,如下列步驟所示。
擷取叢集的 OIDC 簽發者 URL。
建立受控識別並記下其用戶端識別碼。
使用下列命令在叢集上建立 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>
建立同盟身分識別認證。 例如:
# 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
請確定需要使用工作負載身分識別的自訂資源已將
.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
請務必為您想要 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
。
下一步
- 閱讀有關設定與 GitOps 的其他資訊。
- 了解如何使用 Azure 原則來大規模執行 GitOps。
- 了解監視 GitOps (Flux v2) 狀態和活動。