작업 내용 요약
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 활용 플로우차트
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 인프라 환경에도 동기화가 진행된다.