weaveworks/fluxFlux 是 Weaveworks 开发的开源 GitOps 工具,旨在通过 Git 仓库实现 Kubernetes 集群配置与应用的声明式管理。它将集群期望状态(如部署配置、资源清单、应用版本等)存储在 Git 仓库中,通过持续监控 Git 仓库变更,自动同步配置至 Kubernetes 集群,实现"Git 即事实来源"的运维模式,简化集群管理并提升部署可靠性。
Flux 通常通过其 CLI 工具或 Kubernetes 资源清单在集群中部署。以下是基本安装步骤:
bash# macOS (Homebrew) brew install fluxcd/tap/flux # Linux (手动下载) curl -s [***] | sudo bash # 验证安装 flux --version
在目标 Kubernetes 集群中初始化 Flux,指定 Git 仓库作为配置源:
bashflux bootstrap git \ --url=ssh://***/<用户名>/<仓库名>.git \ --branch=main \ --private-key-file=<本地SSH私钥路径> \ --path=clusters/my-cluster
--url:Git 仓库地址(支持 SSH/HTTPS)--branch:目标分支--private-key-file:SSH 私钥路径(用于访问私有仓库,HTTPS 仓库可替换为 --token-auth 和 --username/--password)--path:仓库中存储集群配置的目录路径Flux 通过自定义资源(CRD)定义 Git 仓库、部署策略等,以下是常用资源示例:
创建 git-repo.yaml,声明要同步的 Git 仓库:
yamlapiVersion: source.toolkit.fluxcd.io/v1 kind: GitRepository metadata: name: my-app-config namespace: flux-system spec: interval: 1m0s # 同步间隔 url: ssh://***/<用户名>/<仓库名>.git ref: branch: main secretRef: name: git-credentials # 存储 Git 认证信息的 Secret 名称
创建 kustomization.yaml,指定从 Git 仓库中同步的资源路径及部署策略:
yamlapiVersion: kustomize.toolkit.fluxcd.io/v1 kind: Kustomization metadata: name: my-app namespace: flux-system spec: interval: 5m0s path: ./kustomize/prod # Git 仓库中相对于 GitRepository 根目录的配置路径 prune: true # 自动删除 Git 仓库中已移除的资源 sourceRef: kind: GitRepository name: my-app-config # 关联上述 GitRepository 资源 healthChecks: - apiVersion: apps/v1 kind: Deployment name: my-app namespace: prod # 健康检查:等待 Deployment 就绪
bash# 检查 Flux 组件状态 flux get sources git # 查看 GitRepository 同步状态 flux get kustomizations # 查看 Kustomization 部署状态 # 查看资源事件 kubectl describe gitrepository/my-app-config -n flux-system kubectl describe kustomization/my-app -n flux-system
Flux 主要通过以下自定义资源定义集群状态:
Flux 控制器(如 source-controller、kustomize-controller)支持通过环境变量调整行为,常见配置:
LOG_LEVEL:日志级别(默认 info,可选 debug)。HTTP_PROXY/HTTPS_PROXY/NO_PROXY:代理配置。HEALTH_PROBE_ADDR:健康检查地址(默认 :9440)。METRICS_ADDR:指标暴露地址(默认 :8080)。如需通过 Helm 部署应用,可定义 HelmRelease 资源:
yamlapiVersion: helm.toolkit.fluxcd.io/v2 kind: HelmRelease metadata: name: my-helm-app namespace: prod spec: interval: 1h chart: spec: chart: my-chart version: "1.2.3" sourceRef: kind: HelmRepository name: my-helm-repo # 关联 HelmRepository 资源 namespace: flux-system values: replicaCount: 3 image: repository: my-registry/my-app tag: "1.0.0" upgrade: remediation: retries: 3 # 升级失败时重试次数
flux suspend/flux resume 命令可临时暂停/恢复资源同步。manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务