Argo CD入門:Applicationを1つ同期してGitOpsを確認する

中級 | 12分 で読める | 2026.04.24

公式ドキュメント

Argo CDは、Gitに置かれた望ましい状態とKubernetesクラスタの状態を比較し、差分を同期するGitOpsツールです。今回は公式guestbookのApplicationを一つだけ作ります。

今回やること

Argo CDがGitのdesired stateとcluster状態の差分を検出し、desired stateをclusterへ反映してcluster状態を再確認する一方向の図

Gitのguestbook → Argo CD Application → 学習用クラスタ → Synced / Healthy

前提: 自分のローカルminikubeなど、削除してよい学習用クラスタを使います。共有・本番クラスタでは実行しません。

Argo CDを導入する

現在のクラスタを確認してから、公式のgetting started手順で導入します。

kubectl config current-context
kubectl create namespace argocd
kubectl apply --server-side --force-conflicts -n argocd \
  -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
kubectl wait --for=condition=Ready pod --all \
  -n argocd --timeout=300s

stable URLは学習用の簡略手順です。チーム環境では、変更内容を確認したリリース版のmanifestをGitで管理し、版を固定します。

Applicationを一つ作る

guestbook-application.yamlを作ります。

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: guestbook
  namespace: argocd
  finalizers:
    - resources-finalizer.argocd.argoproj.io
spec:
  project: default
  source:
    repoURL: https://github.com/argoproj/argocd-example-apps.git
    targetRevision: HEAD
    path: guestbook
  destination:
    server: https://kubernetes.default.svc
    namespace: guestbook
  syncPolicy:
    automated:
      prune: true
      selfHeal: true
    syncOptions:
      - CreateNamespace=true
kubectl apply -f guestbook-application.yaml
kubectl get application guestbook -n argocd

この例は学習用のためHEADを追います。本番ではレビュー済みのcommit SHAやtagへ固定し、予期しない変更が入らないようにします。

同期を確認する

Argo CDがGitを読み、guestbook namespaceへリソースを作るまで待ちます。

kubectl get application guestbook -n argocd --watch

SYNC STATUSSyncedHEALTH STATUSHealthyになったらCtrl + Cで止めます。詳細は次でも確認できます。

kubectl get application guestbook -n argocd \
  -o jsonpath='{.status.sync.status}{" / "}{.status.health.status}'
kubectl get all -n guestbook

成功確認

  • ApplicationがSyncedになる
  • ApplicationがHealthyになる
  • guestbook namespaceにDeployment、Service、Podが作られる
  • GitのpathとクラスタのリソースがApplicationで結び付いている

自動同期を有効にしたため、手動のSyncボタンは押しません。Applicationを作った後、Argo CD自身が同期することを確認します。

よくあるつまずき

ApplicationがUnknownのまま

Argo CDのPodがReadyか、クラスタからGitHubへ接続できるかを確認します。

kubectl get pods -n argocd
kubectl describe application guestbook -n argocd

OutOfSyncが続く

ApplicationのEventsとConditionsを読み、manifestのエラーや権限不足を確認します。焦ってクラスタを直接直すとGitとの差分が残るため、原因となる定義を確認します。

練習

guestbook-application.yamlsyncPolicy.automatedを一度コメントアウトした場合、作成直後の状態がどう変わるか予想してください。自動同期と手動同期の違いを説明できれば成功です。

後片付け

finalizerによりguestbook側も削除されることを確認します。

kubectl delete application guestbook -n argocd
kubectl get all -n guestbook
kubectl delete namespace guestbook

finalizerはApplicationが追跡するDeploymentやServiceを削除します。CreateNamespace=trueで作られたnamespaceは残る場合があるため、空になったことを確認してから明示的に削除します。

Applicationが消えた後、この学習で入れたArgo CD自体も不要なら削除します。

kubectl delete namespace argocd

共有クラスタではnamespaceを削除しません。ローカルクラスタ全体を消す場合はKubernetes入門の手順を使います。

次のステップ

参考リソース

← 一覧に戻る
PR
PR
PR
PR