Room9

Argo CD (1) - Installation 본문

Kubernetes/Ops

Argo CD (1) - Installation

Room9_ 2021. 11. 11. 17:35

Overview

What is Argo CD?

Argo CD는 Kubernetes를 위한 선언적 GitOps 지속적 전달 도구 입니다.
Argo CD is a declarative, GitOps continuous delivery tool for Kubernetes.

GitOps를 구현하고 Kubernetes CI/CD에서 CD를 운영할 수 있는 툴입니다.

대시보드를 제공하여 GUI 환경에서 배포 현황을 편하게 확인할 수도 있습니다.

아래의 그림은 배포의 단계에서 ArgoCD가 담당하는 부분을 확인할 수 있습니다.

내가 생각한 지속적 배포

Details

  • ArgoCD Install
  • ArgoCD CLI
  • ArgoCD API
  • Login Using The CLI

ArgoCD Installation

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

argocd가 배포될 네임스페이스를 만들어주고 설치를 진행

경고
설치 매니페스트에는 네임스페이스 ClusterRoleBinding를 참조하는 리소스가 포함 됩니다 argocd. Argo CD를 다른 네임스페이스에 설치하는 경우 네임스페이스 참조를 업데이트해야 합니다.
kubectl get all -n argocd
NAME                                      READY   STATUS    RESTARTS   AGE
pod/argocd-application-controller-0       1/1     Running   0          3m
pod/argocd-dex-server-6c55787bc6-dhdcd    1/1     Running   0          3m
pod/argocd-redis-74d8c6db65-jtf2t         1/1     Running   0          3m
pod/argocd-repo-server-6c44847cf9-jz2xk   1/1     Running   0          3m
pod/argocd-server-67b65559fb-gtmd2        1/1     Running   0          3m

NAME                            TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                      AGE
service/argocd-dex-server       ClusterIP   10.102.99.141    <none>        5556/TCP,5557/TCP,5558/TCP   3m1s
service/argocd-metrics          ClusterIP   10.106.23.248    <none>        8082/TCP                     3m1s
service/argocd-redis            ClusterIP   10.96.101.32     <none>        6379/TCP                     3m1s
service/argocd-repo-server      ClusterIP   10.98.253.172    <none>        8081/TCP,8084/TCP            3m1s
service/argocd-server           ClusterIP   10.102.65.68     <none>        80/TCP,443/TCP               3m1s
service/argocd-server-metrics   ClusterIP   10.104.154.193   <none>        8083/TCP                     3m1s

NAME                                 READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/argocd-dex-server    1/1     1            1           3m1s
deployment.apps/argocd-redis         1/1     1            1           3m1s
deployment.apps/argocd-repo-server   1/1     1            1           3m1s
deployment.apps/argocd-server        1/1     1            1           3m1s

NAME                                            DESIRED   CURRENT   READY   AGE
replicaset.apps/argocd-dex-server-6c55787bc6    1         1         1       3m1s
replicaset.apps/argocd-redis-74d8c6db65         1         1         1       3m1s
replicaset.apps/argocd-repo-server-6c44847cf9   1         1         1       3m1s
replicaset.apps/argocd-server-67b65559fb        1         1         1       3m1s

NAME                                             READY   AGE
statefulset.apps/argocd-application-controller   1/1     3m1s

해당 네임스페이스에 설치된 오브젝트들을 확인할 수 있습니다.

 

ArgoCD CLI

curl -sSL -o /usr/local/bin/argocd https://github.com/argoproj/argo-cd/releases/latest/download/argocd-linux-amd64
chmod +x /usr/local/bin/argocd

 

ArgoCD API

위의 설치 결과에서 Service의 argocd-server의 타입을 확인해보면 Type이 ClusterIP로 지정되어 있는것을 확인할수 있습니다. API 서버에 액세스 하려면 해당 서비스의 타입이 LoadBalancer / NodePort 중 하나 이거나 Ingress를 이용하여 노출하는 방법과 포트 포워딩을 이용하는 방법이 있습니다.

해당 문서에서는 간단하게 NodePort로 서비스 타입을 변경하여 접속해보도록 하겠습니다.

kubectl edit svc argocd-server -n argocd

kubectl get svc -n argocd

NAME                    TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                      AGE
argocd-dex-server       ClusterIP   10.102.99.141    <none>        5556/TCP,5557/TCP,5558/TCP   19m
argocd-metrics          ClusterIP   10.106.23.248    <none>        8082/TCP                     19m
argocd-redis            ClusterIP   10.96.101.32     <none>        6379/TCP                     19m
argocd-repo-server      ClusterIP   10.98.253.172    <none>        8081/TCP,8084/TCP            19m
argocd-server           NodePort    10.102.65.68     <none>        80:30841/TCP,443:30810/TCP   19m
argocd-server-metrics   ClusterIP   10.104.154.193   <none>        8083/TCP                     19m

kubectl get nodes -o wide

NAME     STATUS   ROLES                  AGE   VERSION   INTERNAL-IP     EXTERNAL-IP   OS-IMAGE                KERNEL-VERSION                CONTAINER-RUNTIME
m-k8s    Ready    control-plane,master   55d   v1.20.2   192.168.2.10    <none>        CentOS Linux 7 (Core)   3.10.0-1127.19.1.el7.x86_64   docker://19.3.14
w1-k8s   Ready    <none>                 55d   v1.20.2   192.168.2.101   <none>        CentOS Linux 7 (Core)   3.10.0-1127.19.1.el7.x86_64   docker://19.3.14
w2-k8s   Ready    <none>                 55d   v1.20.2   192.168.2.102   <none>        CentOS Linux 7 (Core)   3.10.0-1127.19.1.el7.x86_64   docker://19.3.14
w3-k8s   Ready    <none>                 55d   v1.20.2   192.168.2.103   <none>        CentOS Linux 7 (Core)   3.10.0-1127.19.1.el7.x86_64   docker://19.3.14

서비스 타입이 NodePort로 변경되었고 노드의 IP로 접속하게 되면

ArgoCD 메인 화면

 

Login Using The CLI

설치한 CLI를 이용하여 설치된 ArgoCD에 로그인해 보도록 하겠습니다.(초기 계정명은 admin 입니다.)

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

sGirMmmJJlVjmASp

위와 같이 해당 admin 계정의 Password 정보를 얻을 수 있습니다. 해당 계정 정보를 가지고 CLI를 이용하여 로그인 해보도록 하겠습니다.

argocd login 10.102.65.68
WARNING: server certificate had error: x509: cannot validate certificate for 10.102.65.68 because it doesn't contain any IP SANs. Proceed insecurely (y/n)? y
Username: admin
Password: 
'admin:login' logged in successfully
Context '10.102.65.68' updated

ArgoCD login 명령어와 서버의 IP 또는 호스트명으로 접속 이후 패스워드를 입력하게 되면 로그인이 됩니다.

 

다음 글에서는 설치한 ArgoCD 와 Github 연동 이후 실제 클러스터에 배포할 예정입니다.

감사합니다.

 

References

https://argo-cd.readthedocs.io/en/stable/getting_started/

https://argo-cd.readthedocs.io/en/stable/cli_installation/

Comments