初心者でもわかる!Argo CDとは?

◆ Live配信スケジュール ◆
サイオステクノロジーでは、Microsoft MVPの武井による「わかりみの深いシリーズ」など、定期的なLive配信を行っています。
⇒ 詳細スケジュールはこちらから
⇒ 見逃してしまった方はYoutubeチャンネルをご覧ください
【5/21開催】Azure OpenAI ServiceによるRAG実装ガイドを公開しました
生成AIを活用したユースケースで最も一番熱いと言われているRAGの実装ガイドを公開しました。そのガイドの紹介をおこなうイベントです!!
https://tech-lab.connpass.com/event/315703/

こんにちは、やまなかです。今回はGitOpsパラダイムに従ったKubernetesのCD(Continuous Delivery)ツールであるArgo CDについて分かりやすく簡単にまとめていこうと思います。Argo CDはCDに特化したツールであり、CI/CDで言うところのCI(Continuous Integration)の機能はありません。
まずはCI/CDやGitOpsといった部分からまとめていきます。

CI/CDとは

Continuous Integration / Continuous Deliveryの略称で、継続的インテグレーション&継続的デリバリーという意味です。具体的に継続的インテグレーションと継続的デリバリーが何を指すかというと以下の通りです。

継続的インテグレーション

ビルドとテストを自動化させることを指します。新しいコミットがメインブランチにマージされるたびに、アプリケーションが壊れていないかどうかをチェックする自動テストに重点が置かれています。

継続的デリバリー

コード変更後にステージング環境などにデプロイしてテストなどを行います。自動テストに加えて自動リリースもあり、いつでもアプリケーションをデプロイできる状態にすることを指します。

CI/CDに戻ると、コードチェックやテストの自動化、デプロイの自動化などを行うことで生産性の向上を図る開発手法です。

GitOpsとは

次にArgo CDの思想であるGitOpsです。GitOpsはバージョン管理やCI/CDなどの開発及び運用(DevOps)の手法をインフラ管理に適用した運用モデルです。Gitを使ってインフラやアプリケーションなどのシステム全体を管理する手法と考えることができます。

Argo CDとは

本題のArgo CDは、監視している実行中のKubernetesアプリケーションの状態と、Gitリポジトリの状態を比較するコントローラとして実装されています。状態に差がある場合にその違いを視覚化して、自動もしくは手動でアプリケーションの同期を行います。
基本的な流れとしては、Kubernetesマニフェストを使用してGitリポジトリのコミットを監視します。コミットが発生するとKubernetesクラスタ(コンテナ化されたアプリケーションを実行するノードの集合体)構成とGitの内容を同期するといった流れになります。
GitOpsのCDツールで良く上げられるのが、Argo CDとFluxになります。両者に大きな機能差はないものの、Argo CDはGUIで操作が可能であるため、kubectlコマンドをあまり理解していなくてもクラスタ運用できる点がメリットとして挙げられます。FluxはGUIやユーザー管理機能はないもののシンプルで軽量に作られています。

アーキテクチャ

前項にもあったようにArgo CDはKubernetesのコントローラとして実装されています。単体のアプリケーションと複数のアプリケーションをまとめるリソースが定義されています。このリソースをクラスタに適用することで参照するGitリポジトリと管理するクラスタ、ネームスペース、リソースなどを指定することができるようになっています。

デモ

KubernetesクラスタとGitリポジトリを同期するデモGettingStartを行ってみます。

実行環境

OS : WSL2 – Ubuntu 22.04.2 LTS

minikube : version: v1.30.1

 

minikubeを起動します。

$ minikube start

Argo CD をインストールします。

$ kubectl create namespace argocd
$ kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

Argo CD CLI をダウンロードします。

$ curl -sSL -o argocd-linux-amd64 https://github.com/argoproj/argo-cd/releases/latest/download/argocd-linux-amd64
$ sudo install -m 555 argocd-linux-amd64 /usr/local/bin/argocd
$ rm argocd-linux-amd64

Argo CD API サーバーにアクセスします。
デフォルトでArgoCDは外部IPから接続できないようになっているので、ここではPort Forwardingしてローカルから接続できるようにします。Port Forwardingとは簡単に言うとデータを転送することです。

$ kubectl port-forward svc/argocd-server -n argocd 8080:443

localhost:8080でArgoCDのログイン画面に行きます。

デフォルトのユーザーadminのパスワードはこのコマンドで確認できます。adminとパスワードを入力してログインします。

$ argocd admin initial-password -n argocd

トップページにアクセスできました。

サンプルのGit リポジトリを自身のGitHubアカウント上にフォークします。この作業はコードの変更を加えたときの挙動を見るために行います。試しに動かしたいだけのときはサンプルのGitリポジトリをそのまま使っても大丈夫です。
https://github.com/argoproj/argocd-example-apps

NEW APPボタンからアプリケーションの情報を入力していきます。

GENERAL
Application Nameguestbook
Project Namedefault
SYNC POLICYManual
SOURCE
Repository URLhttps://github.com/{GitHubのユーザー名(なければargoproj)}/argocd-example-apps.git
RevisionHEAD
Pathguestbook
DESTINATION
Cluster URLhttps://kubernetes.default.svc
Namespace
default

UI上部のCREATEを押してアプリケーションを作成します。

ステータスがOutOfSyncになっていることを確認します。

SYNC→SYNCHRONIZEを実行してアプリケーションをデプロイします。

ステータスがSyncedになってアプリケーションをデプロイできました。

guestbookを押すとKubernetesリソースを確認することができます。

GitHub上でフォークしたサンプルアプリケーションに変更を加えます。guestbook/guestbook-ui-deployment.yaml内のreplicasを好きな数に変更してみます。

REFRESHを押すとステータスがOutOfSyncになっていることを確認できます。

UI上部のAPP DIFFを見てみると変更箇所を確認できます。

戻ってSYNCを実行します。podの数がreplicasで指定した数になっていることを確認できます。 

デプロイしたアプリケーションを確認してみましょう。以下のコマンドでguestbookをPort Forwardingしてローカルから接続できるようにします。

$ kubectl port-forward svc/guestbook-ui -n default 8000:80

localhost:8000にアクセスするとguestbookが表示されました。

まとめ

Argo CDはGitOpsパラダイムに従ったKubernetesのCDツールでした。実行中のアプリケーションの状態と、Gitリポジトリの状態を比較しており、状態に差がある場合にその違いをUIで視覚化して、今回は手動でアプリケーションの同期を行いました。このように、Argo CDを使うことでアプリケーションのデプロイをシンプルで効率的に管理することができます。

参考文献

https://www.cncf.io/blog/2020/12/17/solving-configuration-drift-using-gitops-with-argo-cd/

https://www.redhat.com/ja/topics/devops/what-is-gitops

https://dev.classmethod.jp/articles/kind_kubernete_argocd_getting_started/

https://techstep.hatenablog.com/entry/2020/09/22/113404

https://qiita.com/nisshii_Y/items/38afa31c1b9636264618

アバター画像
About やまなか 6 Articles
サイオステクノロジーに2023年新卒入社。高専では半導体細線の量子電子伝導、大学では聴覚の認知知覚の研究を行っており、現在はコンテナやインフラ周りを勉強中。この通り何でもやります。

ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

2人がこの投稿は役に立ったと言っています。


ご覧いただきありがとうございます。
ブログの最新情報はSNSでも発信しております。
ぜひTwitterのフォロー&Facebookページにいいねをお願い致します!



>> 雑誌等の執筆依頼を受付しております。
   ご希望の方はお気軽にお問い合わせください!

Be the first to comment

Leave a Reply

Your email address will not be published.


*


質問はこちら 閉じる