Contents
ArgoCDとGitOps導入の意義
Kubernetes環境における自動デプロイを実現するためには、GitOpsという手法が今後主流となると考えられています。GitOpsは、インフラやアプリケーションの構成をすべてGitリポジトリに保存し、変更をコードとして管理することで、一貫性と再現性を確保します。ArgoCDは、このGitOpsを実現する代表的なツールで、クラスタの状態をGitリポジトリと同期させることで自動デプロイを達成します。本記事では、KubernetesクラスタにArgoCDをインストールし、ローカル環境での初期設定までを具体的に解説します。
インストール方法比較(マニフェスト vs Helm)
ArgoCDのインストール方法は「マニフェスト」と「Helmチャート」の2つの選択肢があります。それぞれの特徴や使用シーンを理解することで、目的に応じて最適な手法を選べます。
マニフェストによるインストール手順
公式のYAMLファイルを使って直接Kubernetesクラスタに適用する方法です。以下が主な手順です。
-
ArgoCDのリポジトリをクローン
bash
git clone https://github.com/argoproj/argo-cd.git -
マニフェストファイルを適用
bash
kubectl apply -n argocd -f argo-cd/manifests/install.yaml -
デプロイステータスの確認
bash
kubectl get pods -n argocd
利点: ツールに依存せず、手軽に導入可能。欠点: 大規模な設定が必要な場合、カスタマイズが複雑になる可能性があります。具体的には、複数の環境(開発・ staging・本番)で異なる設定を適用する際、YAMLファイルを個別に編集し直す必要があり、手間とエラーのリスクが高まります。
Helmチャートを使用したインストール
HelmはKubernetesのパッケージマネージャーで、テンプレート化されたリソースを管理できるため、手順を簡略化できます。
-
HelmリポジトリにArgoCDを追加
bash
helm repo add argocd https://argoproj.github.io/argo-helm -
チャートのインストール
bash
helm install argocd argocd/argo-cd -n argocd -
カスタム設定が必要な場合は
values.yamlを編集して再インストール
| 項目 | 値 | 補足 |
|---|---|---|
| Ease of Use | シンプル | Helmのテンプレートが整っている |
| Customization | 中程度 | values.yamlで柔軟にカスタマイズ可能 |
| Maintenance | おすすめ | バージョン管理やアップグレードがしやすい |
利点: 複数クラスタでの一括管理が容易。欠点: Helmの環境構築が必要。
ArgoCDへのアクセス設定(ポートフォワーディング)
インストール後、Web UIにアクセスするにはkubectl port-forwardを使用します。
手順
-
Port Forwardingを実行
bash
kubectl port-forward svc/argocd-server -n argocd 8080:443 -
ブラウザでアクセス
http://localhost:8080にアクセスし、ログイン用のトークンを取得します。
注意: 初回起動時は
kubectl get pods -n argocdでargocd-serverの状態を確認し、Readyな状態になるまで待つ必要があります。
ローカル環境(kind)でのGitOps導入フロー
ローカル環境ではkindクラスタを使用してテストが可能です。
1. kindクラスタの作成
|
1 2 |
kind create cluster --name argocd-local |
2. ArgoCDのインストール(Helm版例)
|
1 2 3 |
kubectl create namespace argocd helm install argocd argocd/argo-cd -n argocd |
3. Gitリポジトリの準備と連携
-
Gitリポジトリを作成し、以下のディレクトリ構造を整えます。
/my-repo/
├── manifests/
│ └── deployment.yaml
└── argocd-app.yaml -
ArgoCDアプリケーションを定義 (
argocd-app.yaml)
yaml
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: myapp
spec:
source:
repoURL: https://github.com/your-username/my-repo.git
path: manifests -
ArgoCD UIまたはCLIからアプリケーションを登録
bash
argocd app create myapp --source https://github.com/your-username/my-repo.git --path manifests
CRDのインストールとマニフェストファイル構造解説
ArgoCDはKubernetesのカスタムリソース(CR)を用いて、アプリケーションやプロジェクトを管理します。
1. CRDとは?
Custom Resource Definition(CRD)は、Kubernetesに新しいリソースタイプを定義する仕組みです。ArgoCDでは以下のCRが使用されます:
Application– アプリケーションのデプロイ設定AppProject– プロジェクトごとのアクセス制御設定(例: 特定のチームが特定のNamespaceにアクセスできるようにする)
2. マニフェストファイルの構成
公式マニフェストは以下のような構造を持ちます。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
--- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: name: applications.argoproj.io spec: group: argoproj.io names: kind: Application scope: Cluster versions: - name: v1alpha1 served: true storage: true |
ポイント: CRDはインストールの最初に適用され、他のリソース(DeploymentやService)が依存します。マニフェストファイルにはCRD定義と、ArgoCDサーバーのデプロイメント・サービスなどが含まれます。
3. アクセス制御設定の例
以下はAppProjectでアクセス権を制限する具体例です。
|
1 2 3 4 5 6 7 8 9 10 |
apiVersion: argoproj.io/v1alpha1 kind: AppProject metadata: name: dev-project spec: sourceRepos: - https://github.com/dev-team/* destinationNamespaces: - dev-namespace |
この設定により、dev-teamリポジトリの変更はdev-namespaceのみに適用され、他のNamespaceへの影響が防げます。
まとめ
ArgoCDのインストール方法とGitOps導入フローについて詳しく解説しました。インストール方法には「マニフェスト」や「Helmチャート」があり、それぞれの特性を理解することで最適な選択ができるようになります。ローカル環境ではkindクラスタがテストに適していますし、CRDの構造を把握することでカスタマイズが容易になります。技術的正確性を保つためには、最新のYAMLファイルパスやHelmリポジトリURLを常に確認する必要があります。