【Kubernetes入門 Part3】ArgoCDで実現するGitOps!GitHubと連携して自動デプロイを体験しよう


導入:手動デプロイの恐怖とさよなら

  • 読者への問いかけ: 前回の記事で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リポジトリと連携させます。

事前準備

  1. GitHubアカウント: 無料アカウントでOK。
  2. リポジトリの作成: 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 ResourcesSelf 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 コマンドは使いません。

  1. GitHub上で、nginx-deployment.yamlreplicas を書き換えてコミットしてください(例: 3個 → 1個)。
  2. ArgoCDの画面を眺めていてください(デフォルトでは3分ごとにチェックしますが、待ちきれない場合は「Refresh」ボタンを押してください)。
  3. 画面上のPodが自動的に減っていく様子が見えるはずです!

これが GitOps です。Gitを変更するだけで、本番環境が追従しました。


まとめ:運用自動化への第一歩

今回で、Kubernetes運用の基本サイクルが完成しました。

  1. Part 1: K8sの概念を知り、Minikubeを動かす。
  2. Part 2: YAMLファイルで「あるべき姿」を定義する。
  3. Part 3 (今回): ArgoCDを使って、Gitへの変更を自動反映させる。

ここまで出来れば、あなたはもう「コンテナ初心者」ではありません。モダンな開発フローの基礎を習得しています。

さらに学びたい方は、以下のようなトピックに進むのがおすすめです。

  • Helm: 複雑なYAMLをテンプレート化して管理する技術。
  • CIツール (GitHub Actions): アプリのコード変更からDockerイメージ作成までを自動化する方法。
  • 【内部リンク】 GitHub Actionsの基礎については「GitHub Actions入門記事」も併せてご覧ください。

GitOpsの世界は奥が深く、楽しいものです。ぜひ現場での導入も検討してみてください!


投稿日

カテゴリー:

投稿者:

タグ:

コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です