【ITニュース解説】Setting Up Argo CD on Kubernetes
2026年09月10日に「Dev.to」が公開したITニュース「Setting Up Argo CD on Kubernetes」について初心者にもわかりやすく解説しています。
ITニュース概要
Argo CDは、KubernetesにGitOpsを導入し、アプリケーション定義をGitリポジトリからクラスターへ自動同期・デプロイするツールだ。本記事では、そのインストール手順からUI/CLIでの利用、アプリケーションのデプロイ、そしてTLSによる安全な公開方法までを解説する。
ITニュース解説
Argo CDは、Kubernetes(クーバーネティス)と呼ばれるコンテナ管理システム上で動作する、アプリケーションのデプロイを自動化するツールである。特に「GitOps(ギットオプス)」という考え方に基づいており、アプリケーションの構成情報やデプロイの状態をすべてGitリポジトリで管理する。これにより、誰がいつどのような変更を加えたか履歴が明確になり、運用ミスを減らし、システムの安定性を高めることが可能となる。まるで、ソフトウェア開発のソースコードをGitで管理するように、インフラやアプリケーションのデプロイ設定もGitで管理するイメージだ。
Argo CDをKubernetesに導入するためには、いくつかの準備が必要である。まず、Kubernetesクラスタが動作している環境が必要で、これはアプリケーションを動かすためのたくさんのコンピュータ(ノード)が集まったものと考えると良い。次に、Kubernetesクラスタを操作するためのコマンドラインツール「kubectl(キューブコントロール)」と、Kubernetes上にアプリケーションを簡単にインストールするためのパッケージ管理ツール「Helm(ヘルム)」がローカルマシンにインストールされている必要がある。これらは、Kubernetes環境で作業する上で基本的なツールとなる。また、Argo CDのWebインターフェースに外部から安全にアクセスするため、ドメイン名も用意すると良い。
Argo CDのインストールは、まずArgo CDが使う専用の名前空間(namespace)をKubernetesクラスタ内に作成するところから始める。これは、Argo CDに関連するすべてのリソースを他のアプリケーションから分離し、管理しやすくするためだ。次に、Argo CDのインストールに必要なHelmチャート(設定ファイル群)が含まれるリポジトリをGitからクローンし、ローカルに取得する。その後、Helmの依存関係を更新してから、helm installコマンドを使ってArgo CDをKubernetesクラスタにデプロイする。このコマンドを実行すると、Kubernetes上にArgo CDを構成する各種コンポーネントが自動的に配置される。インストールが完了したら、kubectl get podsやkubectl get servicesといったコマンドを使って、Argo CDの各部品が正しく起動しているか、またWeb UIを提供するargocd-serverサービスが動作しているかを確認する。
Argo CDのWeb UIにアクセスするには、初期設定では外部からの直接アクセスが制限されているため、一時的にローカルマシンからアクセスできるようにポートフォワードを行う。これは、ローカルマシンの特定のポート(例えば8080番)へのアクセスを、Kubernetesクラスタ内部のargocd-serverサービスの特定のポート(例えば443番)に転送する仕組みである。Web UIにログインするための初期パスワードは、Kubernetesのシークレットとして保存されている。このパスワードはBase64という形式でエンコードされているため、base64 --decodeコマンドを使ってデコードし、元のパスワードを取得する必要がある。その後、Webブラウザでローカルマシンのポートフォワードされたアドレス(http://127.0.0.1:8080など)にアクセスし、ユーザー名「admin」とデコードしたパスワードでログインする。このポートフォワードは、コマンドを実行している間だけ有効なため、Web UIを使いたい間はターミナルセッションを維持しておく必要がある。
オプションとして、Argo CDはコマンドラインインターフェース(CLI)ツールも提供している。このツールを使うことで、ターミナルからArgo CDの操作を行うことができる。CLIツールは、特定のURLからダウンロードし、実行パスが通っているディレクトリ(例:/usr/local/bin)に配置して実行権限を付与することで利用可能になる。CLIツールをセットアップしたら、argocd loginコマンドを使ってArgo CDサーバーにログインする。この際、Web UIアクセス時と同様に、管理者ユーザー名とパスワードが必要となる。ログイン後は、argocd account update-passwordコマンドで初期パスワードを安全なものに変更することが推奨される。
Argo CDを使ってアプリケーションをデプロイする方法は複数ある。最も基本的な方法は、アプリケーションの構成を記述したYAML(ヤムル)マニフェストファイルを作成し、kubectl apply -fコマンドでArgo CDに適用する方法である。このYAMLファイルには、アプリケーションのソースコードが格納されているGitリポジトリのURL、デプロイするブランチやパス、デプロイ先のKubernetesクラスタと名前空間、そしてどのように同期するかといったポリシー(例:CreateNamespace=trueで名前空間を自動作成、selfHeal: trueでKubernetesの状態がGitの設定と異なる場合に自動修復、prune: trueでGitから削除されたリソースをKubernetesからも削除)を記述する。デプロイ後、kubectl get appやargocd app listコマンドでアプリケーションの同期ステータスやヘルスステータスを確認できる。Web UIからもデプロイされたアプリケーションの詳細を視覚的に確認することが可能だ。
Web UIから直接アプリケーションをデプロイすることもできる。Argo CDのダッシュボードにある「NEW APP」ボタンをクリックし、アプリケーション名、プロジェクト、GitリポジトリのURL、デプロイパス、デプロイ先のクラスタURLと名前空間といった情報を入力する。この方法でアプリケーションを作成すると、Argo CDは指定されたGitリポジリからアプリケーションの定義を読み込み、Kubernetesクラスタに適用しようとする。しかし、Web UIで作成しただけでは、まだGitリポジトリの状態とKubernetesクラスタの状態が一致していない「OutOfSync(アウトオブシンク)」状態になることがある。この場合は、argocd app syncコマンドを使って手動で同期をトリガーし、アプリケーションがKubernetesクラスタに完全にデプロイされ、「Synced(シンクト)」かつ「Healthy(ヘルシー)」な状態になることを確認する。
Argo CDへのアクセスをより安全にするためには、TLS(トランスポート・レイヤー・セキュリティ)暗号化を設定することが重要である。これにより、WebブラウザとArgo CDサーバー間の通信が暗号化され、第三者による盗聴や改ざんを防ぐことができる。この設定には、Nginx Ingressコントローラーとcert-manager(サートマネージャー)という二つのツールを導入する。Nginx Ingressコントローラーは、外部からのHTTP/HTTPSリクエストをKubernetesクラスタ内部のサービスにルーティングする役割を担い、cert-managerは、SSL/TLS証明書を自動的に発行・更新する役割を担う。
まず、Helmを使ってNginx IngressコントローラーをKubernetesクラスタにインストールする。インストール後、kubectl get servicesコマンドでIngressコントローラーが外部に公開するIPアドレス(External IP)を確認し、このIPアドレスをArgo CDのドメイン名(例:argo.example.com)と紐付けるDNSレコードを、ドメインを管理するプロバイダーで設定する。これにより、ブラウザからドメイン名でアクセスできるようになる。
次に、cert-managerをKubernetesクラスタにインストールする。cert-managerが動作するために、TLS証明書を発行するためのIssuer(イシューアー)リソースを作成する。このIssuerは、Let's Encrypt(レッツエンクリプト)などの認証局と連携し、指定されたドメインの証明書を自動で取得する。Issuerの設定には、証明書発行に必要なメールアドレスや、証明書検証方法(今回はHTTP-01チャレンジ)などを記述する。
最後に、Argo CDサーバーへのIngressリソースを作成する。このIngressリソースは、Nginx Ingressコントローラーに対して、どのドメイン名(argo.example.com)へのリクエストをどのKubernetesサービス(argocd-server)に転送するか、そしてどのIssuerを使ってTLS証明書を取得するか(cert-manager.io/issuer: tls-certificate-issuer)を指示する役割を果たす。Ingressリソースが作成されると、cert-managerは自動的にLet's EncryptからTLS証明書を取得し、Ingressコントローラーに設定する。証明書が正常に発行されると、kubectl get certificateコマンドでステータスが「True」になることを確認できる。これで、https://argo.example.comのような安全なURLでArgo CDのWeb UIにアクセスできるようになる。
Argo CDの導入後は、CI(継続的インテグレーション)パイプラインと連携させて、コードのマージごとに自動的にアプリケーションを同期させたり、チームメンバーが安全にアクセスできるよう認証・認可の仕組み(RBACやSSO)を設定したり、アプリケーションの状態変化をSlackやメールで通知する機能を追加したりと、さらなる活用が可能である。また、複数のアプリケーションを効率的に管理するための「App-of-Apps」や「ApplicationSets」といった高度な機能も探索できる。これらを活用することで、大規模なシステム運用もより効率的に行えるようになる。