Argo CD Argo CD

宣言的マニフェストで最初のアプリケーションをデプロイする

Application リソースを使って Argo CD を Git リポジトリに向け、同期の様子を確認します。

12 min learn.level.初級

Argo CD は、クラスター内の他のものと同じように Kubernetes リソースで設定します。中心となるのは Application です。「このリポジトリのこのパスにあるマニフェストを取得し、このクラスターと namespace に適用し続ける」ことを宣言します。このガイドでは、小さな設定用リポジトリを作成し、Application で登録し、Git を変更して同期が行われる様子を確認します。Argo CD がインストール済みでサインインできることを前提としています(前のガイドを参照)。

設定用リポジトリを準備する

Argo CD からアクセスできる任意のホストに、次の構成で Git リポジトリを作成します。

webapp-config/
├── application.yaml      # Argo CD の Application。一度だけ手動で適用する
└── dev/
    ├── deployment.yaml
    └── service.yaml

dev/deployment.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: webapp
spec:
  replicas: 2
  selector:
    matchLabels:
      app: webapp
  template:
    metadata:
      labels:
        app: webapp
    spec:
      containers:
        - name: webapp
          image: nginx:1.25
          ports:
            - containerPort: 80

dev/service.yaml:

apiVersion: v1
kind: Service
metadata:
  name: webapp
spec:
  selector:
    app: webapp
  ports:
    - port: 80
      targetPort: 80

マニフェストには意図的に namespace を記述していません。Argo CD は、次に設定する宛先 namespace にこれらを適用します。application.yaml は同期対象のパス(dev/)の外に置いてください。そうしないと、アプリケーションが自分自身の定義を管理しようとしてしまいます。リポジトリがプライベートの場合は、先に UI の Settings → Repositories で認証情報を追加します。

Application マニフェストを書く

application.yaml:

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: webapp-dev
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://github.com/your-org/webapp-config.git
    targetRevision: HEAD
    path: dev
  destination:
    server: https://kubernetes.default.svc
    namespace: webapp
  syncPolicy:
    syncOptions:
      - CreateNamespace=true
    automated:
      prune: true
      selfHeal: true

重要なポイントは次のとおりです。

  • source は望ましい状態の置き場所です。リポジトリ、追跡するリビジョン(HEAD はデフォルトブランチを追跡)、その中のフォルダを指定します。
  • destination は適用先です。https://kubernetes.default.svc は「Argo CD 自身が動作しているクラスター」を意味します。外部クラスターを管理するには、そのクラスターを登録し、その API サーバーのアドレスを使います。
  • project: default はアプリケーションを Argo CD 組み込みのプロジェクトに入れます。プロジェクトはアプリケーションをグループ化し、デプロイできる対象を制限します。
  • syncPolicy は自動同期を有効にし、namespace が存在しない場合は作成します。prune と selfHeal の動作は別のガイドで説明します。apiVersion はリリース間で最も変わりやすいフィールドなので、最新のドキュメントで確認してください。

アプリケーションを登録する

リポジトリを commit して push し、マニフェストを一度だけクラスターに適用します。

kubectl apply -f application.yaml

このアプリケーションについて kubectl apply を実行するのは、理想的にはこれが最後です。以降の変更は Git を通じて行います。

リソースツリーを確認する

UI を開きます。webapp-dev アプリケーションが表示され、数秒以内に Synced と Healthy になります。開くと、Service、Deployment、その背後の ReplicaSet、2 つの Pod というリソースツリーが表示されます。リソースを選択すると、ライブマニフェスト、イベント、(Pod の場合は)ログを確認でき、ターミナルに切り替えるより早いことがよくあります。クラスター側からも確認します。

kubectl get all -n webapp

Git を変更して同期を確認する

リポジトリの dev/deployment.yaml を編集してイメージタグを nginx:1.26 に変更し、追跡しているブランチに commit します。Argo CD はデフォルトで 3 分ごとにリポジトリをポーリングするため、待つか、アプリケーションの Refresh をクリックして即座にチェックさせます。アプリケーションは一時的に OutOfSync となり、その後、新しい ReplicaSet がロールアウトされます。変更が反映されたことを確認します。

kubectl get deploy webapp -n webapp \
  -o jsonpath='{.spec.template.spec.containers[0].image}'; echo

これが一連の流れのすべてです。Git を編集すれば、Argo CD がクラスターをそれに収束させます。この動作を制御する方法は次のガイドで説明します。

人気のガイド