Kubernetes基礎 #9 - ArgoCD

Last Edited: 6/13/2025

このブログ記事では、KubernetesにおけるArgoCDについて紹介します。

DevOps

前回の記事では、サービスアカウントの使用例としてKubernetesにおけるモニタリングツールについて説明しました。 そこでも簡単に触れましたが、サービスアカウントのもう一つの重要な使用例はビルドツールです。 そこで、この記事では、Kubernetesの人気ビルドツールであるArgoCDの基本について説明します。

なぜArgoCD?

Kubernetesクラスターを含むプロジェクトで標準的なCI/CDパイプライン(GitHub、GitLab、Jenkinsなど)を使用する場合、 CDの設定は困難になることが予想されます。なぜなら、パイプラインがKubernetesクラスターにアクセスしてkubectl applyを実行する方法が必要であり、 特にクラウドプロバイダーが管理するリモートサーバーにデプロイする場合、セキュリティ上の課題が生じるためです。 さらに、従来のビルドツールは、デプロイメントステータスのリアルタイムな可視性に欠けることが多く、現在の状態と望ましい状態の同期を妨げます。

ArgoCDは、GitOpsに基づくKubernetes向けのより簡単で効率的、かつ安全なCDパイプラインを可能にすることで、これらの問題に対処します。 Gitリポジトリの変更を追跡し、自動的にクラスターに適用することで、リポジトリ内で定義された望ましい状態と常に一致するようにします。 Gitを活用することで、クラスターへの変更を行うための馴染みのあるインターフェースを提供し、適切なバージョン管理を保証し、 スムーズなコラボレーションを促進します。ArgoCDはクラスター内に存在し、サービスアカウントとして管理できるため(デフォルトで既に設定済み)、 アクセス制御が簡素化されます。開発者はGitのアクセス制御を利用できます。

プルモデルは、クラスターに対する追跡されない変更を防ぎ、ディザスタリカバリもサポートします。 これらの利点とYAMLファイルを使用したArgoCDの宣言的な設定方法、よく設計された情報豊富なグラフィカルユーザーインターフェースにより、 ArgoCDは複雑なアクセス制御とヘルスプローブの設定の必要性を排除できるKubernetesプロジェクトの優れたビルドツールとして人気を獲得しています。

ArgoCDのセットアップ

ArgoCDをセットアップするには、ArgoCD公式ドキュメント(下記参照)の手順に従ってください。 プロセスは基本的にargocd名前空間を作成し、kubectl applyを使用して必要なリソースを適用します。 インストール後、kubectl getを使用してサービスの作成が成功したことを確認し、 kubectl port-forwardを使用してargocd-serverをポートフォワードしてユーザーインターフェースにアクセスできます (安全でない接続に関する警告が表示される場合がありますが、安全に無視できます)。

application.yaml
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: my-argo-app
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://github.com/example-usr/example-cluster-config.git # トラックするGit URL
    targetRevision: HEAD # 直近のコミット
    path: dev # トラックするフォルダ
  destination:
    server: https://kubernetes.default.svc # 内部用のAPIサーバのデフォルトエンドポイント
    # (ArgoCDを外部のクラスターに適応する場合は、対応する外部用のAPIサーバのエンドポイントを指定する)
    namespace: myapp
  syncPolicy:
    syncOptions:
      - CreateNamespace=true # 名前空間(この場合'myapp')がない場合名前空間を自動で作成
    automated:
      selfHeal: true # 手動変更を元に戻す
      prune: true # 不要になったリソースを削除

ユーザーインターフェースには、ユーザー名adminargocd-install-admin-secretに保存されているパスワードを使用してログインできます (パスワードはbase64エンコードされているため、echo <password> | base64 --decodeを使用してデコードしてください)。 上記のYAMLファイルの例は、ArgoCDの設定を示しています。これは、ArgoCDが3分ごとにリポジトリをチェックするデフォルトのポーリングメカニズムを想定していますが、 変更を即座に反映するためにwebhookを設定することもできます。kubectl applyを使用してこのYAMLを適用すると、 リポジトリのdevファイルで定義されたすべてのリソースを適用・作成するアプリケーションが自動的にセットアップされます。

リポジトリ内のリソース設定を変更することで変更が追跡され自動的に適用されること、 手動でクラスターに変更を適用することでArgoCDによって手動変更が元に戻されること(selfHeal: trueで定義)、 リポジトリ内のポッドレプリカ数を減らすことで不要なリソースが削除されること(prune: trueで定義)を確認できます。 ArgoCDは、ユーザーインターフェースへのOIDC認証、Helmとのインテグレーション、デフォルトでセットアップされているPrometheus用の/metricsエンドポイントなど、 本番環境対応のKubernetesクラスターのセットアップに役立つ様々な事前構築機能も提供しています。 これらの機能やその他の有用な情報については、公式ドキュメント(下記参照)を確認することをお勧めします。

結論

この記事では、ArgoCD(とGitOps)とは何か、なぜArgoCDが有用なのか、そして基本的な使用方法について説明しました。 ArgoCDは示した通り、CI/CD、アクセス制御、ヘルスモニタリング、災害復旧を大幅に簡素化するため、 公式ドキュメントやその他のリソース(下記参照)を読んでさらに学習し、適切な場面では積極的に使用を試みることをお勧めします。

リソース