GitOps实现Skill implementing-gitops

GitOps技能用于在Kubernetes上实现持续交付,通过使用ArgoCD或Flux工具,以Git作为单一事实来源,实现自动部署、漂移检测、多集群管理和渐进式发布。关键词包括GitOps、Kubernetes、ArgoCD、Flux、持续交付、DevOps、云计算、自动化部署。

DevOps 0 次安装 0 次浏览 更新于 3/23/2026

name: 实现-gitops description: 使用ArgoCD或Flux为Kubernetes实施GitOps持续交付。用于基于Git作为单一事实来源的自动部署、拉取式交付、漂移检测、多集群管理和渐进式发布。

GitOps工作流程

为Kubernetes实施GitOps持续交付,使用声明式、拉取式部署模型,其中Git作为基础设施和应用程序配置的单一事实来源。

何时使用

使用GitOps工作流程于:

  • Kubernetes部署: 自动化应用程序和基础设施部署到Kubernetes集群
  • 多集群管理: 跨开发、暂存、生产和边缘集群管理部署
  • 持续交付: 实施基于拉取的CD管道,具有自动协调功能
  • 漂移检测: 自动检测并纠正与期望状态的配置偏差
  • 审计要求: 通过Git提交维护完整的审计跟踪以符合合规性
  • 渐进式交付: 实施金丝雀、蓝绿或滚动部署策略
  • 灾难恢复: 通过GitOps引导流程实现快速集群恢复

触发关键词:“部署到Kubernetes”、“ArgoCD设置”、“Flux引导”、“GitOps管道”、“环境推广”、“多集群部署”、“自动协调”

核心GitOps原则

1. Git作为单一事实来源

所有系统配置存储在Git仓库中。无需手动kubectl apply或集群修改。使用声明式清单(YAML)定义所有Kubernetes资源、环境特定覆盖、基础设施配置和应用程序部署。

2. 拉取式部署

在集群内运行的运算符从Git拉取更改并自动应用。优点包括在CI/CD管道中无需集群凭证、支持隔离环境、通过持续协调实现自我修复,以及简化CI/CD。

3. 自动协调

GitOps运算符持续比较集群实际状态与Git中的期望状态,并通过连续循环协调差异:监控Git、比较实时状态、应用差异、报告状态、重复。

4. 声明式配置

使用声明式Kubernetes清单(非命令式脚本)定义期望状态。

工具选择

ArgoCD vs Flux

决策因素 选择ArgoCD 选择Flux
团队偏好 通过Web UI进行可视化管理 CLI/API优先的工作流程
学习曲线 通过UI更容易上手 更陡峭但更灵活
架构 单体、有状态控制器 模块化、无状态控制器
多租户 内置RBAC和项目 原生Kubernetes RBAC
资源使用 较高(包含UI组件) 较低(最小控制器)
最适合 过渡到GitOps 平台工程

混合方法: 一些团队使用Flux进行基础设施管理,使用ArgoCD进行应用程序管理。

对于ArgoCD实现模式,参见references/argocd-patterns.md 对于Flux实现模式,参见references/flux-patterns.md 对于Kustomize覆盖模式,参见references/kustomize-overlays.md

快速开始

ArgoCD安装

kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

基本应用程序:

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: myapp
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://github.com/org/repo.git
    targetRevision: HEAD
    path: k8s/overlays/prod
  destination:
    server: https://kubernetes.default.svc
    namespace: myapp
  syncPolicy:
    automated:
      prune: true
      selfHeal: true

Flux引导

flux bootstrap github \
  --owner=myorg \
  --repository=fleet-infra \
  --branch=main \
  --path=clusters/production

基本Kustomization:

apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
  name: myapp
  namespace: flux-system
spec:
  interval: 10m
  path: "./k8s/prod"
  prune: true
  sourceRef:
    kind: GitRepository
    name: myapp

对于完整示例,参见examples/argocd/和examples/flux/

环境推广

基于分支策略: 开发分支 → 暂存分支 → 主分支(生产) 基于Kustomize策略: k8s/base/ → k8s/overlays/{dev,staging,prod}/

推广流程:

  1. 合并代码更改到主分支
  2. CI构建带标签的容器镜像
  3. 在环境覆盖中更新镜像标签(Git提交)
  4. GitOps运算符检测更改并部署
  5. 在环境中测试
  6. 通过更新Git推广到下一个环境

对于多环境ApplicationSet模式,参见references/argocd-patterns.md

多集群管理

ArgoCD: 使用argocd CLI注册外部集群,使用ApplicationSets按集群生成Applications,从单个ArgoCD实例管理。

Flux: 为每个集群引导Flux,使用相同Git仓库和集群特定路径,通过kubeConfig密钥配置远程集群。

对于详细的多集群模式,参见references/multi-cluster.md

渐进式交付

金丝雀部署: 逐步将流量转移到新版本,在发布期间监控指标,失败时自动回滚。

蓝绿部署: 将新版本与旧版本并行部署,原子性地切换流量,如果检测到问题则即时回滚。

ArgoCD: 使用Argo Rollouts进行渐进式交付 Flux: 集成Flagger进行自动金丝雀分析

对于渐进式交付策略和Argo Rollouts示例,参见references/progressive-delivery.md

秘密管理

GitOps要求将配置存储在Git中,但秘密必须受到保护。

工具 方法 安全性 复杂度
Sealed Secrets 为Git加密秘密 中等
SOPS 使用KMS加密文件 中等
External Secrets 引用外部保险库 中等
HashiCorp Vault 集中秘密管理 非常高

对于秘密管理集成模式,参见references/secret-management.md

漂移检测和修复

GitOps运算符持续监控Git(期望状态)和集群(实际状态)之间的漂移。

ArgoCD自动自我修复:

syncPolicy:
  automated:
    prune: true      # 移除Git中不存在的资源
    selfHeal: true   # 还原手动更改

Flux自动协调:

spec:
  interval: 10m    # 每10分钟检查
  prune: true      # 移除Git中不存在的资源
  force: true      # 在冲突时强制应用

手动操作:

# ArgoCD
argocd app get myapp           # 查看同步状态
argocd app diff myapp          # 显示差异
argocd app sync myapp          # 手动触发同步

# Flux
flux get kustomizations              # 查看同步状态
flux reconcile kustomization myapp   # 强制立即同步

对于漂移检测策略和故障排除,参见references/drift-remediation.md

同步钩子和生命周期

使用钩子在同步前后执行操作。

PreSync钩子(数据库迁移):

apiVersion: batch/v1
kind: Job
metadata:
  annotations:
    argocd.argoproj.io/hook: PreSync
    argocd.argoproj.io/hook-delete-policy: HookSucceeded

PostSync钩子(冒烟测试):

apiVersion: batch/v1
kind: Job
metadata:
  annotations:
    argocd.argoproj.io/hook: PostSync

对于完整同步钩子示例,参见examples/argocd/sync-hooks.yaml

监控和可观察性

关键指标

  • 同步状态: OutOfSync、Synced、Unknown
  • 同步频率: 协调发生的频率
  • 漂移检测: 检测配置漂移的时间
  • 同步持续时间: 应用更改的时间
  • 失败率: 失败同步的原因

ArgoCD指标:/metrics端点暴露(argocd_app_sync_totalargocd_app_infoFlux指标: 来自控制器(gotk_reconcile_conditiongotk_reconcile_duration_seconds

故障排除

常见问题

同步卡住/OutOfSync:

  • 检查Git仓库可访问性
  • 验证清单是有效YAML
  • 查看同步日志以查找错误
  • 检查资源终结器

自我修复不工作:

  • 验证syncPolicy中selfHeal已启用
  • 检查运算符具有写权限
  • 查看资源所有权标签

秘密不解密:

  • 验证SOPS/ESO控制器已安装
  • 检查KMS/Vault凭证
  • 查看加密密钥配置

CLI快速参考

ArgoCD命令

argocd app create <name>          # 创建应用程序
argocd app get <name>              # 查看状态
argocd app sync <name>             # 触发同步
argocd app diff <name>             # 显示漂移
argocd app list                    # 列出所有应用程序

Flux命令

flux create source git <name>      # 创建Git源
flux create kustomization <name>   # 创建kustomization
flux get all                       # 查看所有资源
flux reconcile <kind> <name>       # 强制协调
flux logs                          # 查看控制器日志

Kustomize命令

kustomize build k8s/overlays/prod  # 预览生成的YAML
kubectl apply -k k8s/overlays/prod # 直接应用
kubectl diff -k k8s/overlays/prod  # 显示差异

安装脚本

使用提供的安装脚本进行快速设置:

# 安装ArgoCD
./scripts/install-argocd.sh

# 引导Flux
export GITHUB_TOKEN=<token>
export GITHUB_OWNER=<org>
export GITHUB_REPO=fleet-infra
./scripts/install-flux.sh

# 检查漂移
./scripts/check-drift.sh

# 推广环境
./scripts/promote-env.sh dev staging

示例文件

在examples/目录中提供完整的工作示例:

ArgoCD示例:

  • examples/argocd/application.yaml - 基本Application
  • examples/argocd/applicationset.yaml - 多环境ApplicationSet
  • examples/argocd/progressive-rollout.yaml - 渐进式发布策略
  • examples/argocd/sync-hooks.yaml - PreSync/PostSync钩子

Flux示例:

  • examples/flux/gitrepository.yaml - Git源配置
  • examples/flux/kustomization.yaml - Kustomization控制器
  • examples/flux/helmrelease.yaml - Helm发布管理
  • examples/flux/ocirepository.yaml - OCI artifact源

Kustomize示例:

  • examples/kustomize/base/ - 基础配置
  • examples/kustomize/overlays/{dev,staging,prod}/ - 环境覆盖

发布示例:

  • examples/rollouts/canary.yaml - 使用Argo Rollouts的金丝雀部署
  • examples/rollouts/blue-green.yaml - 蓝绿部署策略

相关技能

  • kubernetes-operations: Kubernetes基础知识和资源管理
  • infrastructure-as-code: 预配置GitOps部署到的集群
  • building-ci-pipelines: CI构建镜像,GitOps部署它们
  • secret-management: Vault/ESO与GitOps的集成
  • deploying-applications: GitOps作为部署机制

总结

GitOps为Kubernetes提供自动化、声明式的持续交付,以Git作为单一事实来源。选择ArgoCD用于UI驱动的工作流程,或选择Flux用于CLI/API优先的方法。实施自动协调、漂移检测和渐进式交付,以实现可靠的大规模部署。集成秘密管理、多集群编排和灾难恢复,以构建生产级GitOps工作流程。