GitOps (Flux v2) 支持的参数

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

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

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

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

提示

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

配置常规参数

参数 格式 说明
--cluster-name -c 字符串 Azure 中群集资源的名称。
--cluster-type -t 允许的值:connectedClustersmanagedClusters connectedClusters 用于已启用 Azure Arc 的 Kubernetes 群集,或将 managedClusters 用于 AKS 群集。
--resource-group -g 字符串 包含群集资源的 Azure 资源组的名称。
--name -n 字符串 Azure 中 Flux 配置的名称。
--namespace --ns 字符串 用于部署配置的命名空间的名称。 默认:default
--scope -s 字符串 操作员的权限范围。 可能的值为 cluster(完全访问权限)或 namespace(受限访问权限)。 默认:cluster
--suspend flag 暂停此 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 存储库的受支持加密方法。 如果使用 SSH 密钥连接到 Flux 配置中由世纪互联运营的 Azure 存储库,建议移动到更安全的 RSA-SHA2-256 或 RSA-SHA2-512 密钥。 有关详细信息,请参阅 Azure DevOps SSH-RSA 弃用

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

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

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

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

直接或者在文件中使用你自己的私钥。 该密钥必须采用 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 operator 在其 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 内容。

专用 Git 存储库以及 HTTPS 用户和密钥

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

专用 Git 存储库以及 HTTPS CA 证书

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

Bucket 源参数

如果使用 bucket 源,下面是特定于 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 存储库的受支持加密方法。 如果使用 SSH 密钥连接到 Flux 配置中由世纪互联运营的 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 是为 Flux 配置创建的设置,可用于在源存储库中选择与群集协调的特定路径。 无需在此指定路径上创建 'kustomization.yaml 文件。 默认情况下,此路径中的所有清单都会进行调整。 但是,如果要为此存储库路径上的应用程序创建 Kustomize 覆盖,应在 git 中创建 Kustomize 文件以使用 Flux 配置。

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

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

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

后续步骤