-
본 포스팅에서는 ArgoCD를 사용하여 CD를 구축하겠다.
CI/CD로 나눈다면, CI는 개발자가 코드를 push해서, 그 코드를 가져오고 어플리케이션 빌드를 진행하며, 도커 빌드로 이미지를 만들고 이미지를 push하여 Registry에 저장하고, manifest파일을 update까지 진행하는 것을 CI로 진행하겠다.
CI/CD 는 한번에 처리할 수 있지만 ArgoCD를 사용한다면 CD특화 오픈소스 답게 한눈에 여러 서비스와 웹을 통한 관리가 편하므로, CI는 GitLab runner를 사용하되, CD는 ArgoCD를 사용하겠다.
과거 gitlab runner를 통해 CI/CD를 구축했었다.
NCP(Naver Cloud Platform)을 활용하여 GitLab Runner로 CI/CD 구축 :: Daramu
NCP(Naver Cloud Platform)을 활용하여 GitLab Runner로 CI/CD 구축
GitLab은 단순 코드 저장소로 사용할 수 있지만, GitLab Runner를 통해 CI/CD를 구현할 수도 있다. 물론 Jenkins, ArgoCD, NCP의 Source 시리즈 등 여러 가지 CI/CD 도구가 있지만, GitLab으로 CI/CD를 구축하였을 경
daramu.tistory.com
여기서 CD부분만 도려내고 CI만 동작하게 수정한 후 ArgoCD를 추가로 부착하겠다.
stages: - build - update-manifest # 각종 변수 선언 variables: IMAGE_NAME: "cicd-demo-backend" GIT_USER: "root" MANIFEST_PATH: "cicd-demo-backend/deployment.yaml" build: stage: build image: name: gcr.io/kaniko-project/executor:v1.23.2-debug entrypoint: [""] script: - IMAGE_TAG="${CI_COMMIT_SHORT_SHA}-${CI_PIPELINE_IID}" - mkdir -p /kaniko/.docker - | echo "{\"auths\":{\"${REGISTRY}\":{\"username\":\"${NCP_ACCESS_KEY}\",\"password\":\"${NCP_SECRET_KEY}\"}}}" \ > /kaniko/.docker/config.json - | /kaniko/executor \ --context="${CI_PROJECT_DIR}" \ --dockerfile="${CI_PROJECT_DIR}/Dockerfile" \ --destination="${REGISTRY}/${IMAGE_NAME}:${CI_COMMIT_SHORT_SHA}-${CI_PIPELINE_IID}" \ --verbosity=info only: - main update-manifest: stage: update-manifest image: alpine/git:latest script: - IMAGE_TAG="${CI_COMMIT_SHORT_SHA}-${CI_PIPELINE_IID}" - git clone http://${GIT_USER}:${GIT_TOKEN}@172.16.211.6/root/cicd-demo-k8s.git - cd cicd-demo-k8s - | sed -i "s|image: ${REGISTRY}/${IMAGE_NAME}:.*|image: ${REGISTRY}/${IMAGE_NAME}:${IMAGE_TAG}|g" ${MANIFEST_PATH} - git config user.email "gitlab-ci@cicd.com" - git config user.name "GitLab CI" - git add ${MANIFEST_PATH} - git commit -m "update image to ${IMAGE_TAG}" - git push http://${GIT_USER}:${GIT_TOKEN}@172.16.211.6/root/cicd-demo-k8s.git main only: - mainCD인 deploy를 제거한 gitlab-ci.yml파일이다.
물론 다르게 설정 가능하므로 하는 것은 자유이다.
git push를 통해 확인해보면, 정상적으로 Registry와 gitlab 프로젝트(레포지토리)에 적용된걸 확인할 수 있다.


그림을 보면 commit한 사람이 gitlab-ci.yml에 정의한 gitlab-ci@cicd.com에 GigLab CI인걸 알 수 있다.
이건 내가 update한게 아니라, gitLab CI가 gitlab runner를 통해 스스로 이미지를 push하고 manifest파일을 update한거다.
그럼 이제 manifest파일의 변화에 따라 자동으로 배포해주는 ArgoCD를 이곳에 결합한다면 좋은 궁합이 될 것이다.
argoCD를 설치하기 위해 helm으로 설치를 진행한다.
helm repo add argo https://argoproj.github.io/argo-helm helm repo update kubectl create namespace argocd그후 helm에 적용할 value 파일을 작성한다.
별도의 도메인이 있다면 작성하면 되지만, 본 포스팅 환경에서는 그런것이 없으니 우선 임시로 생성해 두었다가, ALB가 생성되면 ALB자체의 URL을 넣어 update하는 방식으로 진행할 것이다.
# argocd-values.yaml global: domain: argocd.example.com # 실제 도메인으로 변경 (없으면 ALB IP 확인 후 추가) configs: params: server.insecure: "true" server: service: type: NodePort ingress: enabled: true ingressClassName: alb annotations: alb.ingress.kubernetes.io/network-type: "private" repoServer: replicas: 1 applicationSet: replicas: 1 redis: enabled: true그 후 작성한 파일을 적용한다.
참고로 annotations의 network-type의 private은 VPN을 사용하는 환경이기에 private으로 선언하였다.
만약 VPN 환경이 아니라면 해당 annotation을 삭제하여 공인IP가 있는 LB로 생성하면 된다.
helm install argocd argo/argo-cd \ --namespace argocd \ -f argocd-values.yaml생성 되었다면 NCP콘솔에서 LoadBalancer 페이지로 넘어가, 생성된 ALB의 URL을 확인하여 values파일을 수정한다.

그후 update를 통해 등록하면 된다.
helm upgrade argocd argo/argo-cd \ --namespace argocd \ -f argocd-values.yaml수정 및 생성이 완료되면 " kubectl get pods -n argocd" 을 통해 pod가 올라왔음을 확인하고, 아래의 명령어를 통해 패스워드를 확인한다.
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d그리고 domain으로 접속하여 확인된 패스워드와 함께 admin/{PASSWORD} 를 입력하여 로그인한다.
그 후 마지막으로 웹페이지에서 좌측 User Info -> UPDATE PASSWORD -> 패스워드 변경을 진행하면 설치는 끝이다.

'DevOps > ArgoCD' 카테고리의 다른 글
NCP(Naver Cloud Platform) 을 사용하여 GitLab 과 ArgoCD 연동! (1) 2026.05.27 윈도우11 명령어 설치 - 테라폼[Terraform], AWS CLI, AWS IAM Authenticator (0) 2025.02.15 Argo CD 구축 - 윈도우 도커 데스크탑 쿠버네티스 (0) 2025.02.14 ArgoCD 란? (0) 2025.02.14 댓글
