Contents
前提条件とインストール環境
Argo CD のデプロイには Kubernetes クライアントとコンテナ実行基盤が必要です。ここでは推奨バージョンと、各ツールの取得方法を最新リリースに合わせて記載します。
必要ツールと推奨バージョン
| ツール | 推奨バージョン (2026年時点) | インストール例 |
|---|---|---|
| kubectl | v1.28 以上 | curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl" |
| Docker | Engine 24.x 系列 | Docker Desktop の公式サイトからインストーラを取得 |
| kind | v0.22.0 以上 | GO111MODULE=on go install sigs.k8s.io/kind@v0.22.0 |
macOS、Linux、Windows(WSL2)それぞれ上記コマンドを実行すればインストール完了です。
ローカル kind クラスタ作成
ローカル環境で Argo CD を試すための最小構成クラスタを作ります。以下は 設定ファイル作成 → クラスタ生成 → 動作確認 の流れです。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
# 1. 任意の設定ファイル (kind-config.yaml) を用意 cat <<'EOF' > kind-config.yaml kind: Cluster apiVersion: kind.x-k8s.io/v1alpha4 nodes: - role: control-plane extraPortMappings: - containerPort: 30080 # Argo CD UI 用ポート例 hostPort: 8080 EOF # 2. クラスタ作成 kind create cluster --name argo-demo --config kind-config.yaml # 3. ノードの状態確認(Ready が出れば OK) kubectl get nodes |
kubectl get nodes が Ready を示せば、以降の手順はすべてこのローカルクラスタ上で実行できます。
Argo CD の公式マニフェストによるインストール
Argo CD は公式リポジトリから提供される install.yaml ひとつで全コンポーネントをデプロイできます。ここでは「最新安定版タグを取得」する方法と、バージョン固定の落とし穴について解説します。
最新リリースタグの取得
stable ブランチは過去に「常に最新」とされてきましたが、実際にはブランチの更新タイミングが遅れるケースがあります。安全策として GitHub API で現在の最新タグを取得 し、そのタグを URL に埋め込むことを推奨します。
|
1 2 3 4 5 6 7 8 9 |
# 最新リリースタグ (例: v2.12.3) を自動取得 LATEST_TAG=$(curl -s https://api.github.com/repos/argoproj/argo-cd/releases/latest | jq -r .tag_name) # 取得したタグで install.yaml をダウンロード curl -sSL "https://raw.githubusercontent.com/argoproj/argo-cd/${LATEST_TAG}/manifests/install.yaml" \ -o install.yaml echo "Downloading Argo CD manifest for ${LATEST_TAG}" |
ポイント:
$LATEST_TAGが自動で最新バージョンに置き換わるため、将来的に古いタグが残っていることを心配する必要はありません。
Namespace 作成とマニフェスト適用
|
1 2 3 4 5 6 |
# 1. Argo CD 用 namespace の作成 kubectl create namespace argocd # 2. ダウンロードした install.yaml を適用(-n argocd は省略可だが明示的に書くのがベストプラクティス) kubectl apply -f install.yaml -n argocd |
デプロイ結果の確認
|
1 2 |
kubectl get pods -n argocd |
| コンテナ名 | 推奨稼働状態 |
|---|---|
argocd-server |
Running |
argocd-repo-server |
Running |
argocd-application-controller |
Running |
argocd-dex-server (任意) |
Running |
すべて Running かつ READY=1/1 が確認できればインストールは成功です。
UI と CLI の初期設定
Argo CD は Web UI と argocd CLI の二本柱で操作します。本節では安全に管理者パスワードを取得し、TLS 設定が不完全な環境での --insecure 使用リスクと代替手段についても触れます。
Port‑Forward による UI アクセス
|
1 2 |
kubectl -n argocd port-forward svc/argocd-server 8080:443 |
ブラウザで https://localhost:8080 にアクセスするとログイン画面が表示され、自己署名証明書の警告は 無視せず 「例外として追加」するだけに留めます。
初期 admin パスワード取得
|
1 2 3 |
kubectl -n argocd get secret argocd-initial-admin-secret \ -o jsonpath="{.data.password}" | base64 -d |
出力された文字列は 初回ログイン専用 のパスワードです。必ず保存し、ログイン後に変更してください。
argocd CLI の取得(最新バイナリ)
|
1 2 3 4 5 6 |
# 最新タグを再利用してバイナリを取得 LATEST_TAG=$(curl -s https://api.github.com/repos/argoproj/argo-cd/releases/latest | jq -r .tag_name) curl -sSL -o argocd "https://github.com/argoproj/argo-cd/releases/download/${LATEST_TAG}/argocd-linux-amd64" chmod +x argocd sudo mv argocd /usr/local/bin/ |
Windows の場合は argocd-windows-amd64.exe を同様に取得し、PATH に追加してください。
CLI でのログインと --insecure の取扱い
|
1 2 3 4 5 6 |
# 例: 自己署名証明書を使用しているローカル環境のみ --insecure を付与 argocd login localhost:8080 \ --username admin \ --password <取得したパスワード> \ --insecure |
運用環境でのリスク
- 中間者攻撃(MITM)に対して暗号化が無効になる
- 認証情報が平文で送信される可能性
代替手段
1. Ingress/LoadBalancer に正規証明書を設定(Let's Encrypt など)
2. argocd-cm ConfigMap の tls.certificates 項目でサーバー証明書を直接注入
3. クライアント側に CA バンドルを配置し、--insecure を外す
本番環境では必ず 1 または 2 のいずれかを採用し、--insecure は使用しないよう徹底してください。
GitHub 連携とサンプルアプリのデプロイ
GitOps の核となるリポジトリ認証設定と、実際に Application を作成して自動同期させるまでを順番に解説します。ここでは SSH 鍵方式 を推奨しつつ、PAT(Personal Access Token)での代替手順も示します。
SSH キーによるリポジトリ認証(推奨)
|
1 2 3 4 5 6 7 8 9 10 11 12 |
# 1. SSH 鍵ペアを生成(パスフレーズは空でも可) ssh-keygen -t ed25519 -C "argocd@example.com" -f ~/.ssh/argocd_key -N "" # 2. 公開鍵を GitHub に登録 # Settings → SSH and GPG keys → New SSH key # 3. 秘密鍵を Kubernetes Secret として保存 kubectl -n argocd create secret generic github-ssh-key \ --from-file=sshPrivateKey=~/.ssh/argocd_key # 4. Argo CD が自動で検出し、リポジトリ設定に反映されます。 |
HTTPS + PAT(代替手段)
| 手順 | 内容 |
|---|---|
| 1 | GitHub の Settings → Developer settings → Personal access tokens で repo スコープ付きの PAT を作成 |
| 2 | Secret 作成 kubectl -n argocd create secret generic github-pat --from-literal=username=<GitHubユーザ> --from-literal=password=<PAT> |
| 3 | UI/CLI の「Repository」追加画面で type: https とシークレット名を指定 |
Application マニフェスト(最小構成)
以下は公式サンプルリポジトリ argoproj/argo-cd-example-apps を対象にした Application 定義です。自動同期 (automated) が有効になっているため、Git にプッシュするだけで即時デプロイが走ります。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
apiVersion: argoproj.io/v1alpha1 kind: Application metadata: name: guestbook namespace: argocd spec: project: default source: repoURL: https://github.com/argoproj/argo-cd-example-apps.git targetRevision: HEAD path: guestbook destination: server: https://kubernetes.default.svc # ローカル kind クラスタを指す namespace: default syncPolicy: automated: prune: true # 不要リソースは自動削除 selfHeal: true # Git と乖離したら自動復旧 retry: limit: 5 |
|
1 2 3 |
# マニフェスト適用で Argo CD に登録 kubectl apply -f guestbook-app.yaml -n argocd |
Sync 操作と結果確認
- UI:Application 一覧 → 対象アプリ → SYNC ボタン → Synchronize
- CLI:
argocd app sync guestbook
デプロイ成功の目安は以下コマンドで Pod が READY 1/1 になることです。
|
1 2 |
kubectl get pods -n default -l app=guestbook |
本番環境への移行と高度なセキュリティ対策
ローカルでの検証が完了したら、本番クラスタへ同一マニフェストを適用します。実運用では 永続化、Ingress 設計、リソース制限、RBAC の細分化 が必須です。
本番向け設定チェックリスト
| 項目 | 推奨内容 |
|---|---|
| 外部 DB / 永続化 | argocd-dex・redis などは StatefulSet と PVC を利用し、バックアップポリシーを策定 |
| Ingress / LoadBalancer | NGINX Ingress Controller またはクラウド LB(ALB/ELB)で HTTPS 終端。service.type=LoadBalancer のみでは外部からの証明書管理が困難 |
| リソース上限 | resources.requests.cpu: 200m, resources.limits.cpu: 500m, memory: 256Mi‑512Mi をベースに調整 |
| Namespace 分離 | 本番環境は argocd-prod 等別名で作成し、開発・ステージングと RBAC を分離 |
admin パスワードの安全な変更方法
以下コマンドはシェル展開を正しく行い、admin.passwordMtime に現在の UNIX 時間を設定します。--type=merge で既存シークレットに上書きする形です。
|
1 2 3 4 5 |
NEW_PASS="strongPassword!2026" kubectl -n argocd patch secret argocd-secret \ --type=merge \ -p "{\"stringData\":{\"admin.password\":\"${NEW_PASS}\",\"admin.passwordMtime\":\"$(date +%s)\"}}" |
ポイント:
$(date +%s)がシェル側で評価され、JSON に正しい数値が埋め込まれます。以前の"$()"を文字列として渡すミスを防げます。
本番向け RBAC 設計(詳細ポリシー例)
argocd-rbac-cm ConfigMap にはロールベースのアクセス制御を書き込みます。実運用では以下のように プロジェクト単位、名前空間単位 の細かい権限付与が推奨されます。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
apiVersion: v1 kind: ConfigMap metadata: name: argocd-rbac-cm namespace: argocd data: policy.csv: | # 読み取り専用ロール(全リソース) p, role:readonly, applications, get, */*, allow # 開発者は自プロジェクトの Application の作成・更新・削除のみ可 p, role:dev-team, applications, create, default/*, allow p, role:dev-team, applications, update, default/*, allow p, role:dev-team, applications, delete, default/*, allow # オペレーションチームは全プロジェクトの管理権限を保持 p, role:ops, *, *, */*, allow # ユーザーとロールの紐付け(例:GitHub のメールアドレス) g, alice@example.com, role:dev-team g, bob@example.com, role:readonly g, ops@example.com, role:ops |
|
1 2 |
kubectl apply -f rbac-config.yaml -n argocd |
実務での留意点
- 最小権限の原則(Principle of Least Privilege) を徹底し、不要な * 許可は排除。
- OIDC / SAML 連携時は外部 IdP の属性マッピングでロール付与を自動化すると管理が楽になる。
- ポリシー変更後は必ず UI/CLI で権限テストを行い、意図しないアクセスが許可されていないか検証。
TLS 証明書の本番導入(Ingress 経由)
自己署名証明書から脱却し、公開 CA(例:Let’s Encrypt)で取得した証明書を Ingress に組み込みます。cert-manager がインストール済みの場合は以下だけで自動取得・更新が完了します。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: argocd-ingress namespace: argocd annotations: cert-manager.io/cluster-issuer: letsencrypt-prod # cert-manager 用設定 spec: tls: - hosts: - argo.example.com secretName: argo-tls rules: - host: argo.example.com http: paths: - path: / pathType: Prefix backend: service: name: argocd-server port: number: 443 |
適用後、kubectl get secret -n argocd argo-tls -o yaml で証明書が格納されていることを確認してください。
まとめ
- 前提条件:最新版の
kubectl・Docker・kindをインストールし、ローカル kind クラスタを作成すれば準備完了です。 - 最新マニフェスト取得:GitHub API で取得したタグ (
$LATEST_TAG) を用いることで、バージョン固定のリスクを回避できます。 - 初期設定:Port‑Forward とシークレット取得で管理者パスワードを入手し、
--insecureの使用はローカル限定に留め、実運用では正規証明書を必ず導入してください。 - GitHub 連携:SSH 鍵方式が推奨です。PAT は代替として残しておくと便利です。
- Application デプロイ:自動同期 (
automated) により GitOps がシームレスに機能します。 - 本番移行:永続化、Ingress 設計、リソース制限、細分化された RBAC ポリシーを組み込むことで、運用レベルの安全性が確保できます。
この手順通りに実施すれば、初心者でも ローカル環境から本番クラスタまで 安全かつ最新状態の Argo CD を構築でき、GitOps による継続的デリバリー基盤を即座に活用できます。