• NCP(Naver Cloud Platform)을 사용하여 ArgoCD로 CD 구축

    2026. 5. 26.

    by. Daramu

    본 포스팅에서는 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:
        - main

     

    CD인 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 -> 패스워드 변경을 진행하면 설치는 끝이다.

     

    댓글