Flux GitOps K8S 持续交付教程

Flux 是 CNCF 毕业项目,是 Kubernetes 上实现 GitOps 持续交付的主流工具之一。与 ArgoCD 不同,Flux 采用声明式的控制器架构,通过多个独立的控制器分别负责 Git 源管理、Kustomize 部署、Helm 发布等功能。本文介绍如何在搬瓦工 VPS 的 Kubernetes 环境上部署和使用 Flux。

一、安装 Flux CLI

curl -s https://fluxcd.io/install.sh | bash
flux --version

# 检查集群兼容性
flux check --pre

二、引导安装 Flux

# 使用 GitHub 仓库引导(推荐)
flux bootstrap github \
  --owner=your-github-username \
  --repository=fleet-infra \
  --path=clusters/my-cluster \
  --personal

# 使用 GitLab 仓库引导
flux bootstrap gitlab \
  --owner=your-gitlab-username \
  --repository=fleet-infra \
  --path=clusters/my-cluster \
  --personal

# 验证安装
flux check
kubectl get pods -n flux-system

三、Flux 核心组件

  • Source Controller:管理 Git 仓库、Helm 仓库和 OCI 仓库的连接和同步。
  • Kustomize Controller:负责将 Kustomize 配置或原生 YAML 部署到集群。
  • Helm Controller:管理 Helm Release 的安装和升级。
  • Notification Controller:处理事件通知和外部触发。
  • Image Automation Controller:自动检测容器镜像更新并提交到 Git。

四、添加应用源

# 添加 Git 仓库源
flux create source git myapp \
  --url=https://github.com/user/myapp-config \
  --branch=main \
  --interval=1m

# 查看源状态
flux get sources git

# 添加 Helm 仓库源
flux create source helm bitnami \
  --url=https://charts.bitnami.com/bitnami \
  --interval=1h

五、部署 Kustomization

# 创建 Kustomization 资源
flux create kustomization myapp \
  --source=GitRepository/myapp \
  --path="./deploy/production" \
  --prune=true \
  --interval=5m \
  --health-check="Deployment/myapp.default"

# 查看 Kustomization 状态
flux get kustomizations

# 手动触发同步
flux reconcile kustomization myapp

六、部署 Helm Release

# 创建 Helm Release
flux create helmrelease nginx \
  --source=HelmRepository/bitnami \
  --chart=nginx \
  --target-namespace=web \
  --create-target-namespace \
  --values=./nginx-values.yaml

# 查看 Helm Release 状态
flux get helmreleases -A

# 暂停/恢复自动同步
flux suspend helmrelease nginx
flux resume helmrelease nginx

七、镜像自动更新

# 配置镜像仓库扫描
flux create image repository myapp \
  --image=docker.io/user/myapp \
  --interval=5m

# 配置镜像标签策略
flux create image policy myapp \
  --image-ref=myapp \
  --select-semver=">=1.0.0"

# 配置镜像自动更新(自动提交 Git)
flux create image update myapp \
  --git-repo-ref=myapp \
  --git-repo-path="./deploy" \
  --checkout-branch=main \
  --push-branch=main \
  --author-name=flux \
  --author-email=flux@example.com

# 在 YAML 中标记需要自动更新的镜像
# image: user/myapp:1.0.0 # {"$imagepolicy": "flux-system:myapp"}

八、通知配置

# 配置 Slack 通知
cat > notification.yaml <<'EOF'
apiVersion: notification.toolkit.fluxcd.io/v1beta3
kind: Provider
metadata:
  name: slack
  namespace: flux-system
spec:
  type: slack
  channel: deployments
  secretRef:
    name: slack-webhook
---
apiVersion: notification.toolkit.fluxcd.io/v1beta3
kind: Alert
metadata:
  name: on-call
  namespace: flux-system
spec:
  providerRef:
    name: slack
  eventSeverity: error
  eventSources:
    - kind: Kustomization
      name: "*"
    - kind: HelmRelease
      name: "*"
EOF
kubectl apply -f notification.yaml

九、常见问题

同步失败排查

# 查看 Flux 日志
flux logs --all-namespaces

# 查看特定控制器日志
kubectl logs -n flux-system deploy/source-controller

# 强制同步
flux reconcile source git myapp
flux reconcile kustomization myapp

总结

Flux 是一个成熟的 GitOps 工具,其控制器架构让各功能模块解耦,可以根据需求灵活组合。在搬瓦工 VPS 上的 Kubernetes 集群中,Flux 配合 Kustomize 可以实现优雅的多环境配置管理。如果你更倾向于可视化界面,可以参考 ArgoCD。选购搬瓦工 VPS 请访问 bwh81.net,购买时使用优惠码 NODESEEK2026 可享受 6.77% 的折扣。

关于本站

搬瓦工VPS中文网(bwgvps.com)是非官方中文信息站,整理搬瓦工的方案、优惠和教程。我们不销售主机,不提供技术服务。

新手必读
搬瓦工优惠码

NODESEEK2026(优惠 6.77%)

购买时填入即可抵扣。