GitOps (Flux v2) 支持的参数

Azure 使用适用于 Azure Kubernetes 服务 (AKS) 和已启用 Azure Arc 的 Kubernetes 群集的 GitOps 提供自动化应用程序部署功能。 GitOps with Flux v2 让你用 Git 存储库作为群集配置和应用程序部署的可信来源。 有关详细信息,请参阅 使用 GitOps 的应用程序部署(Flux v2)教程:使用 GitOps 和 Flux v2 部署应用程序

已启用 Azure Arc 的 Kubernetes 或 Azure Kubernetes 服务上的 GitOps 使用 Flux,这是一个常用的开源工具集,支持许多参数来启用各种方案。 有关 Flux 支持的所有参数的说明,请参阅官方 Flux 文档

若要查看 Flux 在 Azure 中支持的所有参数,请参阅 az k8s-configuration 文档。 此实现当前不支持 Flux 支持的每个参数。 如果 Azure 实现中缺少你需要的参数,请告诉我们。

本文介绍可用于 az k8s-configuration flux create 命令的一些参数和论据。 您还可以在 Azure CLI 中使用 -h 参数查看 az k8s-configuration flux 的完整参数列表(例如,az k8s-configuration flux -haz k8s-configuration flux create -h)。

小窍门

使用不支持的参数部署 Flux 资源的解决方法是在 Git 存储库中定义所需的 Flux 自定义资源(例如 GitRepositoryKustomization)。 使用 az k8s-configuration flux create 命令部署这些资源。 然后,仍可以通过 Azure Arc UI 访问 Flux 资源。

配置常规参数

参数 格式 注释
--cluster-name-c 字符串 Azure 中的群集资源的名称。
--cluster-type-t 允许的值:connectedClustersmanagedClusters 对 Azure Arc 启用的 Kubernetes 群集使用 connectedClusters,或对 Azure Kubernetes 服务(AKS)群集使用 managedClusters
--resource-group-g 字符串 保存群集资源的 Azure 资源组的名称。
--name-n 字符串 Azure 中 Flux 配置的名称。
--namespace--ns 字符串 要部署配置的命名空间的名称。 默认值:default
--scope-s 字符串 操作员的权限范围。 可能的值为 cluster (完全访问权限)或 namespace (受限访问)。 默认值:cluster
--suspend 标志 暂停此 Flux 配置中定义的所有源和 kustomize 协调。 暂停时处于活动状态的协调将继续进行。

源常规参数

参数 格式 注释
--kind 字符串 要协调的源类型。 允许的值:bucketgitazblob。 默认值:git
--timeout golang 持续时间格式 在超时之前尝试对源进行协调的最长时间。默认:10m
--sync-interval--interval golang 持续时间格式 群集上源的对帐之间的时间。 默认值:10m

Git 存储库源引用参数

参数 格式 注释
--branch 字符串 要同步到群集的 Git 源中的分支。 默认值:master。 较新的存储库可能有一个根分支名为 main,在这种情况下需要设置 --branch=main
--tag 字符串 要同步到群集的 Git 源中的标记。 示例:--tag=3.2.0
--semver 字符串 要同步到群集的 Git 源中的 Git 标记 semver 范围。 示例:--semver=">=3.1.0-rc.1 <3.2.0"
--commit 字符串 要同步到群集的 Git 源中的 Git 提交 SHA。 示例:--commit=363a6a8fe6a7f13e05d34c163b0ef02a777da20a

有关详细信息,请参阅 有关 Git 存储库签出策略的 Flux 文档

公共 Git 存储库

参数 格式 注释
--url-u http[s]://server/repo[.git] 要与群集协调的 Git 存储库源的 URL。

使用 SSH 的专用 Git 存储库

重要

Azure DevOps 宣布弃用 SSH-RSA,作为使用 SSH 连接到 Azure 存储库的受支持加密方法。 如果在 Flux 配置中使用 SSH 密钥连接到 Azure 存储库,建议迁移到更安全的 RSA-SHA2-256 或 RSA-SHA2-512 密钥。 有关详细信息,请参阅 Azure DevOps SSH-RSA 弃用

使用 SSH 和 Flux 创建的密钥的专用 Git 存储库

将 Flux 生成的公钥添加到 Git 服务提供程序中的用户帐户。

参数 格式 注释
--url-u ssh://user@server/repo[.git] git@ 如果公钥与存储库(而不是用户帐户)相关联,则应替换 user@ 该密钥。

使用 SSH 和用户提供的密钥的专用 Git 存储库

直接或从文件中使用自己的私钥。 密钥必须采用 PEM 格式 ,以换行符结尾(\n)。

将关联的公钥添加到 Git 服务提供程序中的用户帐户。

参数 格式 注释
--url-u ssh://user@server/repo[.git] git@ 如果公钥与存储库(而不是用户帐户)相关联,则应替换 user@ 该密钥。
--ssh-private-key PEM 格式的 Base64 密钥 直接提供密钥。
--ssh-private-key-file 本地文件的完整路径 提供包含 PEM 格式密钥的本地文件的完整路径。

专用 Git 主机以及 SSH 和用户提供的已知主机

Flux 运算符在其 known_hosts 文件中维护一个通用 Git 主机的列表。 Flux 在建立 SSH 连接之前使用此信息对 Git 存储库进行身份验证。 如果使用不常见的 Git 存储库或自己的 Git 主机,则可以提供主机密钥,以便 Flux 能够识别存储库。

与私钥一样,可直接或在文件中提供 known_hosts 内容。 提供自己的内容时,请使用 known_hosts 内容格式规范,以及上述任一 SSH 密钥方案中的其中之一。

参数 格式 注释
--url-u ssh://user@server/repo[.git] git@ 可以替换 user@
--known-hosts Base64 字符串 直接提供 known_hosts 内容。
--known-hosts-file 本地文件的完整路径 在本地文件中提供 known_hosts 内容。

使用 HTTPS 用户和密钥的专用 Git 存储库

参数 格式 注释
--url-u https://server/repo[.git] 使用基本身份验证的 HTTPS。
--https-user 原始字符串 HTTPS 用户名。
--https-key 原始字符串 HTTPS 个人访问令牌或密码。

使用 HTTPS CA 证书的专用 Git 存储库

参数 格式 注释
--url-u https://server/repo[.git] 使用基本身份验证的 HTTPS。
--https-ca-cert Base64 字符串 TLS 通信的 CA 证书。
--https-ca-cert-file 本地文件的完整路径 在本地文件中提供 CA 证书内容。

桶源参数

如果使用 bucket 源,下面是特定于桶的命令自变量。

参数 格式 注释
--url-u URL 字符串 bucket的URL。 支持的格式: http://https://
--bucket-name 字符串 要同步的 bucket 的名称。
--bucket-access-key 字符串 用于向 bucket 进行身份验证的访问密钥 ID。
--bucket-secret-key 字符串 用于向 bucket 进行身份验证的密钥。
--bucket-insecure 布尔型 与不使用 TLS 的 bucket 进行通信。 如果未提供,则假定为 false;如果提供,则假定为 true。

Azure Blob 存储服务帐户源参数

如果使用 azblob 源,下面是 Blob 特定的命令参数。

参数 格式 注释
--url-u URL 字符串 azblob 的 URL。
--container-name 字符串 要同步的 Azure Blob 存储容器的名称
--sp_client_id 字符串 用于通过 Azure Blob 对服务主体进行身份验证的客户端 ID,这是该身份验证方法所需的。
--sp_tenant_id 字符串 对服务主体进行 Azure Blob 身份验证所需的租户 ID,这是这种身份验证方法所必需的。
--sp_client_secret 字符串 使用 Azure Blob 对服务主体进行身份验证的客户端密码
--sp_client_cert 字符串 用于使用 Azure Blob 对服务主体进行身份验证的 Base64 编码客户端证书
--sp_client_cert_password 字符串 用于使用 Azure Blob 对服务主体进行身份验证的客户端证书的密码
--sp_client_cert_send_chain 字符串 指定在获取令牌以启用客户端证书的基于使用者名称/颁发者的身份验证时,是否在客户端声明中包括 x5c 标头
--account_key 字符串 用于身份验证的 Azure Blob 共享密钥
--sas_token 字符串 用于身份验证的 Azure Blob SAS 令牌
--managed-identity-client-id 字符串 用于使用 Azure Blob 进行身份验证的托管标识的客户端 ID

重要

对 AKS 群集和 azblob 源使用托管标识身份验证时,必须至少为托管标识分配 存储 Blob 数据读取者 角色。 使用托管标识进行身份验证尚不适用于已启用 Azure Arc 的 Kubernetes 群集。

用于对源进行身份验证的本地机密

可以使用本地 Kubernetes 机密对 gitbucketazBlob 源进行身份验证。 本地机密必须包含源所需的所有身份验证参数,并且必须在与 Flux 配置相同的命名空间中创建。

参数 格式 注释
--local-auth-ref--local-ref 字符串 对 Flux 配置命名空间中的 Kubernetes 机密的本地引用,用于对源进行身份验证。

对于 HTTPS 身份验证,请使用以下项usernamepassword创建机密:

kubectl create ns flux-config
kubectl create secret generic -n flux-config my-custom-secret --from-literal=username=<my-username> --from-literal=password=<my-password-or-key>

对于 SSH 身份验证,请创建包含identityknown_hosts字段的机密。

kubectl create ns flux-config
kubectl create secret generic -n flux-config my-custom-secret --from-file=identity=./id_rsa --from-file=known_hosts=./known_hosts

重要

Azure DevOps 宣布弃用 SSH-RSA,作为使用 SSH 连接到 Azure 存储库的受支持加密方法。 如果在 Flux 配置中使用 SSH 密钥连接到 Azure 存储库,建议迁移到更安全的 RSA-SHA2-256 或 RSA-SHA2-512 密钥。 有关详细信息,请参阅 Azure DevOps SSH-RSA 弃用

对于这两种情况,在创建 Flux 配置时,请使用 --local-auth-ref my-custom-secret 代替其他身份验证参数:

az k8s-configuration flux create -g <cluster_resource_group> -c <cluster_name> -n <config_name> -t connectedClusters --scope cluster --namespace flux-config -u <git-repo-url> --kustomization name=kustomization1 --local-auth-ref my-custom-secret

详细了解如何通过以下身份验证方法使用本地 Kubernetes 机密:

注释

如果需要 Flux 通过代理访问源,则必须使用代理设置更新 Azure Arc 代理。 有关详细信息,请参阅使用出站代理服务器进行连接

Git 实现

若要支持实现 Git 的各种存储库提供程序,可将 Flux 配置为使用两个 Git 库之一: go-gitlibgit2。 有关详细信息,请参阅 Flux 文档

Flux v2 的 GitOps 实现会自动确定要用于公有云存储库的库:

  • 对于 GitHub、GitLab 和 BitBucket 存储库,Flux 使用 go-git
  • 对于 Azure DevOps 和其他所有存储库,Flux 使用 libgit2

对于本地存储库,Flux 使用 libgit2

Kustomization

Kustomization 是为 Flux 配置创建的设置,可用于在源存储库中选择与群集协调的特定路径。 无需在此指定路径上创建'kustomization.yaml 文件。 默认情况下,此路径中的所有清单都会进行协调。 但是,如果您希望为此存储库路径上的应用程序创建 Kustomize 覆盖层,那么您应该在 Git 中创建 Kustomize 文件 以供 Flux 配置使用。

使用 az k8s-configuration flux kustomization create 可以在配置期间创建一个或多个 kustomization。

参数 格式 注释
--kustomization 没有值 配置 kustomization 的参数字符串的开头。 可以多次使用它来创建多个自定义设置。
name 字符串 此 kustomization 的唯一名称。
path 字符串 Git 存储库中要与群集协调的路径。 默认值为分支的顶层。
prune 布尔型 默认值为 false。 设置 prune=true 以确保 Flux 部署到群集的对象在从存储库中移除或者删除 Flux 配置或 kustomization 时被清除。 在用户无法访问群集且只能通过 Git 存储库进行更改的环境中,使用 prune=true 非常重要。
depends_on 字符串 此 kustomization 可协调之前必须协调的一个或多个 kustomization 的名称(在此配置中)。 例如: depends_on=["kustomization1","kustomization2"]。 如果删除具有依赖 kustomization 的 kustomization,则依赖 kustomization 的状态将变为 DependencyNotReady,并且协调将停止。
timeout golang 持续时间格式 默认值:10m
sync_interval golang 持续时间格式 默认值:10m
retry_interval golang 持续时间格式 默认值:10m
validation 字符串 值:none、、serverclient. 默认值:none。 有关详细信息,请参阅 Flux 文档
force 布尔型 默认值:false。 设置 force=true 以指示 kustomize 控制器在因不可变字段更改导致修补失败时重新创建资源。

还可以使用 az k8s-configuration flux kustomization 在 Flux 配置中更新、列出、显示和删除 kustomization。

后续步骤