0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GitOpsとArgoCDを理解したい話

Posted at

はじめに

課題を達成するために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
パスワードは取得した値 ※継続利用するならログイン後に変更推奨

スクリーンショット 2025-07-18 11.51.52.png (1.1 MB)

3. guestbook アプリの登録

フォークした argocd-example-appshelm-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. 初回同期(デプロイ)

ArgoCDSYNC → SYNCHRONIZE

ステータスが Healthy / Synced になれば成功

スクリーンショット 2025-07-18 12.53.55.png (193.0 kB)

4-2. イメージ設定の変更

helm-guestbookvalues.yamlimage を以下に変更:

image:
  repository: docker.io/nginxdemos/hello
  tag: latest

その後 Git に push:

git commit -am "fix: use public docker image"
git push origin main

4-3. 変更の同期

ArgoCDREFRESH → OutOfSync になる

DIFF で変更内容を確認できる

スクリーンショット 2025-07-18 12.56.42.png (105.7 kB) ※画像は別のDiff

SYNC (手動) して反映

ステータスが Healthy / Synced になれば成功

5. Argo CD で自動同期設定

UI でアプリを選択「Details」 → SYNC POLICYAUTOMATEDを有効化:

スクリーンショット 2025-07-18 14.56.09.png (17.4 kB)

6. 動作確認(Auto Sync)

values.yaml を編集し、以下のように replicaCount を変更:

replicaCount: 2

Git に push すると

  • Argo CD が自動で OutOfSync を検知
  • 自動的に Sync が実行され
  • Pod が 2 つに増加 → Healthy / Synced 状態へ

※自動検知まで数十秒かかる

スクリーンショット 2025-07-18 13.17.57.png (218.6 kB)

余談困ったこと

  • アプリをデプロイする際に、ネームスペースが作成されていなかったらしく初回デプロイがうまくいかなかった。
    kubectl create namespace <ネームスペース名>

まとめ

  • Minikube + Argo CD のセットアップ
  • Git リポジトリで管理された Helm アプリのデプロイ
  • Auto Sync による自動反映の動作確認

実環境ではAWS EKSと組み合わせて運用しています。
インフラ領域とアプリ領域がGithubリポジトリに混在している状況で困っている方におすすめです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?