Argo CD最短導入ガイド(macOS + microk8s編)

1. はじめに
GitOpsとは、アプリケーションやインフラの設定をGitリポジトリで管理し、自動的に環境に反映する手法です。Argo CDはその代表的なツールで、Kubernetes環境におけるGitOpsを実現します。
本記事のゴール:
- macOS上にmicrok8sを立てる
- Argo CDをインストールしてWeb UIにアクセス
- サンプルアプリをデプロイしてGitOpsを体感する
2. 前提条件
- macOS (Apple Silicon)
- Homebrewがインストール済み
3. microk8sのセットアップ
Homebrewでmicrok8sをインストールします。
brew install ubuntu/microk8s/microk8s microk8s install
microk8sを起動します。
microk8s start
microk8sの状態確認とアドオンの有効化をします。
microk8s status --wait-ready microk8s enable dns storage ingress
microk8sのサブコマンドのエイリアス設定をします。恒久的に設定したい場合は、お好みで ~/.bashrc
や ~/.zshrc
に以下を追加してください。
alias kubectl="microk8s kubectl" alias helm="microk8s helm"
4. Argo CDのインストール
公式のHelm Chartのリポジトリを登録し、Argo CDをインストールします。1
helm repo add argo https://argoproj.github.io/argo-helm helm repo list helm --namespace argocd install argocd argo/argo-cd --create-namespace
Podが起動するまで以下コマンドを何度か打って待機しましょう。
kubectl --namespace argocd get pods
以下PodがRunningになっていることを確認します。
- argocd-application-controller
- argocd-applicationset-controller
- argocd-dex-server
- argocd-notifications-controller
- argocd-redis
- argocd-repo-server
- argocd-server
NAME READY STATUS RESTARTS AGE argocd-application-controller-0 1/1 Running 0 102s argocd-applicationset-controller-6bb7fc84d8-gdxz5 1/1 Running 0 102s argocd-dex-server-694c4879c6-pqpws 1/1 Running 0 102s argocd-notifications-controller-5b6df94c56-hhctm 1/1 Running 0 102s argocd-redis-69dcc6cbc9-kxjxr 1/1 Running 0 102s argocd-repo-server-645b6f6d76-qwb85 1/1 Running 0 102s argocd-server-585669dd97-jdzxr 1/1 Running 0 102s
5. Argo CD CLIのインストール
手元のPCからArgo CDを操作できるようにArgo CD CLIをインストールします。
brew install argocd
6. Argo CDへのポートフォワード
Argo CDにログインするためにポートフォワードを行います。
kubectl --namespace argocd port-forward services/argocd-server 8443:443
7. Argo CD CLIログイン
adminユーザーの初期パスワードを取得します。
argocd admin initial-password --namespace argocd
Argo CD CLIを使って先程インストールしたArgo CDにログインします。今回は初期パスワードをそのまま使用します。
argocd login localhost:8443 --port-forward-namespace argocd
8.サンプルアプリをデプロイ
guestbookアプリ(Argo公式サンプル)を登録してみましたが、筆者の環境はCPUアーキテクチャがarm64なので exec format error
エラーが発生したためbitnami/nginxをサンプルとしてデプロイしました。
またオリジナルのbitnamiリポジトリは今回のデモでは不要なhelm chartを多数含んでいるため、bitnami/nginxだけを継承したnginx-demoを作成しました。自身のリポジトリとすることでGitOpsの動作検証をしやすくする狙いがあります。
皆さんが検証する場合は私のリポジトリをForkして検証するのがやりやすいと思います。
kubectl create namespace nginx-demo argocd app list argocd app create nginx-demo \ --repo https://github.com/ingktds/nginx-demo \ --path . \ --dest-namespace nginx-demo \ --dest-server https://kubernetes.default.svc \ --sync-policy automated
nginxのPodの状態を確認します。現状はPodは1つのみの状態です。
kubectl --namespace nginx-demo get pods
NAME READY STATUS RESTARTS AGE nginx-demo-6b449494f6-8l7tb 1/1 Running 0 6m4s
9. GitOpsの動作確認
values.yamlのreplicaCountを変更し、実際のkubernetes上のPod数が変わることを確認します。
replicaCountを1から3に変更します。
cd path/to/nginx-demo vim values.yaml
diffはこちら。
git diff diff --git a/values.yaml b/values.yaml index 2777d3d..8dada7d 100644 --- a/values.yaml +++ b/values.yaml @@ -3,7 +3,7 @@ # Declare variables to be passed into your templates. # This will set the replicaset count more information can be found here: https://kubernetes.io/docs/concepts/workloads/controllers/replicaset/ -replicaCount: 1 +replicaCount: 3 # This sets the container image more information can be found here: https://kubernetes.io/docs/concepts/containers/images/ image:
Indexへの追加とコミットを行います。
git commit -a -m 'Change replicaCount form 1 to 3'
pushします。
git push
アプリケーションの状態を確認します。
argocd app get nginx-demo
Name: argocd/nginx-demo Project: default Server: https://kubernetes.default.svc Namespace: nginx-demo URL: https://argocd.example.com/applications/nginx-demo Source: - Repo: https://github.com/ingktds/nginx-demo Target: Path: . SyncWindow: Sync Allowed Sync Policy: Automated Sync Status: Synced to (9763c86) Health Status: Healthy CONDITION MESSAGE LAST TRANSITION RepeatedResourceWarning Resource /Service/nginx-demo/nginx-demo appeared 2 times among application resources. 2025-09-08 09:08:24 +0900 JST RepeatedResourceWarning Resource /ServiceAccount/nginx-demo/nginx-demo appeared 2 times among application resources. 2025-09-08 09:32:12 +0900 JST RepeatedResourceWarning Resource apps/Deployment/nginx-demo/nginx-demo appeared 2 times among application resources. 2025-09-08 09:32:12 +0900 JST GROUP KIND NAMESPACE NAME STATUS HEALTH HOOK MESSAGE networking.k8s.io NetworkPolicy nginx-demo nginx-demo Synced networkpolicy.networking.k8s.io/nginx-demo configured policy PodDisruptionBudget nginx-demo nginx-demo Synced Healthy poddisruptionbudget.policy/nginx-demo configured ServiceAccount nginx-demo nginx-demo Synced serviceaccount/nginx-demo unchanged Secret nginx-demo nginx-demo-tls Synced secret/nginx-demo-tls configured Service nginx-demo nginx-demo Synced Healthy service/nginx-demo unchanged apps Deployment nginx-demo nginx-demo Synced Healthy deployment.apps/nginx-demo configured
nginxのPodの状態を確認します。Pod数は3つに変わりました。
kubectl --namespace nginx-demo get pods
NAME READY STATUS RESTARTS AGE nginx-demo-6b449494f6-4m8m7 1/1 Running 0 2m9s nginx-demo-6b449494f6-8l7tb 1/1 Running 0 25m nginx-demo-6b449494f6-hlj44 1/1 Running 0 2m9s
10. トラブルシューティング(よくあるつまづき)
- argocd-server にアクセスできない
- ポートフォワード忘れ
- kubectlやhelmコマンドが見つからない
- microk8s kubectlや microk8s helm を使用。本記事では冒頭でそれぞれのコマンドをaliasコマンドで書き換えています。
- ArgoCD公式のサンプルアプリのguestbookが起動できない
- ホストOSのCPUアーキテクチャがarm64の場合は、guestbookイメージがamd64でビルドされているため起動できない。
- https://argo-cd.readthedocs.io/en/stable/getting_started/#6-create-an-application-from-a-git-repository
11. まとめ
いかかがでしたでしょうか。microk8s + Argo CDでGitOpsをローカル体験することができました。GitHubで変更した内容がmicrok8sにデプロイされることが確認できたと思います。
12. 参考資料
- 公式ドキュメントではKubernetesのマニフェストをインストールする手順ですが、可能な限りhelm chartを使いたいので今回はhelm chart版でインストールします。 ↩︎