ArgoCD クイズ
このクイズでは、ArgoCD と GitOps の理解度を確認します。
質問 1: GitOps のコア原則
GitOps の 4 つのコア原則は何ですか?
回答:
- 宣言的設定: システムの望ましい状態をコードとして定義する
- バージョン管理: すべての変更を Git で追跡する
- 自動同期: リポジトリと実行環境の差異を自動的に調整する
- 自己修復: システムを望ましい状態に自動的に復旧する
これらの原則により、GitOps は単なるデプロイツールを超えた完全な運用モデルとして機能します。
質問 2: ArgoCD アーキテクチャ
ArgoCD の主要コンポーネントとその役割は何ですか?
回答:
- API Server: REST API と web UI を提供し、認証と認可を処理する
- Repository Server: Git リポジトリに接続し、マニフェストを生成する
- Application Controller: アプリケーションの状態を監視し、同期を実行する
- Redis: キャッシュとセッションストレージ
- Dex: OIDC 認証サーバー(オプション)
各コンポーネントは個別にスケールでき、高可用性構成をサポートします。
質問 3: Application リソース
ArgoCD Application リソースに必要なコンポーネントは何ですか?
回答:
yaml
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: my-app
namespace: argocd
spec:
project: default
source:
repoURL: https://github.com/example/app-config
targetRevision: HEAD
path: k8s
destination:
server: https://kubernetes.default.svc
namespace: default
syncPolicy:
automated:
prune: true
selfHeal: true必須要素:
source: Git リポジトリ情報destination: デプロイ先のターゲットクラスターと namespaceproject: ArgoCD プロジェクト(権限管理用)
質問 4: Sync ポリシー
ArgoCD の自動 Sync と手動 Sync の違いは何ですか?
回答:自動 Sync:
yaml
syncPolicy:
automated:
prune: true # Automatically delete unnecessary resources
selfHeal: true # Automatically recover from drift- Git が変更されると自動的にクラスターへ適用される
- drift が検出されると自動的に復旧する
- 本番環境では慎重に使用する
手動 Sync:
- ユーザーが明示的に同期をトリガーする
- 変更をレビューした後に適用する
- より安全だが、運用上のオーバーヘッドが増える
質問 5: ApplicationSet
ArgoCD ApplicationSet の目的と主な generator タイプは何ですか?
回答:目的:
- マルチクラスターのデプロイを自動化する
- テンプレートベースの Application 作成
- 環境固有の設定管理
主な Generator:
- List Generator: 静的な値のリストに基づく
- Cluster Generator: 登録済みクラスターに基づく
- Git Generator: Git リポジトリ構造に基づく
- Matrix Generator: 複数の generator を組み合わせる
- Pull Request Generator: PR ベースの一時環境
yaml
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
name: cluster-apps
spec:
generators:
- clusters: {}
template:
metadata:
name: '{{name}}-app'
spec:
source:
repoURL: https://github.com/example/apps
path: '{{name}}'
destination:
server: '{{server}}'質問 6: セキュリティのベストプラクティス
ArgoCD のセキュリティを強化する主な方法は何ですか?
回答:
RBAC 設定:
yamlpolicy.default: role:readonly policy.csv: | p, role:admin, applications, *, */*, allow p, role:dev, applications, get, dev/*, allow g, dev-team, role:devSSO 統合:
- OIDC、SAML、LDAP 統合
- 一元的な認証管理
ネットワークセキュリティ:
- Ingress TLS 設定
- Network policy の適用
- プライベート Git リポジトリを使用する
Secret 管理:
- External Secrets Operator を使用する
- Sealed Secrets または Helm Secrets
- 機密情報用に Git リポジトリを分離する
監査ログ:
- すべての変更を追跡する
- アクセスログを監視する
質問 7: マルチクラスター管理
ArgoCD で複数のクラスターをどのように管理しますか?
回答:
クラスター登録:
bashargocd cluster add my-cluster-contextクラスターごとの Application デプロイ:
yamldestination: server: https://my-cluster-api-server namespace: productionApplicationSet による自動化:
yamlgenerators: - clusters: selector: matchLabels: environment: productionクラスター権限管理:
- クラスターごとに service account を設定する
- 最小権限の原則を適用する
- Namespace ベースの分離
監視とアラート:
- クラスターごとのステータスダッシュボード
- Sync 失敗アラート
- リソース使用状況の監視
質問 8: トラブルシューティング
ArgoCD アプリケーションが「OutOfSync」状態の場合、何を確認すべきですか?
回答:
Git リポジトリのステータスを確認する:
bash# Check repository access permissions argocd repo list argocd repo get <repo-url>マニフェストを検証する:
bash# Validate manifests locally kubectl apply --dry-run=client -f manifests/Sync ポリシーを確認する:
- Auto sync の設定
- Prune と SelfHeal のオプション
- Sync 条件(Sync Windows)
リソースのステータスを分析する:
bash# Check application details argocd app get <app-name> argocd app diff <app-name>ログを確認する:
bash# ArgoCD controller logs kubectl logs -n argocd -l app.kubernetes.io/name=argocd-application-controller手動 Sync を試す:
bashargocd app sync <app-name> --prune
質問 9: 最新の GitOps トレンド
2023 年の GitOps 分野における主要なトレンドは何ですか?
回答:
マルチクラスター GitOps:
- ApplicationSet によるマルチクラスターのデプロイ自動化
- クラスター間の設定 Sync とポリシー適用
ハイブリッドおよびマルチクラウド GitOps:
- オンプレミスとクラウド環境にわたる一貫したデプロイ戦略
- さまざまなクラウドプロバイダー間での Workload ポータビリティ
GitOps とポリシー管理の統合:
- OPA(Open Policy Agent)と Kyverno の統合
- コンプライアンスとガバナンスの自動化
- セキュリティポリシーのコード化とバージョン管理
Progressive Delivery:
- Canary および Blue-Green デプロイの自動化
- Argo Rollouts との統合
- メトリクスベースの自動ロールバック
質問 10: Amazon EKS 統合
ArgoCD を Amazon EKS と統合する際の考慮事項は何ですか?
回答:
IAM 権限の設定:
yaml# IRSA (IAM Roles for Service Accounts) configuration serviceAccount: annotations: eks.amazonaws.com/role-arn: arn:aws:iam::ACCOUNT:role/argocd-roleALB Ingress 設定:
yamlannotations: kubernetes.io/ingress.class: alb alb.ingress.kubernetes.io/scheme: internet-facing alb.ingress.kubernetes.io/target-type: ipEKS クラスター登録:
bash# Register EKS cluster to ArgoCD argocd cluster add arn:aws:eks:region:account:cluster/cluster-nameECR 統合:
- ECR イメージの自動更新
- Image Updater の設定
AWS Load Balancer Controller:
- Service ロードバランシングの最適化
- Target Group Binding の活用
セキュリティに関する考慮事項:
- VPC エンドポイントを使用する
- Security group の設定
- Network policy の適用
スコア:
- 8-10 問正解: 優秀(ArgoCD エキスパートレベル)
- 6-7 問正解: 良好(追加学習を推奨)
- 4-5 問正解: 平均(基本概念の見直しが必要)
- 0-3 問正解: 不十分(内容全体の再学習が必要)