작업 내용 요약

Github Actions를 활용해서 애플리케이션 Build & Image push. 애플리케이션과 Kubernetes manifest 파일 변경점 발생시 ArgoCD를 통하여 로컬 Minikube 환경에 자동배포 환경 구축하기

📌

사용 환경

  • Mac Apple Sillicon

  • Local Minikube 환경

  • 배포할 Java application - Kafka test app (4 Deployment, 4 Service) (zookeeper, kafka, kafka-ui, spring-boot-app)

전체 구성도

Developer & Engineer 관점 ArgoCD 활용 플로우차트

Developer & Engineer 관점 ArgoCD 활용 플로우차트

ArgoCD Install & NordPort Service 구성

brew install argocd

kubectl create namespace argocd # 네임스페이스 생성

# argoCD manifest파일을 사용한 배포방식
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/ha/install.yaml

kubectl get pods -n argocd # 배포 확인

kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "NodePort"}}' # NodePort 설정

kubectl get service -n argocd # NodePort 확인

ArgoCD 대시보드 접속

minikube에서는 ClusterIP, NodePort로 서버에 접근 하려해도 불가능하다

→ 터널링 필요. 다음 명령어를 실행하여 argocd-service 의 터널링을 실행해야한다. (※ 보안상 터널링이 필요하다고하며, 풀수 있는 방법도 따로 존재한다고 한다)

usage: minikube service <service name> -n <nsmespace>

~ » minikube service argocd-server  -n argocd                                                                                                                               seongjin.an@seongjinan-DJ6306H4DN
|-----------|---------------|-------------|---------------------------|
| NAMESPACE |     NAME      | TARGET PORT |            URL            |
|-----------|---------------|-------------|---------------------------|
| argocd    | argocd-server | http/80     | http://192.168.49.2:31866 |
|           |               | https/443   | http://192.168.49.2:30635 |
|-----------|---------------|-------------|---------------------------|
🏃  argocd-server 서비스의 터널을 시작하는 중
|-----------|---------------|-------------|------------------------|
| NAMESPACE |     NAME      | TARGET PORT |          URL           |
|-----------|---------------|-------------|------------------------|
| argocd    | argocd-server |             | http://127.0.0.1:55140 |
|           |               |             | http://127.0.0.1:55141 |
|-----------|---------------|-------------|------------------------|
[argocd argocd-server  http://127.0.0.1:55140
http://127.0.0.1:55141]
❗  Because you are using a Docker driver on darwin, the terminal needs to be open to run it.

대시보드 PW 추출

위 명령어를 실행하여 출력되는 URL 접속화면 ▼

ID: admin(default)

PW: (아래 명령어 실행하여 확인)

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

ArgoCD 대시보드 설정

Github Repository

여기서 연결되는 github repository는 ArgoCD의 Oserve 대상이 될 Repo로써, manifest 파일에 변경사항이 발생하면 ArgoCD가 해당 내용을 K8S 클러스터에 반영하게된다.

Applications

ArgoCD 대시보드를 구성하고자하는 K8S 클러스터 정보와 위에서 생성한 Github URL 정보를 입력하는 과정

  • Application Name: 임의지정

  • Project Name : 임의지정

  • Sync Policy: 동기화 정책 Automatic으로 설정

  • SOURCE

    • Repository URL: 위에서 생성한 Github URL 정보 선택

    • Revision: ArgoCD가 모니터링할 브랜치 선택

    • Path: ArgoCD가 모니터링할 Manifest 파일이 있는 폴더 경로 선택

  • DESTINATION

    • Cluster URL: ArgoCD가 변경사항을 어느 클러스터에 배포하도록할 것인지 설정 (나는 minikube 환경에서 테스트하고있기 때문에 https://kubernetes.default.svc로 설정)

    • Namespace: 배포 목적지가 될 네임스페이스

ArgoCD 대시보드 Application 생성 결과

연결된 Github의 manifest 파일을 ArgoCD가 참조하여 구성한 Kubernetes 인프라 환경을 볼 수 있다.

이 상태에서 Github 저장소 파일에 변경사항이 발생하면 Kubernetes 인프라 환경에도 동기화가 진행된다.