본문 바로가기

cicd/argocd

ArgoCD로 Kubernetes CD환경 구성하기

반응형

ArgoCD는 GitOps의 일환으로 kubernetes의 resource와 github의 manifest의 정의를 동일하게 유지하는 오픈소스 이다.

즉 kubernetes환경을 위한 CD(Continuous Delivery) 툴 이다.

테스트는 EKS환경에서 진행하였다.


1. 개념

  • 위에서 언급한 것 처럼 kubernetes환경의 resource와 github의 manifest(yaml)정의의 sync를 맞추기 위한 툴이다.
  • github에 업로드된 yaml파일과 kubernetes의 resource 상태를 체크해 다르면 자동으로 sync(배포)를 해준다.
  • 배포와 관련된 모든 resource를 code로 관리할 수 있다.

 

2. ArgoCD 설치

  • argocd namespace를 생성 후 공식 yaml파일을 apply한다.
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

 

  • resource들이 정상적으로 생성되었는지 확인한다.
test@DESKTOP-F55SF6V:~ (⎈|test-cluster:default)# kubectl get all -n argocd
NAME                                                    READY   STATUS    RESTARTS   AGE
pod/argocd-application-controller-0                     1/1     Running   0          24h
pod/argocd-applicationset-controller-5c58bc8bb4-5mj4z   1/1     Running   0          24h
pod/argocd-dex-server-5dd49b5546-wd5hr                  1/1     Running   0          24h
pod/argocd-notifications-controller-76c76d65f-nf7t4     1/1     Running   0          24h
pod/argocd-redis-6d8cffcc47-kfwl6                       1/1     Running   0          24h
pod/argocd-repo-server-77949d8455-qjmsk                 1/1     Running   0          24h
pod/argocd-server-7f699f9c6c-pzkkk                      1/1     Running   0          24h

NAME                                              TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                      AGE
service/argocd-applicationset-controller          ClusterIP   10.100.61.148    <none>        7000/TCP,8080/TCP            24h
service/argocd-dex-server                         ClusterIP   10.100.237.176   <none>        5556/TCP,5557/TCP,5558/TCP   24h
service/argocd-metrics                            ClusterIP   10.100.193.226   <none>        8082/TCP                     24h
service/argocd-notifications-controller-metrics   ClusterIP   10.100.182.190   <none>        9001/TCP                     24h
service/argocd-redis                              ClusterIP   10.100.206.200   <none>        6379/TCP                     24h
service/argocd-repo-server                        ClusterIP   10.100.139.233   <none>        8081/TCP,8084/TCP            24h
service/argocd-server                             ClusterIP   10.100.54.207    <none>        80/TCP,443/TCP               24h
service/argocd-server-metrics                     ClusterIP   10.100.189.72    <none>        8083/TCP                     24h

NAME                                               READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/argocd-applicationset-controller   1/1     1            1           24h
deployment.apps/argocd-dex-server                  1/1     1            1           24h
deployment.apps/argocd-notifications-controller    1/1     1            1           24h
deployment.apps/argocd-redis                       1/1     1            1           24h
deployment.apps/argocd-repo-server                 1/1     1            1           24h
deployment.apps/argocd-server                      1/1     1            1           24h

 

3. web console 사용하기

  • 테스트 목적으로 구성하였기 때문에 port-forward를 통해 web console에 접속한다.
test@DESKTOP-F55SF6V:~ (⎈|test-cluster:default)# kubectl port-forward svc/argocd-server -n argocd 443:443
Forwarding from 127.0.0.1:443 -> 8080
Forwarding from [::1]:443 -> 8080

 

  • console 접근시 로그인이 필요하며 초기 패스워드는 secret으로 argocd-initial-admin-secret 에 저장되어 있다.
    아래와 같이 base64를 decode해주면 초기 패스워드 확인이 가능하다.
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d; echo

 

  • admin // 패스워드로 web console에 로그인 한다.

 

  • login하고나면 아래 처럼 초기 화면이 보인다. 이제 Application을 생성해 보자

 

4. Application 생성

  • 테스트를 위해 github에 public repository를 생성하고 deploy와 service yaml파일을 올려두었다.
  • nginx-deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: argocd-test
spec:
  replicas: 1
  selector:
    matchLabels:
      app: argocd-test
  template:
    metadata:
      labels:
        app: argocd-test
    spec:
      containers:
        - name: argocd-test
          image: nginx:latest
          ports:
            - containerPort: 80
  • nginx-svc.yaml
apiVersion: v1
kind: Service
metadata:
  name: argocd-test
spec:
  selector:
    app: argocd-test
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
  type: ClusterIP

 

  • ArgoCD 초기화면의 + NEW APP 를 누른다.

  • 생성할 Application들의 정보를 입력하는 창이 나온다.
옵션명 설명
Application Name Application의 이름을 작성해준다.
Project Name ArgoCD의 Project로 이번 테스트에서는 default를 선택해 준다.
SYNC POLICY Manual과 Automatic이 있으며 git의 Manifest와 kubernetes의 resource 동기화 방법을 결정한다.
이번 테스트에서는 Manual을 선택한다.
Repository URL git의 URL을 입력한다.
Revision git의 Revision이다. main을 선택한다.
Path  동기화할 경로를 지정한다. main브랜치의 root에 yaml파일이 존재하므로 '.' 을 입력한다.
Cluster URL 동기화할 Kubernetes의 URL을 입력한다.
해당 ArgoCD가 설치된 Kubernetes 정보가 조회 되며 해당 URL을 선택한다.
Namespace  Application을 배포할 Namespace를 지정한다.

 

  • 작성완료 후 Create를 누르면 아래와 같이 Application이 생성되고 상태는 OutOfSync이다.

 

  • SYNC를 누르고 SYNCHRONIZE를 누르면 동기화(배포)가 시작된다.

 

  • 동기화(배포)가 완료되면 아래와 같이 Synced상태가 되며 배포된 Kubernetes resource들이 확인 가능하다.

 

  • kubectl 명령어로도 정상적으로 resource들이 생성된 것을 확인할 수 있다.
test@DESKTOP-F55SF6V:~ (⎈|test-cluster:default)# k get all -n test
NAME                               READY   STATUS    RESTARTS   AGE
pod/argocd-test-794644d9f6-n2j4q   1/1     Running   0          2m16s

NAME                  TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)   AGE
service/argocd-test   ClusterIP   10.100.235.125   <none>        80/TCP    2m17s

NAME                          READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/argocd-test   1/1     1            1           2m20s

NAME                                     DESIRED   CURRENT   READY   AGE
replicaset.apps/argocd-test-794644d9f6   1         1         1       2m21s

 

 

5. Application 삭제

  • ArgoCD에서 관리되는 Application들의 삭제도 가능하다. 아래 DELETE버튼을 누르고 Application명을 입력하면 
    생성했던 Application이 삭제된다.

 

  • 마찬가지로 kubectl로 resource를 조회해도 정상적으로 삭제된 것을 볼 수 있다.
test@DESKTOP-F55SF6V:~ (⎈|test-cluster:default)# k get all -n test
No resources found in test namespace.

 

반응형

기본적인 ArgoCD 사용방법을 정리했다.

다음 포스팅 부터는 운영환경에 맞는 설정내용을 정리해 보겠다.

반응형

'cicd > argocd' 카테고리의 다른 글

ArgoCD CLI 사용하여 App 배포하기  (0) 2023.03.24
ArgoCD Source로 Private Git Repo 접근하기  (0) 2023.03.24
ArgoCD PRUNE과 SELF HEAL 테스트  (0) 2023.03.23