Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
本教程介绍如何在 Kubernetes 群集中使用 GitOps。 具有 Flux v2 的 GitOps 是cluster 扩展,适用于已启用 Azure Arc 的 Kubernetes 群集或Azure Kubernetes Service (AKS)群集。 安装 microsoft.flux 群集扩展后,可以创建一个或多个 fluxConfigurations 资源,用于将 Git 存储库源同步到群集,并将群集与所需状态协调。 通过使用 GitOps,可以使用 Git 存储库作为群集配置和应用程序部署的真相来源。
在本教程中,你将使用包含两个 kustomization 的示例 GitOps 配置,以便了解一个 kustomization 如何依赖于另一个 kustomization。 可以根据需要添加更多自定义和依赖项,具体取决于你的方案。
在开始之前,请花点时间了解 GitOps with Flux 在概念上的工作原理。
提示
虽然本教程中的源是 Git 存储库,但 Flux 还提供对其他常见文件源(如 Helm 存储库、存储桶和Azure Blob Storage)的支持。
还可以使用 Bicep、ARM 模板或 Terraform AzAPI 提供程序创建 Flux 配置。 有关详细信息,请参阅 Microsoft.KubernetesConfiguration fluxConfigurations。
请考虑尝试新的 Microsoft GitOps ArgoCD 扩展。 Argo CD 是一种常用的开源 GitOps 工具,与 Flux v2 相比,该工具提供了一组不同的特性和功能。
先决条件
若要将 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 群集。
重要
确保使用 MSI(而不是 SPN)创建 AKS 群集,因为
microsoft.flux扩展不适用于基于 SPN 的 AKS 群集。 对于使用az aks create创建的新 AKS 群集,群集默认基于 MSI。 若要将基于 SPN 的群集转换为 MSI,请运行az aks update -g $RESOURCE_GROUP -n $CLUSTER_NAME --enable-managed-identity。 有关详细信息,请参阅在 AKS 中使用托管标识。对
Microsoft.ContainerService/managedClusters资源类型的读写权限。
对这两种群集类型通用
对这些资源类型的读取和写入权限:
Microsoft.KubernetesConfiguration/extensionsMicrosoft.KubernetesConfiguration/fluxConfigurations
Azure CLI 2.15 或更高版本。 安装 Azure CLI 或使用以下命令更新到最新版本:
az version az upgradeKubernetes 命令行客户端 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
版本和区域支持
在所有Azure Arc支持的启用Kubernetes的区域, 目前都支持GitOps。 目前,AKS 所支持的一部分区域支持 GitOps。 GitOps 服务会定期添加新的受支持区域。
支持 Flux v2 扩展的最新版本和前两个版本 (N-2)。 我们通常建议使用最新版本的扩展。
网络要求
GitOps 代理必须通过出站(出口)TCP 连接到端口 22 (SSH) 或端口 443 (HTTPS) 上的存储库源才能正常运行。 代理还需要对以下出站 URL 的访问权限:
| 终结点 (DNS) | 说明 |
|---|---|
https://management.chinacloudapi.cn |
所需条件是代理能够与 Kubernetes 配置服务通信。 |
https://<region>.dp.kubernetesconfiguration.azure.cn |
代理的数据平面终结点,用于推送状态和提取配置信息。 取决于 <region>(前面提到的受支持区域)。 |
https://login.chinacloudapi.cn |
所需用于提取和更新 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
应用 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范围,请参阅所需的变更。 - 使用名称
infra和apps指定两个 kustomization。 每个与存储库中的某条路径相关联。 -
appskustomization 取决于infrakustomization。 (必须先完成infrakustomization,然后才能运行appskustomization。) - 在两个 kustomization 上设置
prune=true。 此设置确保,如果 Flux 部署到集群的对象被从存储库中移除,或者 Flux 配置或 Kustomize 配置被删除,这些对象会被自动清除。
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和 kustomizenotification Flux 控制器。 必须显式启用image-automation和image-reflector控制器,这些控制器可在新的容器映像可用时更新 Git 存储库。
可以使用 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 chart 发布。
有关用法详细信息,请参阅以下资源:
提示
由于 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
将 GitRepository 源用于 Helm 图表
如果将 Helm 图表存储在配置成GitRepository资源的fluxConfigurations源中,则可以通过在clusterconfig.azure.com/use-managed-source: "true"文件中添加HelmRelease.yaml,指定配置的源作为 Helm 图表的源,如以下示例所示:
---
apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
name: somename
namespace: somenamespace
annotations:
clusterconfig.azure.com/use-managed-source: "true"
spec:
...
在您使用此注解时,已部署的 HelmRelease 将被修补以引用已配置的源。 目前仅支持 GitRepository 源。
Helm 偏移检测
对 Helm 版本的偏移监测在默认情况下处于未启用状态。 从 microsoft.fluxv1.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 开始,严格的构建后变量替换功能可用。
若要创建启用了严格替换策略的 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
纵向缩放
从 v1.12.0 microsoft.flux 开始支持垂直缩放。 目前,仅对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 监控。 有关详细信息,请参阅启用 Helm 临近 OOM 检测。
查看潜在的 修正策略 ,并在启用此功能时根据需要应用这些策略。
要启用 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。 例如,若要更改 log-level 用于 source-controller 和 kustomize-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-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
在 Flux 扩展 Pod 上配置注释
当您配置非 Azure Firewall 的解决方案时,AKS 群集需要 网络规则和 FQDN/应用规则。 从 microsoft.flux v1.11.1 开始,Flux 控制器 Pod 可以在 Pod 规范中设置批注 kubernetes.azure.com/set-kube-service-host-fqdn 。 即使存在第 7 层防火墙,此批注也允许流量流向 API 服务器的域名,从而在扩展安装过程中促进部署。 若要在使用 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 群集中的工作负载标识
可以在启用了工作负荷标识的群集中创建 Flux 配置。 从 microsoft.flux v1.8.0 开始,该解决方案支持 启用了工作负荷标识的 AKS 群集中的 Flux 配置。 从 microsoft.flux v1.15.1 开始,该解决方案支持启用了工作负荷标识的 Azure Arc 群集中的 Flux 配置。
若要在启用了工作负荷标识的群集中创建 Flux 配置,请修改扩展,如以下步骤所示:
检索 AKS 群集 或 Arc 支持的 Kubernetes 群集 的 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> workloadIdentity.azureTenantId=<tenant_id>为 已启用 Arc 的 AKS 群集 或 已启用 Arc 的 Kubernetes 群集建立联合标识凭据。 例如:
# 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确保需要使用工作负载身份的自定义资源在清单中将
.spec.provider的值设为azure。 例如:apiVersion: source.toolkit.fluxcd.io/v1 kind: HelmRepository metadata: name: acrrepo spec: interval: 10m0s type: <helm_repository_type> url: <helm_repository_link> provider: azure请务必为希望源控制器或图像发送程序控制器拉取的资源提供相应的工作负载标识权限。 例如,如果使用 Azure Container Registry,请确保分配
Container Registry Repository Reader(对于已启用 ABAC 的注册表)或AcrPull(对于非 ABAC 注册表)。
将工作负荷标识用于Azure DevOps
若要将工作负荷标识用于Azure DevOps,请完成以下先决条件:
- 确保Azure DevOps组织连接到 Azure Entra。
- 请确认在您的集群上已正确设置工作负载标识,然后按照 AKS 集群 或 启用 Arc 的 Kubernetes 集群的步骤进行操作。
- 创建托管标识和联合凭据,并在 Flux 扩展的 flux 控制器 Pod 上启用工作负荷标识,如本节前面所述。
- 将托管身份作为用户添加到Azure DevOps组织,并确保其有权访问Azure DevOps存储库。 有关详细步骤,请参阅 在 Azure DevOps 中使用服务主体和托管标识。
接下来,将 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-RSA 作为支持通过 SSH 连接到 Azure 存储库的加密方法。 如果使用 SSH 密钥连接到 Azure 中由世纪互联运营的存储库的 Flux 配置,请迁移到更安全的 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 弃用的详细信息,请参阅 SSH-RSA 停止支持 Azure Repos 的公告。
删除 Flux 配置和扩展
使用以下命令删除 Flux 配置,并在需要时删除 Flux 扩展本身。
删除 Flux 配置
以下命令删除Azure中的 fluxConfigurations 资源以及群集中的 Flux 配置对象。 由于 Flux 配置最初是通过使用 prune=true 参数进行 kustomization(自定义配置)创建的,因此会删除基于 Git 存储库中的清单在群集中所创建的所有对象以及这些 Flux 配置。 但是,此命令不会移除 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。