INFRA 공부

ArgoCD 공부

sowakemeup 2025. 8. 22. 00:35

Argo CD는 Jenkins와는 완전히 다른 방식으로 관리됩니다.

Jenkins는 우리가 직접 deployment.yaml, service-account.yaml 같은 파일을 만들어서 우리의 애플리케이션처럼 직접 설치하고 관리했습니다.

Argo CD는 다릅니다. Argo CD는 "자신을 관리하는 방법"이 이미 모두 정의된 하나의 공식 설치 파일(install.yaml)을 통해 설치됩니다. 이 파일 안에는 Argo CD가 동작하는 데 필요한 모든 Deployment, ServiceAccount, Role 등이 포함되어 있습니다.

 

jenkins를 사용하는 환경에서 ArgoCD로 바꾸면서 변경된 부분들:

  1. CI :
    CI 마지막 단계가 JENKINS호출 단계에서 변경된 deployment 파일을 Git 저장소에 push 하는 것으로 바뀐다
  2. 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 진행단계

  1. 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

  2. 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
  3. Git 저장소 준비
    *별도의 git repo를 생성해서 각 서비스들의 manifest파일들을 관리하는 방식으로 해도 되지만, 현재 프로젝트에서는 각 서비스 repo에서 manifest파일을 같이 관리하는 형식으로 진행중임*

  4. CI 파이프라인 수정
    ci.yml파일은 원래 jenkins용으로 생성해서 마지막 단계가 jenkins 호출이었지만, 변경된 deployment 파일을 Git 저장소에 push 하는 것으로 바뀐다.
    ***ci.yml 파일이 repo에 push하는 권한을 가지려면 personal access token을 발급받아서 해당 repo git secret에 저장하면 된다.***
    ***이 과정을 진행하면, CI가 무한 반복 실행될 수 있으므로 커밋메시지에 [skip ci]라는 문구를 추가해서 ci를 실행하지 않도록 설정해줘야함***

  5. 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 (이 값은 변경 없음)
  • 설정을 저장합니다.