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 -h
或 az k8s-configuration flux create -h
)。
小窍门
使用不支持的参数部署 Flux 资源的解决方法是在 Git 存储库中定义所需的 Flux 自定义资源(例如 GitRepository 或 Kustomization)。 使用 az k8s-configuration flux create
命令部署这些资源。 然后,仍可以通过 Azure Arc UI 访问 Flux 资源。
配置常规参数
参数 | 格式 | 注释 |
---|---|---|
--cluster-name -c |
字符串 | Azure 中的群集资源的名称。 |
--cluster-type -t |
允许的值:connectedClusters 、managedClusters |
对 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 |
字符串 | 要协调的源类型。 允许的值:bucket 、git 、azblob 。 默认值: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 机密对 git
、bucket
或 azBlob
源进行身份验证。 本地机密必须包含源所需的所有身份验证参数,并且必须在与 Flux 配置相同的命名空间中创建。
参数 | 格式 | 注释 |
---|---|---|
--local-auth-ref --local-ref |
字符串 | 对 Flux 配置命名空间中的 Kubernetes 机密的本地引用,用于对源进行身份验证。 |
对于 HTTPS 身份验证,请使用以下项username
password
创建机密:
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 身份验证,请创建包含identity
和known_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-git
或 libgit2
。 有关详细信息,请参阅 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 、、server client . 默认值:none 。 有关详细信息,请参阅 Flux 文档 。 |
force |
布尔型 | 默认值:false 。 设置 force=true 以指示 kustomize 控制器在因不可变字段更改导致修补失败时重新创建资源。 |
还可以使用 az k8s-configuration flux kustomization
在 Flux 配置中更新、列出、显示和删除 kustomization。
后续步骤
- 详细了解如何使用 GitOps(Flux v2)为 AKS 和已启用 Azure Arc 的 Kubernetes 执行应用程序部署。
- 使用我们的教程了解如何在 AKS 或已启用 Azure Arc 的 Kubernetes 群集上启用 GitOps。
- 了解使用 GitOps 的 CI/CD 工作流。