mcpField
G
gitops-workflow

gitops-workflow

github.com/ormus-solutionsクラウド・DevOps12377 回インストール4 週間前に更新
リポジトリ

gitops-workflow について

ArgoCDまたはFluxを使い、Gitベースの継続的デリバリーをKubernetesに導入するための実践ガイドです。宣言的なデプロイ、同期ポリシー、段階的リリース、複数クラスターの管理を扱います。

主な機能

  1. 01ArgoCDとFluxのセットアップ手順
  2. 02Gitベースの宣言的デプロイ
  3. 03自動同期と調整ポリシー
  4. 04カナリアとブルーグリーンのリリースパターン
  5. 05シークレット管理の方法

活用シーン

  1. 01KubernetesクラスターへのGitOps導入
  2. 02Gitリポジトリからのデプロイ自動化
  3. 03複数クラスターのリリース管理
  4. 04段階的リリースとシークレットの設定

インストール

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

$npx skills add https://github.com/ormus-solutions/libreuiux-claude-code --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. インストール
# 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. 構成を整理するためにApp of Apps パターンを使用します
  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 - アプリケーションのパッケージ化に使用

コメント