導入:手動デプロイの恐怖とさよなら
- 読者への問いかけ: 前回の記事でYAMLファイルを作りましたが、毎回
kubectl applyを手動で叩いていませんか?- 「どのファイルを適用したっけ?」
- 「誰かが勝手に設定を変えてしまった…」
- 「手元のファイルと今の環境、どっちが正解?」
- 本記事のゴール: これらの悩みを解決するGitOpsを導入します。コード(Git)を変更するだけで、自動的にクラスターへ反映される「魔法」のような環境を構築しましょう。
- 【内部リンク】 YAMLファイルの書き方に不安がある方は、前回の記事「YAMLファイル(マニフェスト)の書き方」を復習してください。
GitOps(ギットオプス)とは何か?
難しい言葉を使わずに仕組みを解説します。
- 定義: 「Gitリポジトリを唯一の正解(Single Source of Truth)」として、システムの状態を管理する手法。
- 従来のCI/CDとの違い:
- Push型: Jenkinsなどが「行け!」と命令してデプロイする(セキュリティリスクがある)。
- Pull型 (GitOps): ArgoCDなどがK8sの中から「変更ないかな?」とGitを見に行き、勝手に同期する(安全性が高い)。
ArgoCDとは
Kubernetes専用のCD(継続的デリバリー)ツールです。 直感的なWeb UI(管理画面)を持っており、現在のシステムの状態が可視化できるため、初心者にも非常に扱いやすいのが特徴です。
参考:ArgoCD 公式ドキュメント<small>※外部リンク</small>
【ハンズオン】ArgoCDで自動デプロイ環境を作ろう
今回は、ローカルのMinikube上にArgoCDをインストールし、あなたのGitHubリポジトリと連携させます。
事前準備
- GitHubアカウント: 無料アカウントでOK。
- リポジトリの作成:
k8s-practiceなどの名前でPublicリポジトリを作成し、前回の記事で作ったnginx-deployment.yamlなどをアップロードしておいてください。
手順1: ArgoCDのインストール
Minikubeを起動した状態で、以下のコマンドを実行します。 ArgoCD用の名前空間(部屋)を作り、そこに公式のマニフェストを流し込みます。
Bash
# 名前空間の作成
kubectl create namespace argocd
# ArgoCDのインストール(公式マニフェストを使用)
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
インストール完了まで少し待ちます。以下のコマンドでPodが全て Running になればOKです。
Bash
kubectl get pods -n argocd
手順2: 管理画面へのアクセス
ArgoCDのWeb UIにアクセスするために、ポートフォワード(通信の転送)を行います。 ※このコマンドを実行している間、ターミナルは操作できなくなるので、新しいターミナルウィンドウを開いてください。
Bash
kubectl port-forward svc/argocd-server -n argocd 8080:443
ブラウザで https://localhost:8080 にアクセスします。 ※「プライバシー保護の警告」が出ますが、ローカル環境なので「詳細設定」→「localhostにアクセスする」で進んでください。
手順3: ログイン
初期パスワードを取得します。
Bash
# 初期パスワードを表示するコマンド
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d; echo
- Username: admin
- Password: (上記コマンドで出力された文字列)
これでArgoCDのかっこいいダッシュボードに入れましたか?
手順4: アプリケーションの登録(Sync設定)
ArgoCDに「このGitリポジトリを監視してね」と教えます。 UI左上の 「+ NEW APP」 をクリックし、以下のように設定します。
- Application Name: my-nginx-app
- Project Name: default
- SYNC POLICY:
Automatic(ここが重要!自動同期の設定です)Prune ResourcesとSelf Healにもチェックを入れるとより強力です。
- SOURCE (Repository URL): あなたのGitHubリポジトリのURL (例: https://github.com/yourname/k8s-practice.git)
- SOURCE (Path): YAMLファイルが置いてあるフォルダ (ルートなら
.) - DESTINATION (Cluster URL):
https://kubernetes.default.svc(今のクラスター) - DESTINATION (Namespace): default
設定したら画面上の 「CREATE」 をクリック!
手順5: 自動デプロイの確認
作成後、タイルをクリックすると、リソースのツリー図が表示されます。 ステータスが Synced(緑色)と Healthy(ハートマーク)になっていれば、GitHubにあるマニフェスト通りにPodが起動しています。
手順6: 感動体験!Git経由での変更
ここがクライマックスです。kubectl コマンドは使いません。
- GitHub上で、
nginx-deployment.yamlのreplicasを書き換えてコミットしてください(例: 3個 → 1個)。 - ArgoCDの画面を眺めていてください(デフォルトでは3分ごとにチェックしますが、待ちきれない場合は「Refresh」ボタンを押してください)。
- 画面上のPodが自動的に減っていく様子が見えるはずです!
これが GitOps です。Gitを変更するだけで、本番環境が追従しました。
まとめ:運用自動化への第一歩
今回で、Kubernetes運用の基本サイクルが完成しました。
- Part 1: K8sの概念を知り、Minikubeを動かす。
- Part 2: YAMLファイルで「あるべき姿」を定義する。
- Part 3 (今回): ArgoCDを使って、Gitへの変更を自動反映させる。
ここまで出来れば、あなたはもう「コンテナ初心者」ではありません。モダンな開発フローの基礎を習得しています。
さらに学びたい方は、以下のようなトピックに進むのがおすすめです。
- Helm: 複雑なYAMLをテンプレート化して管理する技術。
- CIツール (GitHub Actions): アプリのコード変更からDockerイメージ作成までを自動化する方法。
- 【内部リンク】 GitHub Actionsの基礎については「GitHub Actions入門記事」も併せてご覧ください。
GitOpsの世界は奥が深く、楽しいものです。ぜひ現場での導入も検討してみてください!
コメントを残す