今更ならがArgo-cdを使ってみた

投稿者: | 5月 24, 2022

初めての人がカンタンにコンテナアプリが使えるようにシェルスクリプトで展開をしていたが、実際に使う方となると、そのシェルを編集して、実行して。。。となり、結構手間だったりする。また、初めての人はスクリプトも読まず、読めずなので、フラストレーションが貯まる様子。なので、ダイレクトにアプリケーションが参照できて、もっと一連の作業を効率化したい。そう、これはCI/CDを導入だぁと。それにソースもGithub/Gitlab CEで管理しているので。

とはいえ、スクリプトを読まない人はアプリケーションを書いても特に読まないということにあとで気が付く。どうやら読まないのはそれ以前だったということに気が付くが。

なんやかんやで調べてみたらArgo-cdが便利そうだった。結果、めちゃくちゃ便利だった。

 

閑話休題

 

Argo-CDでgithubにあるマニュフェストをKubernetes上に展開してみる。

Argoに必要なもの

  • Kubernetes環境: 特にこれといった制限はないと思う。オンプレでもクラウドでも動作する
  • Githubのレポジトリ: 自身のレポジトリ。あるいはArgo-CDのgithubにサンプルがあるので、フォークしておく。フォークしておかないと自分で編集できない。編集しなくてもいいならそもそもこれはいらない。

展開方法(ロードバランサーがある環境に展開している。)

デプロイ

kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "LoadBalancer"}}'

コマンドラインツールのインストール

VERSION=$(curl --silent "https://api.github.com/repos/argoproj/argo-cd/releases/latest" | grep '"tag_name"' | sed -E 's/.*"([^"]+)".*/\1/')
curl -sSL -o /usr/local/bin/argocd https://github.com/argoproj/argo-cd/releases/download/$VERSION/argocd-linux-amd64
chmod +x /usr/local/bin/argocd
argocd completion bash >/etc/bash_completion.d/argocd

 

展開が終わったらargocdのweb UIにアクセス。IPアドレスは以下で確認できる。

kubectl -n argocd get svc argocd-server -o jsonpath="{.status.loadBalancer.ingress[*].ip}"

ログインに必要なadminユーザのパスワードは

kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d ; echo

https://<EXTERNAL-IP>/

  • ユーザ名:admin
  • パスワード:<さっき調べたパスワード>

こんな画面がでてくる。

Image

これで展開完了。

早速、githubのレポジトリにあるマニュフェストを動かしてみる。

 

レポジトリの登録

編集をしないで、単に展開するだけならレポジトリの登録は不要だが、普通は更新をするので、まず自分のレポジトリを登録する。
以下のレポジトリを登録してみる。

Image

以下のSettings画面で登録をする。Repositorisをクリック。

Image

Connect repo using sshをクリック

Image

以下のようにして、自分のレポジトリを登録する。URLはsshのURLを登録する。httpsのURLは登録できない。(そもそもhttpsのURLは更新できなくなったので)
登録する際にSSHのキーが必要なのは言うまでもない。

Image

登録が完了するとSuccessfulと表示される。

Image

 

レポジトリのマニュフェストを使ってアプリケーションの作成

アプリケーションを動作させるnamespaceを事前に作っておく。

kubectl create ns mycicd01

アプリケーションを以下のようにして登録していく。

New App あるいはCreate Applicationをクリック。

Image

Image

ここで、レポジトリのURLとパス(アプリケーションのyamlが入っているパス)を登録。
クラスタURLはhttps://kubernetes.default.svcとすることで、 argo-cdが展開されたkubernetes上に展開される。
Namespaceは先ほど作成したNamespaceを指定。

Image

作成が完了すると以下のようになる。

Image

まだ同期されていないのでSyncをクリック。

Image

Syncが完了すると以下の画面になる。

Image

ここでNamespaceを確認すると、アプリケーションが作成されている。

kubectl -n mycicd01 get all,pvc

NAME READY STATUS RESTARTS AGE
pod/wordpress-56fdc6b844-mh278 1/1 Running 0 5m43s
pod/wordpress-mysql-79b47ccbd6-st8rd 1/1 Running 0 5m43s

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/wordpress-mysql ClusterIP None <none> 3306/TCP 5m43s
service/wordpress LoadBalancer 10.43.13.208 192.168.16.71 80:32213/TCP 5m43s

NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/wordpress 1/1 1 1 5m43s
deployment.apps/wordpress-mysql 1/1 1 1 5m43s

NAME DESIRED CURRENT READY AGE
replicaset.apps/wordpress-56fdc6b844 1 1 1 5m43s
replicaset.apps/wordpress-mysql-79b47ccbd6 1 1 1 5m43s

NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
persistentvolumeclaim/wp-pv-claim Bound pvc-f4d00a03-a2f0-453a-86df-a31f7beeb915 20Gi RWO longhorn 5m43s
persistentvolumeclaim/mysql-pv-claim Bound pvc-7a59e7e6-0675-4897-a7d4-6302331ce491 20Gi RWO longhorn 5m43s

 

更新をしてみる

wordpress-deployment.yamlのreplicaを1から2に変更して、commit pushしてみた。

push前

Image

push 後

Image

再度確認すると、replicaが2になっていた。レプリカの変更が反映されている。

kubectl -n mycicd01 get all,pvc

NAME READY STATUS RESTARTS AGE
pod/wordpress-56fdc6b844-mh278 1/1 Running 0 8m48s
pod/wordpress-mysql-79b47ccbd6-st8rd 1/1 Running 0 8m48s
pod/wordpress-56fdc6b844-bmpd9 1/1 Running 0 16s

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/wordpress-mysql ClusterIP None <none> 3306/TCP 8m48s
service/wordpress LoadBalancer 10.43.13.208 192.168.16.71 80:32213/TCP 8m48s

NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/wordpress-mysql 1/1 1 1 8m48s
deployment.apps/wordpress 2/2 2 2 8m48s

NAME DESIRED CURRENT READY AGE
replicaset.apps/wordpress-mysql-79b47ccbd6 1 1 1 8m48s
replicaset.apps/wordpress-56fdc6b844 2 2 2 8m48s

NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
persistentvolumeclaim/wp-pv-claim Bound pvc-f4d00a03-a2f0-453a-86df-a31f7beeb915 20Gi RWO longhorn 8m48s
persistentvolumeclaim/mysql-pv-claim Bound pvc-7a59e7e6-0675-4897-a7d4-6302331ce491 20Gi RWO longhorn 8m48s

 以上で動作が確認できた。

見栄えもよくアプリケーションの変更管理にとても便利だなぁと思った。

コメントを残す