Kubernetes ArgoCD 설치하기

ArgoCD 사용하기.

사전 확인하기.

우선 Kubernetes 가 설치되고, kubectl 을 이용할 수 있는지 우선 확인하자.

kubectl cluster-info

Kubernetes master is running at https://172.16.10.100:6443
KubeDNS is running at https://172.16.10.100:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.

필자의 경우 로컬에 VM을 이용하여 multer master kubernetes cluster 를 우선 구현해 놓았다.

kubectl get nodes

NAME            STATUS   ROLES    AGE    VERSION
kube-master01   Ready    master   3d8h   v1.19.2
kube-master02   Ready    master   3d8h   v1.19.2
kube-master03   Ready    master   3d8h   v1.19.2
kube-node01     Ready    <none>   3d8h   v1.19.2
kube-node02     Ready    <none>   3d8h   v1.19.2

마스터 3대 노드 2대로 노드 정보를 확인 할 수 있다.

ArgoCD 설치하기.

일단 argocd github 사이트에 접근한다.

https://github.com/argoproj/argo-cd 이중 우측 화면에서 Release를 찾아서 클릭하자.

argocd01

보는바와 같이 Release 를 클릭하자. 필자의 경우 1.8.5 버젼이 나와 있다.

argocd02

설치하기.

처음 5개의 클러스터를 VM으로 설정했으나 PC가 너무 버벅여서 docker-desktop 로 설치해본다.

kubectl create namespace argocd

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

Warning: apiextensions.k8s.io/v1beta1 CustomResourceDefinition is deprecated in v1.16+, unavailable in v1.22+; use apiextensions.k8s.io/v1 CustomResourceDefinition
customresourcedefinition.apiextensions.k8s.io/applications.argoproj.io created
customresourcedefinition.apiextensions.k8s.io/appprojects.argoproj.io created

serviceaccount/argocd-application-controller created
serviceaccount/argocd-dex-server created
serviceaccount/argocd-redis created
serviceaccount/argocd-server created

role.rbac.authorization.k8s.io/argocd-application-controller created
role.rbac.authorization.k8s.io/argocd-dex-server created
role.rbac.authorization.k8s.io/argocd-redis created
role.rbac.authorization.k8s.io/argocd-server created

clusterrole.rbac.authorization.k8s.io/argocd-application-controller created
clusterrole.rbac.authorization.k8s.io/argocd-server created

rolebinding.rbac.authorization.k8s.io/argocd-application-controller created
rolebinding.rbac.authorization.k8s.io/argocd-dex-server created
rolebinding.rbac.authorization.k8s.io/argocd-redis created
rolebinding.rbac.authorization.k8s.io/argocd-server created

clusterrolebinding.rbac.authorization.k8s.io/argocd-application-controller created
clusterrolebinding.rbac.authorization.k8s.io/argocd-server created

configmap/argocd-cm created
configmap/argocd-gpg-keys-cm created
configmap/argocd-rbac-cm created
configmap/argocd-ssh-known-hosts-cm created
configmap/argocd-tls-certs-cm created

secret/argocd-secret created

service/argocd-dex-server created
service/argocd-metrics created
service/argocd-redis created
service/argocd-repo-server created
service/argocd-server created
service/argocd-server-metrics created

deployment.apps/argocd-dex-server created
deployment.apps/argocd-redis created
deployment.apps/argocd-repo-server created
deployment.apps/argocd-server created

statefulset.apps/argocd-application-controller created

위 내용과 같이 ArgoCD가 설치가 되었다.

뉴라인으로 분리된 사항을 보면 ArgoCD를 위해서 어떠한 pod와 서비스가 실행이 되었고, 각 서비스 어카운트와 클러스터 롤바인딩이 있는지 이해할 수 있을 것이다.

  • argocd-server
  • repo-server
  • app-controller
  • redis
  • dex server

등과 같은 서비스가 올라가 있다.

설치된 정보 살펴보기.

kubectl get all -n argocd

NAME                                     READY   STATUS    RESTARTS   AGE
pod/argocd-application-controller-0      1/1     Running   0          2m11s
pod/argocd-dex-server-66bc48cb59-zd7mp   1/1     Running   0          2m11s
pod/argocd-redis-6fb68d9df5-bgtpv        1/1     Running   0          2m11s
pod/argocd-repo-server-5bc4ff7b6-dsb9j   1/1     Running   0          2m11s
pod/argocd-server-68f79c4cf9-pkcv6       1/1     Running   0          2m11s

NAME                            TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                      AGE
service/argocd-dex-server       ClusterIP   10.108.64.155    <none>        5556/TCP,5557/TCP,5558/TCP   2m12s
service/argocd-metrics          ClusterIP   10.105.67.231    <none>        8082/TCP                     2m12s
service/argocd-redis            ClusterIP   10.100.242.126   <none>        6379/TCP                     2m12s
service/argocd-repo-server      ClusterIP   10.110.179.92    <none>        8081/TCP,8084/TCP            2m12s
service/argocd-server           ClusterIP   10.96.1.86       <none>        80/TCP,443/TCP               2m12s
service/argocd-server-metrics   ClusterIP   10.99.136.212    <none>        8083/TCP                     2m12s

NAME                                 READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/argocd-dex-server    1/1     1            1           2m12s
deployment.apps/argocd-redis         1/1     1            1           2m12s
deployment.apps/argocd-repo-server   1/1     1            1           2m11s
deployment.apps/argocd-server        1/1     1            1           2m11s

NAME                                           DESIRED   CURRENT   READY   AGE
replicaset.apps/argocd-dex-server-66bc48cb59   1         1         1       2m12s
replicaset.apps/argocd-redis-6fb68d9df5        1         1         1       2m12s
replicaset.apps/argocd-repo-server-5bc4ff7b6   1         1         1       2m11s
replicaset.apps/argocd-server-68f79c4cf9       1         1         1       2m11s

NAME                                             READY   AGE
statefulset.apps/argocd-application-controller   1/1     2m11s

모든 오브젝트가 올라올때까지 기다려야한다.

ArgoCD 서버에 접근하기.

이제는 ArgoCD 에 접근하기 위해서 변경해야할 사항이 있다.

service/argocd-server           ClusterIP   10.96.1.86       <none>        80/TCP,443/TCP               2m12s

보는바와 같이 argocd-server 은 ClusterIP 설정되어 외부에서 접근이 안된다. 이를 NodePort 로 변경해 주어야한다.

kubectl -n argocd edit svc argocd-server

... 생략 
spec:
  clusterIP: 10.96.1.86
  ports:
  - name: http
    port: 80
    protocol: TCP
    targetPort: 8080
  - name: https
    port: 443
    protocol: TCP
    targetPort: 8080
  selector:
    app.kubernetes.io/name: argocd-server
  sessionAffinity: None
  type: NodePort <-- ClusterIP 에서 NodePort 로 바꿔주었다. 
status:
  loadBalancer: {}

저장하고 나가면 다음과 같다.

service/argocd-server           NodePort    10.96.1.86       <none>        80:31602/TCP,443:31990/TCP   6m11s

이제 NodePort 로 바뀌었따. 이제 서버에 접근해보자.

노드 주소 찾기.

kubectl get nodes -o wide

NAME             STATUS   ROLES    AGE    VERSION   INTERNAL-IP    EXTERNAL-IP   OS-IMAGE         KERNEL-VERSION      CONTAINER-RUNTIME
docker-desktop   Ready    master   3d8h   v1.19.3   192.168.65.3   <none>        Docker Desktop   4.19.121-linuxkit   docker://20.10.2

우리는 docker-desktop 한대의 서버에 설치 했으니 1개의 노드 정보가 나온다.

localhost(docker-desktop이므로 가능) 으로 접근이 가능하며 argoCd의 포트는 http는 31602, https는 31990 임을 이미 봤다.

https://localhost:31602/ 으로 접근하면 다음과 같다.

argocd03

localhost(안전하지 않음) 으로 이동을 클릭한다.

그럼 다음 화면가 같이 나온다. 초기 정보는 다음과 같다.

argocd04

  • Username: admin
  • Password: pod이름 (argocd-server-68f79c4cf9-pkcv6) 을 넣어보자.

SignIn 을 클릭하면 초기 화면으로 들어간다.

argocd05

결론

지금까지 ArgoCD 를 설치해 보았다.

docker-desktop 으로 작업해 보았지만 설치 과정은 그리 어렵지 않음을 알 수 있다.

이제부터 ArgoCD로 고고~..