Contents
GitOpsとArgoCDによるKubernetes管理の概要
GitOpsはコードでインフラ構成を定義し、Gitリポジトリを通じて継続的デリバリー(CD)を実現する手法です。これにより、Kubernetes環境の運用効率が大きく向上します。ArgoCDはその代表的なツールであり、KubernetesクラスターとGitリポジトリを連携させることで自動化された運用が可能になります。
本記事では、DevOpsエンジニア向けにArgoCDによるGitOps導入の具体的な手順を解説します。テスト環境での検証やセキュリティ対策といった実践的なポイントを網羅し、読者が即座に導入できる知識をお届けします。
Kubernetesクラスター構築の前提条件
Kubernetesクラスターの構築には特定の環境設定とツール準備が必要です。特にクラスターバージョンが1.20以上であること、およびkubeconfigファイルの準備が不可欠です。以下のセクションで詳細を確認してください。
クラスターバージョンの確認
Kubernetes 1.20以降ではGitOpsによる自動デプロイ機能が充実しています。クラスターのバージョンを確認するには以下を実行します。
kubectl versionでクラスターのバージョンをチェック- 1.20未満の場合は、公式ドキュメントに従ってアップグレードを行う
重要: Kubernetes 1.20未満ではArgoCDの一部機能(ロールバック自動化など)が動作しない可能性があります。
kubeconfigファイルの準備
ArgoCDがクラスターに接続するためには、kubeconfigファイルが必要です。以下のように設定します。
- ファイルを
~/.kube/configに配置 kubectl config viewで接続先クラスターが正しく反映されているか確認
| 環境 | 必要条件 |
|---|---|
| Kubernetesクラスター | v1.20以上 |
| kubeconfigファイル | クラスターアクセス権限を有する |
ArgoCDのインストール手順
ArgoCDはHelmまたはkubectlでインストール可能です。両方の方法に最新バージョン(v2.6以上)を使用し、RBACの有効化が必須です。
Helm経由でのインストール
以下のようにHelmコマンドで簡単な導入が可能です。
-
Helmリポジトリを追加:
bash
helm repo add argocd https://argoproj.github.io/argo-helm -
リリースを作成(RBAC有効化):
bash
helm install argocd argocd/argo-cd --namespace argocd --create-namespace
注意: RBACを有効にしないと、ArgoCDのロールベースアクセス制御が機能せず、セキュリティリスクが高まります。
kubectlによる手動インストール
kubectl applyコマンドでも導入可能です。以下は主要な手順です。
-
ArgoCDリソース定義ファイルをダウンロード:
bash
curl -o argocd.yaml https://raw.githubusercontent.com/argoproj/argo-cd/v2.6.0/manifests/install.yaml -
インストール実行:
bash
kubectl apply -n argocd -f argocd.yaml
| 手法 | 特徴 |
|---|---|
| Helm | リリース管理が容易、バージョン管理がしやすい |
| kubectl | コマンドラインでの直接操作、手動設定が必要 |
Gitリポジトリにマニフェストファイルを配置する方法
ArgoCDはGitリポジトリの変更を監視して自動デプロイを行います。アプリケーション定義ファイルとArgoCD設定ファイルを適切な位置に配置することが重要です。
リポジトリ構造の設計
以下のようなディレクトリ構造が推奨されます。
|
1 2 3 4 5 6 7 |
my-k8s-repo/ ├── applications/ # アプリケーション定義 │ └── my-app.yaml # ArgoCDアプリケーション設定ファイル └── manifests/ # Kubernetesマニフェスト ├── deployment.yaml # デプロイ定義 └── service.yaml # サービス定義 |
例:
my-app.yamlにはクラスター名やGitリポジトリのURLを指定します。
.gitignoreの最適化
不要なファイルをコミットせず、セキュリティリスクを抑えるためには.gitignoreの設定が重要です。
- 以下のように秘密管理用ファイルを除外:
*.env
*.kubeconfig
/secrets/
| ファイルタイプ | 推奨処理 |
|---|---|
| 環境変数 | .env形式で.gitignoreに記載 |
| 秘密情報 | 外部シークレット管理ツール(Vaultなど)を使用 |
GitOpsワークフローの自動化設定
ArgoCDはGitリポジトリの変更を自動検出・適用します。CI/CDパイプラインと連携することで、よりスムーズなデプロイが実現できます。
ArgoCDとの連携
以下のようにGitリポジトリとクラスターを関連付けます。
-
ArgoCDアプリケーション設定ファイルを作成(例:
applications/my-app.yaml):
yaml
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: my-app
spec:
source:
repoURL: https://github.com/your-repo.git
path: manifests/
destination:
server: https://<k8s-cluster-url>
namespace: default
syncPolicy:
automated:
prune: true
selfHeal: true -
ArgoCDのUIまたはCLIでアプリケーションを登録
プッシュイベントによる自動デプロイ
GitHub ActionsやGitLab CIなどと連携させることで、プッシュイベントが発生したときに自動的にデプロイできます。
GitHub Actionsの設定例(main.yml):
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
name: Deploy with ArgoCD on: push: branches: - main jobs: deploy: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v3 - name: Trigger ArgoCD sync run: | curl -X POST https://<argo-cd-url>/api/v1/applications/my-app/sync |
テスト環境でのデプロイ検証手順
ステージング環境でデプロイをテストすることで、本番へのリスクを最小限に抑えられます。
ロールアウト確認
ArgoCDのUIまたはkubectlでステータスを確認します。
kubectl get pods -n defaultでPodの状態をチェック- ロールアウトステータスは以下のように表示されます:
NAME READY STATUS RESTARTS AGE
my-app-7df8596d7f-lxg4p 1/1 Running 0 3m
ロールバックシナリオ
デプロイ失敗時に自動ロールバックを実行するには、ArgoCDの設定でselfHeal: trueを指定します。
| 手順 | 内容 |
|---|---|
| ステージング環境 | 本番への影響がない環境で検証 |
| ロールバック自動化 | selfHealオプションにより、異常時に自動修正 |
セキュリティ対策とベストプラクティス
GitOps導入では、セキュリティ設定を無視すると深刻なリスクにつながります。以下に実践すべき対策をまとめます。
認証・認可設定
ArgoCDのアクセス制御にはRBACを活用し、最小限の権限で運用します。
- ユーザーごとのロール分け(例:
admin,developer) - OAuthやLDAP連携による外部認証
| 手順 | 内容 |
|---|---|
| 1. RBAC設定ファイル作成 | 管理者、開発者、観測者の役割を定義する Role や ClusterRole を定義 |
| 2. ServiceAccountの作成 | 各ロールに紐づいた ServiceAccount を生成(例: argo-admin) |
| 3. RBACポリシー適用 | kubectl apply -f rbac.yaml で権限をクラスターに反映 |
リポジトリアクセス制限
Gitリポジトリへのアクセスを限定することで、不正な変更を防ぎます。
| 対策 | 説明 |
|---|---|
| HTTPS通信の強制化 | TLS有効化で情報漏洩リスクを減らす |
| 秘密管理 | kubectl create secret genericなど外部ツールを使用 |
重要: ArgoCDに直接リポジトリパスワードを保存せず、シークレット管理ツール(HashiCorp Vaultなど)を使うことが推奨されます。
まとめと今後の展望
ArgoCDによるGitOps導入は、Kubernetes運用の自動化と効率化において極めて有効な手法です。本記事では、クラスター構築、インストール手順、リポジトリ構造設計、セキュリティ対策など、実践的なポイントを網羅しました。今後はCI/CDとの連携や、更なる自動化(例: ロールバックの自動検知)に焦点を当てることで、DevOpsプロセスの最適化が期待されます。