初めての人がカンタンにコンテナアプリが使えるようにシェルスクリプトで展開をしていたが、実際に使う方となると、そのシェルを編集して、実行して。。。となり、結構手間だったりする。また、初めての人はスクリプトも読まず、読めずなので、フラストレーションが貯まる様子。なので、ダイレクトにアプリケーションが参照できて、もっと一連の作業を効率化したい。そう、これは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
- パスワード:<さっき調べたパスワード>
こんな画面がでてくる。
これで展開完了。
早速、githubのレポジトリにあるマニュフェストを動かしてみる。
レポジトリの登録
編集をしないで、単に展開するだけならレポジトリの登録は不要だが、普通は更新をするので、まず自分のレポジトリを登録する。
以下のレポジトリを登録してみる。
以下のSettings画面で登録をする。Repositorisをクリック。
Connect repo using sshをクリック
以下のようにして、自分のレポジトリを登録する。URLはsshのURLを登録する。httpsのURLは登録できない。(そもそもhttpsのURLは更新できなくなったので)
登録する際にSSHのキーが必要なのは言うまでもない。
登録が完了するとSuccessfulと表示される。
レポジトリのマニュフェストを使ってアプリケーションの作成
アプリケーションを動作させるnamespaceを事前に作っておく。
kubectl create ns mycicd01
アプリケーションを以下のようにして登録していく。
New App あるいはCreate Applicationをクリック。
ここで、レポジトリのURLとパス(アプリケーションのyamlが入っているパス)を登録。
クラスタURLはhttps://kubernetes.default.svcとすることで、 argo-cdが展開されたkubernetes上に展開される。
Namespaceは先ほど作成したNamespaceを指定。
作成が完了すると以下のようになる。
まだ同期されていないのでSyncをクリック。
Syncが完了すると以下の画面になる。
ここで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前
push 後
再度確認すると、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
以上で動作が確認できた。
見栄えもよくアプリケーションの変更管理にとても便利だなぁと思った。