Contents
GitOpsとArgo CDの概要
GitOpsは、Kubernetes環境の変更をGitリポジトリに格納し、自動で適用する運用手法です。これにより、コードとインフラの統一管理が可能となり、誤操作や手動ミスのリスクを軽減できます。本記事では、2023年10月時点の最新バージョン(Argo CD v2.7)を用いたGitOpsワークフロー構築に焦点を当てます。
GitOpsワークフローの基本原則
GitOpsは「Gitが唯一のソース・オブ・真実(Single Source of Truth)」となることを前提としています。以下のようなステップで運用されます:
- 開発者はGitリポジトリにマニフェストファイルをコミット
- Argo CDが変更を検知し、クラスターと同期
- 同期失敗時はGitHub Actionsなどで通知
Argo CDの最新バージョン特性
Argo CD v2.7では以下のような新機能が追加されています:
| 特徴 | 説明 | 備考 |
|---|---|---|
| ApplicationSet 支援 | 複数クラスターの自動管理が可能に | GKE/AKS/EKS対応 |
| Image Updater インテグレーション | プロダクション環境でのイメージ更新を自動化 | Docker Hubとの連携 |
| Rolloutsとの互換性向上 | 渐進的リリースの精度向上 | GitHub Actionsとの連携も可能 |
クラウドプラットフォームごとのArgo CD導入手順
クラウドサービスごとに認証フローとコマンドが異なります。最新バージョン(2023年10月時点)のHelmチャートを用いたインストール手順を解説します。
EKSでのインストール手順
EKSではIAMロールとAWS CLI認証が必要です。以下が基本的な手順です:
eksctlでクラスターを作成し、aws configureでアクセス設定を行う- Helm chartを取得:
helm repo add argocd https://argoproj.github.io/argo-helm - インストールコマンド:
helm install argocd argocd/argo-cd --namespace argocd --create-namespace
注意: EKSでは、AWS Load Balancer Controllerとの連携が推奨されます。
AKSへのデプロイ方法
AKSの場合、Azure ADとKubernetes Service Principalの認証が必要です。手順は以下の通り:
- Azure CLIで
az aks get-credentialsを実行しクラスターにアクセス - Helm chartを取得後、
helm install argocd argocd/argo-cd --namespace argocdとインストール - ポータルでArgo CDのUIにアクセスし、管理者パスワードを設定
GKE環境の設定注意点
GKEではGoogle Cloud SDKの認証情報を前提としています。以下のポイントに注意:
- RBAC設定:
kubectl create clusterrolebindingで権限を付与する必要がある - Ingressリソース: Google Cloud HTTP Load Balancerを用いて公開する
| クラウド | 認証方法 | 有効なHelmバージョン |
|---|---|---|
| EKS | AWS CLI + IAMロール | v2.7.x(公式リリース) |
| AKS | Azure AD + Service Principal | v2.7.0 |
| GKE | Google Cloud SDK | v2.7.1 |
GitOpsワークフロー構築プロセス
ローカル環境でGitOpsワークフローをシミュレーションする手順は以下の通りです。
リポジトリ構成設計
以下のようなディレクトリ構造を作成します:
|
1 2 3 4 5 6 7 8 |
my-gitops-repo/ ├── cluster/ # クラスタースペック │ └── prod.yaml # 本番環境のマニフェスト ├── apps/ # アプリケーション定義 │ └── webapp.yaml # Webアプリケーションのデプロイ情報 └── argocd/ # Argo CD設定ファイル └── app-of-apps.yaml # ApplicationSet定義 |
マニフェストファイルのベストプラクティス
マニフェストファイルはInfrastructure as Code(IaC)として扱います。以下の例では、DeploymentとServiceの基本構成を示します:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
apiVersion: apps/v1 kind: Deployment metadata: name: webapp spec: replicas: 2 selector: matchLabels: app: webapp template: metadata: labels: app: webapp spec: containers: - name: web image: nginx:latest ports: - containerPort: 80 --- apiVersion: v1 kind: Service metadata: name: webapp-service spec: selector: app: webapp ports: - protocol: TCP port: 80 targetPort: 80 |
重要: マニフェストファイルはYAMLのバージョン管理(例: v1.21)を明記し、変更履歴を追跡する必要があります。
ApplicationSetによる多クラスター管理
複数クラスタで運用する際にはApplicationSetを用いることで、自動的にデプロイ設定を反映できます。
複数クラスタへの自動適用設定
以下のYAMLテンプレートを使用して、GKEとAKSの両方に同じアプリケーションを展開します:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
apiVersion: argoproj.io/v1alpha1 kind: ApplicationSet metadata: name: multi-cluster-app spec: template: spec: project: default source: repoURL: https://github.com/your-org/my-gitops-repo.git path: cluster/prod.yaml destination: server: {{.spec.destination.server}} namespace: prod generators: - list: elements: - destServer: https://gke-cluster.example.com - destServer: https://aks-cluster.example.com |
GitOpsとApplicationSetの連携ポイント
- 同期状態監視: Argo CD UIで各クラスターのSync Stateを確認する
- ポリシー設定:
argocd app getコマンドで設定を検証
落とし穴例: GKE環境では、IngressのDomain設定がクラスタごとに異なる場合、ApplicationSetのデフォルトテンプレートが適用されないことがあります。
Image Updaterの実装ケース
プロダクション環境でのイメージ更新は、Argo CD Image Updaterを用いることで自動化可能です。
自動イメージ更新のワークフロー
- Docker Hubに新しいバージョンのイメージをプッシュ
argocd image-updater updateコマンドでリポジトリに変更を反映- Argo CDがGitリポジトリの変更を検知し、デプロイ
セキュリティアップデート時の対応
セキュリティパッチが必要な場合は、以下のようにタグポリシーを設定します:
|
1 2 3 4 5 6 |
imagePolicy: tag: latest source: repoURL: https://github.com/your-org/image-policies.git path: policies/nginx-policy.yaml |
補足: タグの自動更新は
alwaysPull: trueを指定することで、イメージが最新であることを保証できます。
導入時のトラブルシューティング
Argo CDの導入時に発生する問題とその対応策を解説します。
認証エラーの根本原因
以下のケースがよく見られます:
- KubernetesのRBAC設定不足:
kubectl describe clusterrolebindingで権限を確認 - Argo CD自身のクラスター認証失敗:
argocd loginコマンドでリログイン
Sync状態異常の診断手順
- Argo CD UIからアプリケーションを選択し、Sync Statusタブを確認
- エラーメッセージが表示された場合は、
kubectl describe pod -n argocdでPodのログを取得 - Kubernetesイベントを確認:
kubectl get events -n <namespace>
デバッグテクニック: Argo CD UIのLogsタブでは、同期失敗時の詳細なトレースが表示されます。
記事まとめ
本記事では以下のポイントを網羅しました:
- GitOpsワークフローの概要とArgo CD v2.7の特性
- EKS/AKS/GKEごとの導入手順と注意点
- ApplicationSetによる複数クラスタ管理の実装方法
- Image Updaterを用いたセキュリティアップデート対応
- 認証エラー・Sync状態異常などのトラブルシューティング
本記事のステップを元にローカル環境でGitOpsワークフローを構築してみましょう。