mcpField
G
gitops-workflow

gitops-workflow

github.com/oimiragieo云与 DevOps4450 次安装17 周前更新
代码仓库

关于 gitops-workflow

为 Kubernetes 运维与平台团队提供 ArgoCD 和 Flux 的 GitOps 实施指南,涵盖从部署配置到渐进式交付和密钥管理。

主要功能

  1. 01ArgoCD 与 Flux 部署配置
  2. 02Git 仓库驱动的交付
  3. 03自动同步策略设置
  4. 04金丝雀与蓝绿发布
  5. 05密钥管理方案

适用场景

  1. 01为 Kubernetes 集群搭建 GitOps
  2. 02自动从 Git 部署应用
  3. 03管理多集群发布
  4. 04设置渐进式交付与同步策略

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/oimiragieo/agent-studio --skill gitops-workflow

安装后在 Claude Code 中输入/gitops-workflow确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

commands/
gitops-workflow.md
hooks/
post-execute.cjs
pre-execute.cjs
references/
argocd-setup.md
research-requirements.md
sync-policies.md
rules/
gitops-workflow.md
schemas/
input.schema.json
output.schema.json
scripts/
main.cjs
templates/
implementation-template.md

详细介绍

GitOps 工作流

使用 ArgoCD 和 Flux 实现 GitOps 工作流、自动部署 Kubernetes 的完整指南。

用途

遵循 OpenGitOps 原则,使用 ArgoCD 或 Flux CD 为 Kubernetes 实现声明式、基于 Git 的持续交付。

何时使用此技能

  • 为 Kubernetes 集群设置 GitOps
  • 从 Git 自动部署应用
  • 实现渐进式交付策略
  • 管理多集群部署
  • 配置自动同步策略
  • 在 GitOps 中设置密钥管理

OpenGitOps 原则

  1. 声明式 - 以声明式方式描述整个系统
  2. 版本化且不可变 - 将期望状态存储在 Git 中
  3. 自动拉取 - 软件 Agent 拉取期望状态
  4. 持续协调 - Agent 协调实际状态与期望状态

ArgoCD 设置

1. 安装
# Create namespace
kubectl create namespace argocd

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

# Get admin password
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d

参考: 请参阅 references/argocd-setup.md,了解详细设置步骤

2. 仓库结构
gitops-repo/
├── apps/
│   ├── production/
│   │   ├── app1/
│   │   │   ├── kustomization.yaml
│   │   │   └── deployment.yaml
│   │   └── app2/
│   └── staging/
├── infrastructure/
│   ├── ingress-nginx/
│   ├── cert-manager/
│   └── monitoring/
└── argocd/
    ├── applications/
    └── projects/
3. 创建应用
# argocd/applications/my-app.yaml
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: my-app
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://github.com/org/gitops-repo
    targetRevision: main
    path: apps/production/my-app
  destination:
    server: https://kubernetes.default.svc
    namespace: production
  syncPolicy:
    automated:
      prune: true
      selfHeal: true
    syncOptions:
      - CreateNamespace=true
4. 应用集合模式
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: applications
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://github.com/org/gitops-repo
    targetRevision: main
    path: argocd/applications
  destination:
    server: https://kubernetes.default.svc
    namespace: argocd
  syncPolicy:
    automated: {}

Flux CD 设置

1. 安装
# Install Flux CLI
curl -s https://fluxcd.io/install.sh | sudo bash

# Bootstrap Flux
flux bootstrap github \
  --owner=org \
  --repository=gitops-repo \
  --branch=main \
  --path=clusters/production \
  --personal
2. 创建 GitRepository
apiVersion: source.toolkit.fluxcd.io/v1
kind: GitRepository
metadata:
  name: my-app
  namespace: flux-system
spec:
  interval: 1m
  url: https://github.com/org/my-app
  ref:
    branch: main
3. 创建 Kustomization
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
  name: my-app
  namespace: flux-system
spec:
  interval: 5m
  path: ./deploy
  prune: true
  sourceRef:
    kind: GitRepository
    name: my-app

同步策略

自动同步配置

ArgoCD:

syncPolicy:
  automated:
    prune: true # Delete resources not in Git
    selfHeal: true # Reconcile manual changes
    allowEmpty: false
  retry:
    limit: 5
    backoff:
      duration: 5s
      factor: 2
      maxDuration: 3m

Flux:

spec:
  interval: 1m
  prune: true
  wait: true
  timeout: 5m

参考: 请参阅 references/sync-policies.md

渐进式交付

使用 ArgoCD Rollouts 进行金丝雀部署
apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
  name: my-app
spec:
  replicas: 5
  strategy:
    canary:
      steps:
        - setWeight: 20
        - pause: { duration: 1m }
        - setWeight: 50
        - pause: { duration: 2m }
        - setWeight: 100
蓝绿部署
strategy:
  blueGreen:
    activeService: my-app
    previewService: my-app-preview
    autoPromotionEnabled: false

密钥管理

External Secrets Operator
apiVersion: external-secrets.io/v1beta1
kind: ExternalSecret
metadata:
  name: db-credentials
spec:
  refreshInterval: 1h
  secretStoreRef:
    name: aws-secrets-manager
    kind: SecretStore
  target:
    name: db-credentials
  data:
    - secretKey: password
      remoteRef:
        key: prod/db/password
Sealed Secrets
# Encrypt secret
kubeseal --format yaml < secret.yaml > sealed-secret.yaml

# Commit sealed-secret.yaml to Git

最佳实践

  1. 为不同环境使用独立的仓库或分支
  2. 为 Git 仓库实施 RBAC
  3. 启用同步失败通知
  4. 为自定义资源使用健康检查
  5. 为生产环境设置审批关卡
  6. 不要将密钥存入 Git(使用 External Secrets)
  7. 使用应用集合模式进行组织管理
  8. 为发布版本添加标签,以便轻松回滚
  9. 通过告警监控同步状态
  10. 先在预发布环境测试变更

故障排除

同步失败:

argocd app get my-app
argocd app sync my-app --prune

状态不同步:

argocd app diff my-app
argocd app sync my-app --force

相关技能

  • k8s-manifest-generator - 用于创建清单
  • helm-chart-scaffolding - 用于打包应用

记忆协议(强制)

开始之前:

cat C:\dev\projects\agent-studio\.claude\context\memory\learnings.md

完成之后:

  • 新模式 -> C:\dev\projects\agent-studio\.claude\context\memory\learnings.md
  • 发现问题 -> C:\dev\projects\agent-studio\.claude\context\memory\issues.md
  • 做出决策 -> C:\dev\projects\agent-studio\.claude\context\memory\decisions.md

假定任务可能中断:如果未记录在记忆中,就等于没有发生。

评论

支持 Markdown