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.
Azure提供了使用 GitOps 的自动化应用程序部署功能,该功能适用于Azure Kubernetes Service (AKS)和已启用Azure Arc的 Kubernetes 群集。 采用 GitOps 将应用程序部署到 Kubernetes 群集提供的主要优势包括:
- 持续了解群集上运行的应用程序的状态。
- 在应用程序开发团队和基础设施团队之间实现关注点分离。 应用程序团队无需具备 Kubernetes 部署的经验。 平台工程团队通常为应用程序团队创建自助服务模型,使他们能够更自信地运行部署。
- 能够在崩溃或横向扩展时重新创建具有相同所需状态的群集。
- 能够通过Azure Policy大规模部署应用程序。
通过 GitOps,可以在 Git 存储库中的文件中声明 Kubernetes 群集的所需状态。 Git 存储库可能包含以下文件:
- YAML 格式的清单,用于描述 Kubernetes 资源(如命名空间、机密、部署和其他)
- 用于部署应用程序的 Helm 图表
- 用于描述环境特定更改的 Kustomize 文件
由于这些文件存储在 Git 存储库中,因此会对其进行版本控制,并可以轻松地跟踪版本之间的更改。 Kubernetes 控制器在群集中运行,并不断地使群集状态与 Git 存储库中声明的所需状态保持一致。 这些运算符从 Git 存储库中提取文件,并将所需状态应用到群集。 操作员还会持续确保群集保持在所需状态。
已启用 Azure Arc 的 Kubernetes 或 Azure Kubernetes Service 上的 GitOps 使用 Flux,这是一个常用的开源工具集。 Flux 支持常见的文件源(Git 和 Helm 存储库、存储桶、Azure Blob Storage)和模板类型(YAML、Helm 和 Kustomize)。 Flux 还支持多租户和部署依赖关系管理,还提供其他功能。
Flux 直接部署在群集上,并且每个群集的控制平面在逻辑上是分开的。 这使得它可以很好地扩展到数百个到数千个群集。 Flux 支持基于纯拉取的 GitOps 应用程序部署。 源存储库或任何其他群集不需要访问群集。
重要
在 Azure Kubernetes 服务(AKS)、AKS Edge Essentials 或由 Azure Arc 启用的 Azure Local 上进行的 Flux 部署不收取任何费用。 对于通过 Azure Arc 启用的 Kubernetes 进行连接的其他 Kubernetes 发行版,订阅中的前六个 vCPU 上的 Flux 部署不收取任何费用。 然后,根据每个群集的 vCPU 数收取费用。 有关详细信息,请参阅 Azure Arc 定价。
Flux 群集扩展
GitOps 在启用了 Azure Arc 的 Kubernetes 或 AKS 集群中作为 Microsoft.KubernetesConfiguration/extensions/microsoft.flux集群扩展资源启用。 必须先在群集中安装 microsoft.flux 扩展,然后才能创建一个或多个 fluxConfigurations。 在群集中创建第一个 Microsoft.KubernetesConfiguration/fluxConfigurations 时,会自动安装扩展,或者可以使用门户、Azure CLI(az k8s-extension create --extensionType=microsoft.flux)、ARM 模板或 REST API 手动安装扩展。
控制器
默认情况下,microsoft.flux 扩展会安装 Flux 控制器(源、Kustomize、Helm、通知)、FluxConfig 自定义资源定义 (CRD)、fluxconfig-agent 和 fluxconfig-controller。 您还可以安装 Flux image-automation 和 image-reflector 控制器,它们提供更新和检索 Docker 映像的功能。
Flux 源控制器:监视
source.toolkit.fluxcd.io自定义资源。 处理 Git 存储库、Helm 存储库、存储桶和Azure Blob 存储之间的同步。 处理与私有 Git、Helm 存储库和 Azure Blob 存储帐户源的授权。 通过 tar 存档文件显示对源的最新更改。Flux Kustomize 控制器:监视
kustomization.toolkit.fluxcd.io自定义资源。 将源中的 Kustomize 或原始 YAML 文件应用到群集。Flux Helm 控制器:监视
helm.toolkit.fluxcd.io自定义资源。 从源控制器呈现的 Helm 存储库源检索关联图表。 创建HelmChart自定义资源,并将具有给定版本、名称和客户定义值的HelmRelease应用到群集。Flux 通知控制器:监视
notification.toolkit.fluxcd.io自定义资源。 接收来自所有 Flux 控制器的通知。 将通知推送到用户定义的 webhook 终结点。Flux 自定义资源定义:
kustomizations.kustomize.toolkit.fluxcd.ioimagepolicies.image.toolkit.fluxcd.ioimagerepositories.image.toolkit.fluxcd.ioimageupdateautomations.image.toolkit.fluxcd.ioalerts.notification.toolkit.fluxcd.ioproviders.notification.toolkit.fluxcd.ioreceivers.notification.toolkit.fluxcd.iobuckets.source.toolkit.fluxcd.iogitrepositories.source.toolkit.fluxcd.iohelmcharts.source.toolkit.fluxcd.iohelmrepositories.source.toolkit.fluxcd.iohelmreleases.helm.toolkit.fluxcd.iofluxconfigs.clusterconfig.azure.com
FluxConfig CRD:定义
fluxconfigs.clusterconfig.azure.comKubernetes 对象的FluxConfig自定义资源的自定义资源定义。fluxconfig-agent:监视 Azure 中新的或更新的fluxConfigurations资源,并在群集中启动相应的 Flux 配置。 它还会将群集中的 Flux 状态更改推送回 Azure 的每个fluxConfigurations资源。fluxconfig-controller:监视fluxconfigs.clusterconfig.azure.com自定义资源,并在群集中通过新的或更新的 GitOps 机械配置对更改做出响应。
注意
此 microsoft.flux 扩展已安装在 flux-system 命名空间中,并且具有群集范围的范围。 无法在命名空间作用域内安装此扩展。
Flux 配置
注意
若要以高分辨率下载 Arc 图表,请访问 Jumpstart Gems。
创建 Flux 配置资源(Microsoft.KubernetesConfiguration/fluxConfigurations),以便从 Git 仓库、Bucket 源或 Azure Blob 存储启用对群集的 GitOps 管理。 创建 fluxConfigurations 资源时,你为参数提供的值(例如目标 Git 存储库)用于创建和配置在该群集中启用 GitOps 进程的 Kubernetes 对象。 为了确保数据安全性,群集配置服务在Azure Cosmos DB数据库中存储的fluxConfigurations资源数据采用静态加密。
使用fluxconfig-agent扩展安装的fluxconfig-controller和microsoft.flux代理负责管理 GitOps 配置过程。
fluxconfig-agent 负责以下任务:
- 为新资源或更新的
fluxConfigurations资源轮询 Kubernetes 配置数据平面服务。 - 使用配置信息在群集中创建或更新
FluxConfig自定义资源。 - 监视
FluxConfig自定义资源,并将状态更改推送回关联的Azure fluxConfiguration 资源。
fluxconfig-controller 负责以下任务:
- 监视由托管
fluxConfigurations创建的 Flux 自定义资源的状态更新。 - 创建在
fluxConfigurations生存期内存在的私钥/公钥对。 如果 URL 基于 SSH,并且用户在创建配置过程中未提供自己的私钥,则此密钥用于身份验证。 - 基于用户提供的私钥/http 基本身份验证/已知主机/非身份验证数据创建自定义身份验证机密。
- 设置基于角色的访问控制(其中包括服务帐户的预配、角色绑定的创建和分配、以及角色的创建和分配)。
- 基于
GitRepository自定义资源中的信息创建Bucket或Kustomization自定义资源和FluxConfig自定义资源。
Azure中的每个 fluxConfigurations 资源都与一个 Flux GitRepository 或 Bucket 自定义资源以及 Kubernetes 群集中的一个或多个 Kustomization 自定义资源相关联。 创建 fluxConfigurations 资源时,请为每个 Kustomization 指定源(Git 存储库、存储桶或Azure Blob 存储)的 URL 和同步目标。 你可以配置 Kustomization 自定义资源之间的依赖关系,以控制部署顺序。 还可以为不同的应用程序和应用团队在同一群集上创建多个命名空间范围的 fluxConfigurations 资源。
注意
fluxconfig-agent 监视Azure中新的或更新的 fluxConfiguration 资源。 代理需要连接到 Azure,才能将fluxConfiguration的所需状态应用于群集。 如果代理无法连接到Azure,群集中的更改将等待代理可以连接。 如果群集已从 Azure 断开连接超过 48 小时,则对群集的请求超时,并且需要在Azure中重新应用更改。
敏感的客户输入内容(例如私钥和令牌/密码)在 Kubernetes 配置服务中的存储时间少于 48 小时。 如果在 Azure 中更新这些值中的任何一个,请确保群集在 48 小时内与Azure连接。
可以在 Azure 门户中监视 Flux 配置状态和符合性,也可以使用仪表板监视状态、符合性、资源消耗和对帐活动。 有关详细信息,请参阅监视 GitOps (Flux v2) 状态与活动。
版本支持
支持 Flux v2 扩展的最新版本 (microsoft.flux) 和前两个版本 (N-2)。 使用 最新版本 的扩展。 从 microsoft.flux 版本 1.7.0 开始,支持基于 ARM64 的群集。
具有专用链接的 GitOps
如果您将对 Azure Arc 启用的 Kubernetes 集群添加了私有链接支持,则该扩展可以直接与 Azure 进行通信。 若要连接到 Git 存储库、Helm 存储库或部署 Kubernetes 清单所需的任何其他终结点,必须在防火墙后面预配这些终结点,或在防火墙上列出这些终结点,以便 Flux 源控制器能够成功访问它们。
数据驻留地
Azure GitOps 服务(Azure Kubernetes 配置管理)存储和处理客户数据。 客户数据默认复制到配对区域。
大规模应用 Flux 配置文件
由于 Azure Resource Manager 管理您的配置,您可以使用 Azure Policy,在订阅或资源组范围内自动化创建相同的配置,涵盖所有 Azure Kubernetes Service 和启用了 Azure Arc 的 Kubernetes 资源。 这种规模化实施确保特定配置在整个集群组中得到一致应用。
参数
若要查看 flux v2 在 Azure 中支持的所有参数,请参阅 az k8s-configuration 文档。 Azure实现目前不支持 Flux 支持的每个参数。
有关可用参数及其用法的信息,请参阅 GitOps (Flux v2) 支持的参数。
多租户
从版本 0.26 开始,Flux v2 支持多租户。 此功能集成到 Azure 中的 Flux v2 中。
注意
对于多租户功能,请检查清单是否包含 HelmRelease、Kustomization、ImagePolicy 或其他对象的跨命名空间 sourceRef,或者 是否使用低于 1.20.6 的 Kubernetes 版本。 准备工作:
- 升级到 Kubernetes 版本 1.20.6 或更高版本。
- 在 Kubernetes 清单中,确保所有
sourceRef都指向与 GitOps 配置位于相同命名空间中的对象。- 如果需要时间来更新清单,可以选择退出多租户。 但仍需升级 Kubernetes 版本。
为多租户更新清单
假设你将一个 fluxConfiguration 部署到你的 Kubernetes 集群中的 cluster-config 命名空间,并且该部署具有集群范围。 将源配置为同步 https://github.com/fluxcd/flux2-kustomize-helm-example 存储库。 这与“使用 GitOps 和 Flux v2 部署应用程序”教程中使用的示例 Git 存储库相同。
Flux 同步存储库后,它会部署清单中所述的资源(YAML 文件)。 两个清单描述了 HelmRelease 和 HelmRepository 对象。
apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
name: nginx
namespace: nginx
spec:
releaseName: nginx-ingress-controller
chart:
spec:
chart: nginx-ingress-controller
sourceRef:
kind: HelmRepository
name: bitnami
namespace: flux-system
version: "5.6.14"
interval: 1h0m0s
install:
remediation:
retries: 3
# Default values
# https://github.com/bitnami/charts/blob/master/bitnami/nginx-ingress-controller/values.yaml
values:
service:
type: NodePort
apiVersion: source.toolkit.fluxcd.io/v1beta1
kind: HelmRepository
metadata:
name: bitnami
namespace: flux-system
spec:
interval: 30m
url: https://charts.bitnami.com/bitnami
默认情况下,Flux 扩展通过模拟仅部署在 fluxConfigurations 命名空间中的 flux-applier 服务帐户来部署 cluster-config。 启用多租户后,HelmRelease 将被阻止。 此阻塞发生是因为HelmRelease位于nginx命名空间中,但它引用的是flux-system命名空间中的HelmRepository。 此外,Flux helm-controller 无法应用HelmRelease,因为命名空间中flux-applier没有nginx服务帐户。
若要使用多租户,请将所有 Flux 对象部署到与fluxConfigurations相同的命名空间中。 此方法可以避免出现跨命名空间引用问题,并允许 Flux 控制器获取应用对象的权限。 因此,对于在命名空间中创建的 cluster-config GitOps 配置,以下示例清单会更改,如下所示:
apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
name: nginx
namespace: cluster-config
spec:
releaseName: nginx-ingress-controller
targetNamespace: nginx
chart:
spec:
chart: nginx-ingress-controller
sourceRef:
kind: HelmRepository
name: bitnami
namespace: cluster-config
version: "5.6.14"
interval: 1h0m0s
install:
remediation:
retries: 3
# Default values
# https://github.com/bitnami/charts/blob/master/bitnami/nginx-ingress-controller/values.yaml
values:
service:
type: NodePort
apiVersion: source.toolkit.fluxcd.io/v1beta1
kind: HelmRepository
metadata:
name: bitnami
namespace: cluster-config
spec:
interval: 30m
url: https://charts.bitnami.com/bitnami
退出多租户模式
安装 microsoft.flux 扩展时,默认启用多租户。 要禁用多租户,您可以通过在群集 microsoft.flux 中创建或更新 --configuration-settings multiTenancy.enforce=false 扩展来选择退出,如以下示例命令所示:
az k8s-extension create --extension-type microsoft.flux --configuration-settings multiTenancy.enforce=false -c CLUSTER_NAME -g RESOURCE_GROUP -n flux -t <managedClusters or connectedClusters>
az k8s-extension update --configuration-settings multiTenancy.enforce=false -c CLUSTER_NAME -g RESOURCE_GROUP -n flux -t <managedClusters or connectedClusters>
后续步骤
- 使用我们的教程了解如何在 AKS 或已启用 Azure Arc 的 Kubernetes 群集上可启用 GitOps。
- 了解使用 GitOps 的 CI/CD 工作流。