Argo CD는 Jenkins와는 완전히 다른 방식으로 관리됩니다.
Jenkins는 우리가 직접 deployment.yaml, service-account.yaml 같은 파일을 만들어서 우리의 애플리케이션처럼 직접 설치하고 관리했습니다.
Argo CD는 다릅니다. Argo CD는 "자신을 관리하는 방법"이 이미 모두 정의된 하나의 공식 설치 파일(install.yaml)을 통해 설치됩니다. 이 파일 안에는 Argo CD가 동작하는 데 필요한 모든 Deployment, ServiceAccount, Role 등이 포함되어 있습니다.
jenkins를 사용하는 환경에서 ArgoCD로 바꾸면서 변경된 부분들:
- CI :
CI 마지막 단계가 JENKINS호출 단계에서 변경된 deployment 파일을 Git 저장소에 push 하는 것으로 바뀐다 - CD :
ArgoCD가 Git 저장소의 변경사항을 감지하고, 자동으로 클러스터에 배포를 적용한다
*ArgoCD도 type을 loadbalancer로 사용해서 external ip를 배정받거나, gateway 혹은 ingress에서 주소를 할당해서 ui를 접속하는 방법이 있지만, portforwarding 을 통해 간단하게 접속하는 방법이 있다.
kubectl --kubeconfig=$KUBE_CONFIG port-forward svc/argocd-server -n argocd 8080:443
Argo CD 진행단계
- Argo CD설치하기
Argo CD 전용 네임스페이스 생성
kubectl create namespace argocd
Argo CD공식 manifest로 설치
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml - Argo CD UI 접속하기
*원래는 external IP 할당을 위해 서비스 타입을 LoadBalancer로 바꾸거나, gateway / ingress 쪽에서 설정을 해줘야 하지만 지금은 portforwarding을 통해 로컬에서 본인만 사용하는 방식으로 사용함
초기 아이디 : admin
초기 비밀번호 확인:
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d - Git 저장소 준비
*별도의 git repo를 생성해서 각 서비스들의 manifest파일들을 관리하는 방식으로 해도 되지만, 현재 프로젝트에서는 각 서비스 repo에서 manifest파일을 같이 관리하는 형식으로 진행중임* - CI 파이프라인 수정
ci.yml파일은 원래 jenkins용으로 생성해서 마지막 단계가 jenkins 호출이었지만, 변경된 deployment 파일을 Git 저장소에 push 하는 것으로 바뀐다.
***ci.yml 파일이 repo에 push하는 권한을 가지려면 personal access token을 발급받아서 해당 repo git secret에 저장하면 된다.***
***이 과정을 진행하면, CI가 무한 반복 실행될 수 있으므로 커밋메시지에 [skip ci]라는 문구를 추가해서 ci를 실행하지 않도록 설정해줘야함*** - Argo CD에 애플리케이션 등록하기
별도의 git repo를 생성해서 각 서비스들의 manifest파일들을 관리하는 방식
———>>>>>>
Argo CD UI에 접속해서 "해당 repo를 감시하고, 그 내용을 우리 클러스터에 배포해줘" 라고 알려주기만 하면 됨
- Argo CD UI에서 [+ NEW APP] 버튼을 클릭합니다.
- Application Name: user-service
- Project Name: default
- Sync Policy: Automatic (자동으로 동기화) + Prune Resources (Git에서 삭제되면 클러스터에서도 삭제) 체크
- Repository URL: fourka-manifests 저장소의 HTTPS 주소를 입력합니다.
- Revision: HEAD (항상 최신 버전을 추적)
- Path: k8s (user.yaml이 들어있는 폴더 경로)
- Cluster URL: https://kubernetes.default.svc (클러스터 내부를 가리킴)
- Namespace: user (배포할 네임스페이스)
- [CREATE] 버튼을 누릅니다.
각 서비스 repo에서 manifest파일을 같이 관리하는 방식 - 현재 프로젝트 방식
————>>>>>>
- Argo CD UI에서 user-service 애플리케이션의 설정으로 들어갑니다. ([APP DETAILS] > 오른쪽 상단 [EDIT])
- Repository URL: fourka-user 저장소의 HTTPS 주소로 변경합니다.
- Revision: dev (또는 CI가 실행되는 브랜치 이름)로 변경합니다.
- Path: k8s (이 값은 변경 없음)
- 설정을 저장합니다.