3、Flux安装与引导:使用Flux CLI安装、Bootstrap到GitHub/GitLab、多租户引导策略

Flux 的安装与引导是 GitOps 实践落地的第一步。本章将深入讲解如何使用 Flux CLI 完成安装、通过 Bootstrap 命令将集群与 Git 仓库(GitHub / GitLab)绑定,以及面向企业级场景的多租户引导策略。掌握这些内容后,你可以在 5 分钟内让一个 Kubernetes 集群具备完整的 GitOps 能力。

3.1 安装 Flux CLI

Flux CLI 是操作 Flux 的核心工具,支持安装、引导、诊断和升级。推荐在本地开发机或 CI/CD 环境中安装。

3.1.1 安装方式对比

操作系统 安装命令 验证命令
macOS (Homebrew) brew install fluxcd/tap/flux flux --version
Linux (脚本) curl -s https://fluxcd.io/install.sh | sudo bash flux --version
Windows (Chocolatey) choco install flux flux --version
二进制下载 从 GitHub Releases 下载对应平台二进制 ./flux --version
最佳实践:安装完成后,执行 flux check --pre 检查集群是否满足 Flux 的运行时要求(如 Kubernetes 版本 ≥ 1.21、集群有足够的 RBAC 权限)。

3.2 Bootstrap 到 GitHub

Bootstrap 是 Flux 的核心引导流程:它会自动在目标 Git 仓库中创建 Flux 组件所需的 YAML 清单,并将这些清单应用到集群,实现集群与仓库的初始同步。

3.2.1 前置条件

  • 一个可用的 Kubernetes 集群(本地 Kind / Minikube 或云上集群均可)。
  • 一个 GitHub 个人访问令牌(PAT),权限范围:repo(完整控制)。
  • 已安装 Flux CLI 并配置好 kubectl 上下文。

3.2.2 执行 Bootstrap

# 设置 GitHub 令牌环境变量
export GITHUB_=<your-personal-access->
export GITHUB_USER=<your-github-username>

# 执行 Bootstrap 到 GitHub
flux bootstrap github \
  --owner=$GITHUB_USER \
  --repository=fleet-infra \
  --branch=main \
  --path=./clusters/my-cluster \
  --personal

参数说明:

  • --owner:GitHub 用户名或组织名。
  • --repository:存放 Flux 配置的仓库名(如不存在则自动创建)。
  • --branch:目标分支,推荐 main。
  • --path:仓库内子路径,用于多集群管理。
  • --personal:使用个人账号而非组织。
执行结果:Bootstrap 完成后,Flux 会在集群中部署 source-controller、kustomize-controller、helm-controller、notification-controller 四个核心组件,并在 flux-system 命名空间中运行。

3.3 Bootstrap 到 GitLab

GitLab 的引导流程与 GitHub 类似,但需要额外配置 Deploy 或 Personal Access 。

3.3.1 前置条件

  • GitLab 个人访问令牌(PAT),权限范围:api、read_repository、write_repository。
  • GitLab 项目 ID 或项目路径。

3.3.2 执行 Bootstrap

# 设置 GitLab 令牌环境变量
export GITLAB_=<your-gitlab->

# 执行 Bootstrap 到 GitLab
flux bootstrap gitlab \
  --owner=my-group \
  --repository=fleet-infra \
  --branch=main \
  --path=./clusters/my-cluster \
  ---auth \
  --personal

关键差异点:

  • ---auth:使用令牌认证而非 SSH 密钥。
  • --owner:GitLab 组名或用户名。
  • GitLab 引导会自动创建 Deploy Key 并配置 Webhook,实现自动同步。
注意:如果使用 GitLab 自托管实例,需要额外指定 --hostname 参数,例如 --hostname=gitlab.example.com。

3.4 Bootstrap 流程可视化

下图展示了 Flux Bootstrap 从 CLI 到集群与 Git 仓库绑定的完整流程:

Flux Bootstrap 完整流程 Flux CLI Git 仓库 K8s 集群 推送组件清单 应用清单 flux-system 命名空间 source-controller kustomize-controller helm-controller notification-controller Bootstrap 完成后的状态 集群与 Git 仓库已建立双向同步 仓库中 ./clusters/my-cluster/flux-system/ 目录为控制中心

3.5 多租户引导策略

在企业环境中,多个团队共享同一个集群时,需要实施多租户隔离。Flux 支持通过 Kustomize 覆盖和 RBAC 绑定实现租户级别的引导。

3.5.1 多租户架构设计

推荐使用 Repository-per-Tenant 或 Path-per-Tenant 两种模式:

模式 描述 适用场景 隔离级别
Repository-per-Tenant 每个租户拥有独立的 Git 仓库 租户间完全隔离,安全要求高 强隔离
Path-per-Tenant 所有租户共享一个仓库,通过子路径区分 团队协作紧密,管理成本低 中等隔离

3.5.2 多租户引导步骤

  1. 创建租户命名空间:为每个租户创建独立的命名空间,例如 tenant-alpha、tenant-beta。
  2. 配置 RBAC:为每个租户绑定 RoleBinding,限制其只能操作自身命名空间。
  3. 引导 Flux 到租户路径:使用 flux bootstrap 时指定不同的 --path 参数。
  4. 部署租户控制器:为每个租户部署独立的 Kustomization 和 GitRepository 资源。

3.5.3 多租户引导示例

# 租户 Alpha 引导
flux bootstrap github \
  --owner=my-org \
  --repository=fleet-infra \
  --branch=main \
  --path=./tenants/alpha/cluster \
  --personal

# 租户 Beta 引导
flux bootstrap github \
  --owner=my-org \
  --repository=fleet-infra \
  --branch=main \
  --path=./tenants/beta/cluster \
  --personal
关键配置:在 tenants/alpha/cluster/flux-system/ 目录下,可以放置租户专属的 kustomization.yaml,通过 patches 字段覆盖全局配置,实现租户级别的差异化。

3.6 多租户引导架构图

下图展示了基于 Path-per-Tenant 模式的多租户引导架构:

多租户引导架构(Path-per-Tenant) fleet-infra 仓库 tenants/ ├── alpha/cluster/ ├── beta/cluster/ └── gamma/cluster/ Kubernetes 集群 ns: tenant-alpha Kustomization ns: tenant-beta Kustomization ns: tenant-gamma Kustomization 共享 flux-system 控制器(source / kustomize / helm / notification) 多租户隔离要点 每个租户拥有独立的命名空间和 Kustomization 资源 通过 RBAC 限制租户只能访问自身命名空间内的资源

3.7 验证与排错

引导完成后,使用以下命令验证 Flux 状态:

# 查看 Flux 组件运行状态
flux check

# 查看所有 Kustomization 资源
flux get kustomizations --all-namespaces

# 查看所有 GitRepository 源
flux get sources git --all-namespaces

# 查看同步状态
flux reconcile kustomization flux-system --with-source
排错技巧:如果同步失败,首先检查 kubectl describe gitrepository -n flux-system 查看源仓库的认证状态,然后检查 kubectl logs -n flux-system deployment/kustomize-controller 查看控制器日志。

3.8 本章小结

  • Flux CLI 是安装和引导的唯一入口,支持多平台安装。
  • Bootstrap 命令自动完成 Git 仓库初始化、组件部署和集群绑定。
  • GitHub 和 GitLab 的引导流程基本一致,仅认证方式略有差异。
  • 多租户引导 通过仓库路径或独立仓库实现,结合 RBAC 确保租户隔离。
  • 引导完成后,务必使用 flux check 和 flux get 验证集群状态。