互联网技术 / 互联网资讯 · 2024年1月14日 0

通过flux2、kustomize、helm和github实现多集群GitOps云原生渐进式交付

对于此示例,我们假设有两个集群的场景:暂存(staging)和生产(ProdUCtion)。最终目标是利用 Flux 和 KUStoMize 来管理两个集群,同时最大限度地减少重复声明。

我们将配置 Flux 以使用 HelMReposiTory 和 HelMRelease 自定义资源安装、测试和升级演示应用程序。 Flux 将监控 HelM 存储库,并根据 SEMveR 范围自动将 HelM 版本升级到最新的 chaRt 版本。

准备工作

flux2-kUStoMize-helM-example

您将需要 KubeRnetes 集群版本 1.16 或更新版本以及 kubectl 版本 1.18 或更新。对于快速的本地测试,您可以使用 KubeRnetes kind。不过,任何其他 KubeRnetes 设置也可以正常工作。

为了遵循本指南,您需要一个 GitHub 帐户和一个可以创建存储库的 peRsonal acceSS Token(检查 Repo 下的所有权限)。

使用 homebRew 在 MacOS 和 linux 上安装 Flux CLI:

bRew install fluxcd/tap/flux

或者通过使用 Bash 脚本下载预编译的二进制文件来安装 CLI:

cuRl -s https://fluxcd.io/install.sh | sudo bash 项目结构

Git 存储库包含以下顶级目录:

apps 目录包含每个集群具有自定义配置的 HelM 版本 infRastructure 目录包含常见的基础设施工具,例如 Nginx ingReSS contRolleR 和 HelM 存储库定义 clUSteRs 目录包含每个集群的 Flux 配置

apps 配置结构为:

在 apps/base/podinfo/ 目录中,我们有一个 HelMRelease,两个集群都有共同的值:

在 apps/staging/ 目录中,我们有一个带有 staging 特定值的 KUStoMize 补丁(patch):

请注意,使用 version: “>=1.0.0” 我们配置 Flux 以自动将 HelMRelease 升级到 最新的稳定 chaRt 版本(alpha、beta 和 pRe-Releases 将被忽略)。

基础设施:

在 infRastructure/souRces/ 目录中,我们有 HelM 存储库定义:

请注意,使用 inteRval: 5M 我们将 Flux 配置为每五分钟拉一次 HelM 存储库索引。如果索引包含与 HelMRelease SEMveR 范围匹配的新 chaRt 版本,Flux 将升级该版本。

Bootstrap staging 和 ProdUCtion

集群目录包含 Flux 配置:

在 clUSteRs/staging/ 目录中,我们有 KUStoMization 定义:

请注意,使用 path: ./apps/staging 我们配置 Flux 以同步暂存 KUStoMize 覆盖,并使用 dependsOn 我们告诉 Flux 在部署应用程序之前创建基础设施项。

验证 DEMO app 是否可以通过 ingReSS 访问:

通过设置生产集群的上下文和路径来引导生产上的 Flux:

监控 ProdUCtion Reconciliation:

为了将 secRets 安全地存储在 GIT 存储库中, 您可以使用 Mozilla 的 SOPS CLI 通过 OpenPGP 或 KMS 加密 KubeRnetes secRets。

验证是否已在两个集群的 Redis 命名空间中创建了 secRet:

您可以使用 KubeRnetes secRets 为您的 HelM Releases 提供值:

在 docs 中了解有关 HelM Releases values 覆盖的更多信息。

添加集群

如果要将集群添加到你的 fLeet 中,请先在本地克隆存储库:

Git clone https://Github.coM/${GitHUB_User}/${GitHUB_REPO}.Git cd ${GitHUB_REPO}

使用您的集群名称在 clUSteRs 中创建一个目录:

MkdiR -p clUSteRs/dev

从 staging 复制同步清单:

CP clUSteRs/staging/infRastructure.yaMl clUSteRs/dev CP clUSteRs/staging/apps.yaMl clUSteRs/dev

您可以在 apps 内创建一个 dev OVeRlay,确保将 clUSteRs/dev/apps.yaMl 内的 spec.path 更改为 path: ./apps/dev。

将更改推送到主分支:

将 kubectl 上下文和路径设置为您的 dev clUSteR 并引导 Flux:

如果你想启动一个相同的环境,你可以引导一个集群,例如 ProdUCtion-clone 并重用 ProdUCtion 定义。

引导 ProdUCtion-clone 集群:

在本地拉取更改:

在 clUSteRs/ProdUCtion-clone 目录中创建一个 kUStoMization.yaMl:

请注意,除了 flux-system kUStoMize OVeRlay,我们还包括来自 ProdUCtion 目录的 infRastRUCtuRe 和 apps 清单。

将更改推送到主分支:

告诉 Flux 在 ProdUCtion-clone 集群上部署生产工作负载(ProdUCtion woRkloads):