跳至正文

FluxCD部署实战

🔧 步骤 1:安装 Flux CLI(本地机器)

Flux CLI 是操作 Flux 的核心工具,替代 ArgoCD UI/ArgoCD CLI。

FluxCD和k8s集群/Gitlab仓库是一一对应的关系,每个k8s集群都要安装Flux,并对应一个专属的Gitlab仓库

# Linux/macOS 一键安装(官方脚本,安全可控)
curl -s https://fluxcd.io/install.sh | sudo bash

# 验证安装(输出版本即成功,当前稳定版 v2.8.6)
flux --version

# (可选)补全命令(方便后续操作)
. <(flux completion bash)  # bash
# . <(flux completion zsh)  # zsh

🔧 步骤 2:初始化 Flux 到 Kubernetes 集群

这一步会在集群中安装 Flux 核心组件(仅 4 个 Pod,轻量),且默认禁用自动同步(符合手动同步需求)。

# 1. 检查集群是否满足安装条件(前置校验,避免踩坑)
flux check --pre

# 2. 初始化 Flux(核心命令,安装所有组件到 flux-system 命名空间)
flux install \
  --namespace flux-system \
  --network-policy=false \
  --components-extra=image-reflector-controller,image-automation-controller # 可选:如需镜像更新功能

# 3. 立即查看 Pod 状态(1分钟内会从 Pulling → Running)
kubectl get pods -n flux-system -w

# 4. 验证 Flux 组件状态(所有 Pod 为 Running 即成功)
kubectl get pods -n flux-system

🔧 步骤 3:将 Git 仓库接入 Flux(关联业务代码仓)

目录结构参考:

mix-project Git 仓库
└── mix-cn-gz/
    └── gitlab/
        ├── gitlab-hr.yaml
        └── gitlab-kustomization.yaml
# 1. (可选)创建 Git 仓库认证 Secret(私有仓库专用)
kubectl create secret generic gitlab-group-auth \
  -n flux-system \
  --from-literal=username=gitrobot-token \
  --from-literal=password=glpat-avMjcqg5X80Q6RSrfMYWxG86MQp1OmEH.01.0w18tv3sh

# 2. 添加业务 Git 仓库
flux create source git mix-project \
  --namespace flux-system \
  --url=https://gitlab.infraserviceonline.com/infra-team/mix-project.git \
  --branch=main \
  --interval=5m \
  --secret-ref=gitlab-group-auth

# 3. 创建 Kustomization 统一纳管
flux create kustomization gitlab \
  --namespace flux-system \
  --source=mix-project \
  --path="./mix-cn-gz/gitlab" \
  --prune=true \
  --interval=1m

# 4. 验证 Git 仓库源状态
flux get sources git -n flux-system

🔧 步骤 4:创建 Helm 源 & 纳管 GitLab 应用

方式一:使用官方 GitLab Helm 源

flux create source helm gitlab-official \
  --namespace flux-system \
  --url=https://charts.gitlab.io \
  --interval=1h

方式二:内网 Harbor OCI 私有 Helm 源

# 1. 登录 Harbor 仓库
helm registry login harbor.infraserviceonline.com

# 2. 拉取官方 Chart 本地缓存
helm pull gitlab/gitlab --version 9.10.3

# 3. 推送至内网 Harbor OCI
helm push gitlab-9.10.3.tgz oci://harbor.infraserviceonline.com/helm-charts

# 4. 创建 Harbor 认证 Secret
kubectl create secret generic harbor-creds \
  -n flux-system \
  --from-literal=username=admin \
  --from-literal=password=<你的Harbor密码>

HelmRepository OCI 资源清单

apiVersion: source.toolkit.fluxcd.io/v1
kind: HelmRepository
metadata:
  name: gitlab-internal
  namespace: flux-system
spec:
  interval: 1h
  type: oci
  url: oci://harbor.infraserviceonline.com/helm-charts
  secretRef:
    name: harbor-creds

FluxCD 标准流转

git push → reconcile source → reconcile kustomization → reconcile hr

# 验证 HelmRelease 状态
flux get helmreleases -n gitlab

🔧 步骤 5:手动同步应用(替代 ArgoCD Sync)

# 1. 强制刷新 Git 仓库源
flux reconcile source git mix-project

# 2. 强制刷新 Kustomization
flux reconcile kustomization gitlab

# 3. 临时开启自动同步
flux resume helmrelease gitlab -n gitlab

# 4. 手动触发 Helm 应用更新
flux reconcile helmrelease gitlab -n gitlab

# 5. 查看 HelmRelease 完整配置
kubectl get helmrelease gitlab -n gitlab -o yaml

# 6. 预览 Flux 最终渲染配置
flux build helmrelease gitlab -n gitlab | grep -i runner

# 7. 查看同步运行日志
flux logs --namespace gitlab --kind=HelmRelease --name=gitlab

# 8. 查看全部 Kustomization 资源
flux get kustomizations -A

🔍 配置一致性对比(判断是否配置漂移)

方法1:世代号比对(最精准)

kubectl get helmrelease gitlab -n gitlab -o yaml | grep -E "generation|observedGeneration"
  • generation = 配置版本
  • observedGeneration = 已落地生效版本
  • 两者一致:配置完全同步无漂移

方法2:检查资源漂移标记

kubectl describe helmrelease gitlab -n gitlab | grep -A5 -B5 Drifted

方法3:导出 Values 差异化对比

# 导出 Flux 生效 values
kubectl get helmrelease gitlab -n gitlab -o jsonpath={.spec.values} > flux-values.yaml

# 导出集群实际运行 values
helm get values gitlab -n gitlab -o yaml > real-values.yaml

# 差异对比
diff flux-values.yaml real-values.yaml

⚙️ 生产环境高可用&安全参数

# 生产高可用加固配置
install:
  remediation:
    retries: -1
  createNamespace: true

upgrade:
  remediation:
    retries: -1

test:
  enable: true
  ignoreFailures: false

# 开启配置漂移检测
driftDetection:
  mode: enabled

关键参数说明

  1. suspend: true
    【 更新前确认】作用:更新前把关,防止乱更 作用:更新前把关,防止乱更
    修改 Git values → 不自动更新 → 必须手动确认才更新

    • 禁用自动更新,仅手动触发发布
    • 变更需人工确认,规避自动发布风险
  2. driftDetection: enabled
    【更新后保护】作用:更新后保护,防止自动覆盖故障修复
    手动改了集群里的配置→ Flux 发现不一致 → 不自动覆盖回去

    • 检测集群人为修改的配置漂移
    • 不会自动强制覆盖,保障生产临时修复
  3. 设置资源禁止删除annotations

    helm.toolkit.fluxcd.io/ignore-policy: "delete"
  4. 设置资源禁止更新/覆盖annotations

    helm.toolkit.fluxcd.io/ignore: "true"

🧹 FluxCD 完整卸载回滚

# 前置:所有应用设置暂停同步
# 修改所有 HelmRelease / Kustomization 中 suspend: true

# 卸载集群内 Flux 所有组件
flux uninstall --namespace flux-system

📝 总结

  1. 部署流程:安装CLI → 集群初始化 → 对接Git仓库 → 配置Helm源 → 交付应用
  2. 核心优势:手动触发同步、配置渲染可预览、支持漂移检测、最小权限可控
  3. 适配场景:GitLab Helm、Istio/Kustomize、中间件全场景纳管
  4. 官方文档参考:https://fluxcd.io/flux/components/helm/api/v2/#HelmReleaseSpec

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注