宣言的マニフェストで最初のアプリケーションをデプロイする
Application リソースを使って Argo CD を Git リポジトリに向け、同期の様子を確認します。
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 がクラスターをそれに収束させます。この動作を制御する方法は次のガイドで説明します。