はじめに
課題を達成するためにKubernetesとArgoCDを理解する必要があった。
そもそも、GitOpsという言葉自体が初耳だったので、改めてハンズオンを通して説明したいと思います。
ArgoCDとは?
Argo CD は、Kubernetes 向けの GitOps ツール で、アプリケーションのデプロイや構成管理を自動化します。Git リポジトリを「唯一の情報源(Single Source of Truth)」として扱い、そこに定義されたマニフェストとクラスタ上の実際の状態を常に比較・同期する仕組みを持っています。これにより、手動のデプロイ作業を減らし、一貫性と再現性の高い運用が可能になります。
GitOpsとは?
GitOps(Git Operations) は、Git を唯一の情報源(Single Source of Truth)としてインフラやアプリケーションを管理する運用手法です。
宣言的な設定:Kubernetes マニフェストや IaC(Infrastructure as Code)の定義を Git に保存する。
自動同期:CI/CD ツールや GitOps ツール(例: Argo CD, Flux)が Git 上の定義と実際のクラスタ状態を常に比較し、自動で反映・修正する。
監査性と再現性:すべての変更は Git のコミット履歴に残るため、「いつ・誰が・何を変えたか」が明確になり、過去の状態へのロールバックも容易。
ゴール
- ローカル環境で GitOps ワークフローを体験
- Minikube 上に Argo CD を構築し、Git 管理されたアプリをデプロイ
- Auto Sync による「Git にコミット → 自動反映」までを確認
前提条件
- Minikubeがインストール済み
- Docker Desktopを利用している
構成環境
項目 | 内容 |
---|---|
OS | macOS(Apple Silicon) |
Kubernetes | Minikube v1.36.0 |
Argo CD | v2.11 |
Git リポジトリ |
[argocd-example-apps](https://github.com/argoproj/argocd-example-apps) をフォーク |
アプリ | guestbook |
ハンズオン開始
1. Minikube 起動(Docker Desktop ドライバ)
minikube start --driver=docker --cpus=4 --memory=6000m
※ --memory
の値は 4 GB 以上推奨
※ --memory
の値は Docker Desktop の割当以下に調整(例: 8GBだとオーバー)
起動確認
minikube status # Running が 3 行並べば OK
kubectl get nodes # Status が Ready
2. Argo CD インストール
ネームスペースを作成
kubectl create ns argocd
インストール
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
Pod が全部 Running になるまで待機
watch -n2 'kubectl -n argocd get po'
UIアクセス用ポートフォワード:別窓のターミナル推奨
kubectl -n argocd port-forward svc/argocd-server 8080:443 &
初期ログイン情報:
# パスワード取得
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d && echo
ArgoCDのUIを開く:
ブラウザで https://localhost:8080
ユーザーはadmin
パスワードは取得した値 ※継続利用するならログイン後に変更推奨

3. guestbook アプリの登録
フォークした argocd-example-apps
の helm-guestbook
を UI から登録:
設定項目 | 値 |
---|---|
アプリ名 | guestbook |
Project | default |
Git URL | https://github.com/<yourname>/argocd-example-apps |
Revision | HEAD |
Path | helm-guestbook |
Namespace |
guestbook (自動作成にチェック or 手動作成) |
Sync Policy | Manual |
4-1. 初回同期(デプロイ)
ArgoCD
でSYNC → SYNCHRONIZE
ステータスが Healthy / Synced になれば成功

4-2. イメージ設定の変更
helm-guestbook
のvalues.yaml
の image
を以下に変更:
image:
repository: docker.io/nginxdemos/hello
tag: latest
その後 Git に push:
git commit -am "fix: use public docker image"
git push origin main
4-3. 変更の同期
ArgoCD
でREFRESH → OutOfSync
になる
DIFF で変更内容を確認できる

SYNC (手動) して反映
ステータスが Healthy / Synced になれば成功
5. Argo CD で自動同期設定
UI でアプリを選択「Details」 → SYNC POLICY
でAUTOMATED
を有効化:

6. 動作確認(Auto Sync)
values.yaml
を編集し、以下のように replicaCount
を変更:
replicaCount: 2
Git に push すると
- Argo CD が自動で
OutOfSync
を検知 - 自動的に
Sync
が実行され - Pod が 2 つに増加 →
Healthy / Synced
状態へ
※自動検知まで数十秒かかる

余談困ったこと
- アプリをデプロイする際に、ネームスペースが作成されていなかったらしく初回デプロイがうまくいかなかった。
kubectl create namespace <ネームスペース名>
まとめ
- Minikube + Argo CD のセットアップ
- Git リポジトリで管理された Helm アプリのデプロイ
- Auto Sync による自動反映の動作確認
実環境ではAWS EKSと組み合わせて運用しています。
インフラ領域とアプリ領域がGithubリポジトリに混在している状況で困っている方におすすめです。