mcpField
G
gitops-workflow

gitops-workflow

github.com/wshobsonクラウド・DevOps41.9k11.8k 回インストール2 週間前に更新
リポジトリ

gitops-workflow について

Kubernetesで宣言型のGitベース継続的デリバリーを導入するチーム向けの実践ガイドです。ArgoCDとFluxの設定から、同期ポリシー、段階的デリバリー、シークレット管理まで扱います。

主な機能

  1. 01ArgoCDとFluxの設定ガイド
  2. 02Git駆動のKubernetesデプロイ
  3. 03自動同期と状態の調整
  4. 04カナリアおよびブルーグリーンリリース
  5. 05GitOpsのシークレット管理

活用シーン

  1. 01KubernetesクラスターへのGitOps導入
  2. 02Gitからのアプリ自動デプロイ
  3. 03マルチクラスターと同期ポリシーの管理
  4. 04段階的デリバリーとシークレットの設定

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/wshobson/agents --skill gitops-workflow

インストール後、Claude Code で/gitops-workflowを入力して読み込まれたか確認します。

同梱ファイルreferences/argocd-setup.mdreferences/sync-policies.md

詳細

GitOps ワークフロー

ArgoCD と Flux を使用して、Kubernetes の自動デプロイを実現する GitOps ワークフローを実装するための完全ガイドです。

目的

OpenGitOps の原則に従い、ArgoCD または Flux CD を使用して Kubernetes 向けの宣言的な Git ベースの継続的デリバリーを実装します。

このスキルを使用する場面

  • Kubernetes クラスター向けに GitOps をセットアップする
  • Git からのアプリケーションデプロイを自動化する
  • プログレッシブデリバリー戦略を実装する
  • マルチクラスターのデプロイを管理する
  • 自動同期ポリシーを構成する
  • GitOps におけるシークレット管理をセットアップする

OpenGitOps の原則

  1. 宣言的 - システム全体を宣言的に記述する
  2. バージョン管理され不変 - 望ましい状態を Git に保存する
  3. 自動的にプルされる - ソフトウェアエージェントが望ましい状態をプルする
  4. 継続的に調整される - エージェントが実際の状態と望ましい状態を調整する

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. App of Apps パターン
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. インストール

この例では Homebrew を使用します。その他のシステムについては、 Flux の公式インストールガイドに従ってください。

# Install the Flux CLI with Homebrew
brew install fluxcd/tap/flux
flux check --pre

# 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
Blue-Green デプロイ
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. 整理のために App of Apps パターンを使用する
  8. 簡単にロールバックできるようにリリースにタグを付ける
  9. アラートで同期ステータスを監視する
  10. まずステージング環境で変更をテストする

トラブルシューティング

同期の失敗:

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

Out of sync ステータス:

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

関連スキル

  • k8s-manifest-generator - マニフェストの作成用
  • helm-chart-scaffolding - アプリケーションのパッケージング用

コメント