EKSで機械学習 #8 Argo CDを利用したCD環境の構築


はじめに

このシリーズでは Amazon EKSで機械学習を行っていきたいと思います

シリーズ目次

EKSで機械学習 #1 準備編
EKSで機械学習 #2 クラスター作成編
EKSで機械学習 #3 Managed Worker Node作成編
EKSで機械学習 #4 GPU Managed Worker Node作成編
EKSで機械学習 #5 Cluster AutoScaler設定編
EKSで機械学習 #6 HPAの設定
EKSで機械学習 #7 EFSの設定
EKSで機械学習 #8 Argo CDを利用したCD環境の構築(この記事)

この記事の目的

Argo CDを利用したCD環境の構築を行います。
Argo CDを選んだ理由は、自分の勉強を兼ねているからです。

チュートリアル

こちらを参考にしました。

namaspace, crd の設定

namespaceについて汎用性があるように、ymlにしました。

namespace.yml
kind: Namespace
apiVersion: v1
metadata:
  name: argocd
  labels:
    name: argocd

install用のマニフェストもローカルに保存して、applyしました


k apply -f namespace.yml 
wget https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
k apply -f install.yaml -n argocd

 確認


k get all -n argocd
NAME                                                 READY   STATUS    RESTARTS   AGE
pod/argocd-application-controller-7585975794-h7sc7   1/1     Running   0          20s
pod/argocd-dex-server-6dbcf9c747-7sc22               1/1     Running   0          20s
pod/argocd-redis-868b8cb57f-29wk5                    1/1     Running   0          20s
pod/argocd-repo-server-6d8cdc4878-fgbnx              1/1     Running   0          20s
pod/argocd-server-656f9b895b-f9mh6                   1/1     Running   0          20s

NAME                            TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)             AGE
service/argocd-dex-server       ClusterIP   10.100.43.115    <none>        5556/TCP,5557/TCP   20s
service/argocd-metrics          ClusterIP   10.100.249.139   <none>        8082/TCP            20s
service/argocd-redis            ClusterIP   10.100.114.180   <none>        6379/TCP            20s
service/argocd-repo-server      ClusterIP   10.100.82.88     <none>        8081/TCP,8084/TCP   20s
service/argocd-server           ClusterIP   10.100.251.101   <none>        80/TCP,443/TCP      20s
service/argocd-server-metrics   ClusterIP   10.100.239.103   <none>        8083/TCP            20s

NAME                                            READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/argocd-application-controller   1/1     1            1           20s
deployment.apps/argocd-dex-server               1/1     1            1           20s
deployment.apps/argocd-redis                    1/1     1            1           20s
deployment.apps/argocd-repo-server              1/1     1            1           20s
deployment.apps/argocd-server                   1/1     1            1           20s

NAME                                                       DESIRED   CURRENT   READY   AGE
replicaset.apps/argocd-application-controller-7585975794   1         1         1       20s
replicaset.apps/argocd-dex-server-6dbcf9c747               1         1         1       20s
replicaset.apps/argocd-redis-868b8cb57f                    1         1         1       20s
replicaset.apps/argocd-repo-server-6d8cdc4878              1         1         1       20s
replicaset.apps/argocd-server-656f9b895b                   1         1         1       20s
PowerUser:~/environment/argo-cd $ 

Argo CD CLIの設定

https://argoproj.github.io/argo-cd/cli_installation/
これを参考にしました。


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

Argo CD API Serverへアクセスできるようにする

すでにサービスは起動していますが、svcは外部公開していないので、CLIが接続できません


k get svc -n argocd
NAME                    TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)             AGE
argocd-dex-server       ClusterIP   10.100.43.115    <none>        5556/TCP,5557/TCP   2m24s
argocd-metrics          ClusterIP   10.100.249.139   <none>        8082/TCP            2m24s
argocd-redis            ClusterIP   10.100.114.180   <none>        6379/TCP            2m24s
argocd-repo-server      ClusterIP   10.100.82.88     <none>        8081/TCP,8084/TCP   2m24s
argocd-server           ClusterIP   10.100.251.101   <none>        80/TCP,443/TCP      2m24s
argocd-server-metrics   ClusterIP   10.100.239.103   <none>        8083/TCP            2m24s

チュートリアルは2つ方法があり
port-forwardする方法とingressを作成する方法があるようですが、今回は port-forwardで行いたいと思います。

注意: 私の環境(cloud9)では port-forwardの方法ではArgoCDのUIにアクセスできなかったため、以下はローカル(Mac)で行っています


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

こんなのが表示されました

初期パスワードはpod名のようなので確認します


kubectl get pods -n argocd -l app.kubernetes.io/name=argocd-server -o name | cut -d'/' -f 2
argocd-server-656f9b895b-XXXXX

CLIでログインします。

argocd login localhost:8080
WARNING: server certificate had error: x509: certificate signed by unknown authority. Proceed insecurely (y/n)? y
Username: admin
Password: 
'admin' logged in successfully
Context 'localhost:8080' updated

新しいパスワードは argocd123 としました

argocd account update-password
*** Enter current password: 
*** Enter new password: 
*** Confirm new password: 
Password updated
Context 'localhost:8080' updated

サンプルアプリケーションの登録(GUI)

チュートリアルのURL通りで問題なく動きました。

まとめ

CD環境でArgoを導入しました。
近々、CIと組み合わせて、GitOps環境を構築したいと思います。
また、カナリアデプロイもこちらで紹介されていたので、時間あるときにやってみようと思います
https://qiita.com/syogun/items/2ed4478a314bf7e4a63e