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% 的折扣。