gitops-workflow について
Kubernetesで宣言型のGitベース継続的デリバリーを導入するチーム向けの実践ガイドです。ArgoCDとFluxの設定から、同期ポリシー、段階的デリバリー、シークレット管理まで扱います。
主な機能
- 01ArgoCDとFluxの設定ガイド
- 02Git駆動のKubernetesデプロイ
- 03自動同期と状態の調整
- 04カナリアおよびブルーグリーンリリース
- 05GitOpsのシークレット管理
活用シーン
- 01KubernetesクラスターへのGitOps導入
- 02Gitからのアプリ自動デプロイ
- 03マルチクラスターと同期ポリシーの管理
- 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 の原則
- 宣言的 - システム全体を宣言的に記述する
- バージョン管理され不変 - 望ましい状態を Git に保存する
- 自動的にプルされる - ソフトウェアエージェントが望ましい状態をプルする
- 継続的に調整される - エージェントが実際の状態と望ましい状態を調整する
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
ベストプラクティス
- 環境ごとに別々のリポジトリまたはブランチを使用する
- Git リポジトリに対して RBAC を実装する
- 同期失敗の通知を有効にする
- カスタムリソースに対してヘルスチェックを使用する
- 本番環境に承認ゲートを実装する
- シークレットを Git に保存しない(External Secrets を使用する)
- 整理のために App of Apps パターンを使用する
- 簡単にロールバックできるようにリリースにタグを付ける
- アラートで同期ステータスを監視する
- まずステージング環境で変更をテストする
トラブルシューティング
同期の失敗:
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- アプリケーションのパッケージング用
コメント
Markdown 対応