반응형
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 |