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しました

```shell

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

##　確認
```shell

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/
これを参考にしました。

```shell

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が接続できません

```shell

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
```
チュートリアルは２つ方法があり
port-forwardする方法とingressを作成する方法があるようですが、今回は port-forwardで行いたいと思います。

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

```shell

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

```

こんなのが表示されました
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/107953/c7e703ed-1cd5-9191-ae48-36f54ad2bea4.png)


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

```shell

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

CLIでログインします。

```shell
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 としました

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

# サンプルアプリケーションの登録(GUI)
チュートリアルのURL通りで問題なく動きました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/107953/d929ac20-631a-6373-e864-c7f7af2f89ad.png)


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