Logo
Search|
Published on

IDC에서 NKE로 CI/CD 이관하기 위한 스터디

Authors
  • avatar
    Name
    Easyoon
    Twitter

IDC에서 NKE로 CI/CD 이관하기 위한 스터디

서문

이 글은 기존 IDC 환경에서 Kubernetes 기반의 NKE로 CI/CD 파이프라인을 이전하는 과정을 정리한 스터디 내용입니다. 이번 스터디를 통해 IDC와 NKE의 차이점을 이해하고, Jenkins와 ArgoCD를 활용한 CI/CD 파이프라인 구축 및 트러블슈팅 경험을 공유하고자 합니다.


목차

  • IDC vs NKE

  • CI(Continuous Integration) 파이프라인 구축

  • CD(Continuous Delivery/Deployment) 파이프라인 구축

  • 주요 트러블슈팅 유형


사전 준비 CI/CD 파이프라인 이관을 시작하기 전에, 프로젝트의 jenkins, 빌드 스크립트, Dockerfile 등을 미리 준비해야 합니다.


IDC vs NKE

IDC

IDC는 물리적인 서버와 네트워크 인프라를 직접 관리하는 방식의 데이터 센터입니다. 서버 자원을 직접 제어하고 관리할 수 있지만, 확장성과 유연성이 떨어지는 단점이 있습니다.

NKE

NKE는 컨테이너화된 애플리케이션을 배포, 확장, 관리하기 위한 오픈 소스 플랫폼인 Kubernetes를 기반으로 합니다. 컨테이너 오케스트레이션 도구로서 자동화된 배포, 스케일링, 복구 등을 지원하여 IDC보다 높은 유연성과 확장성을 제공합니다.


CI (Continuous Integration)

CI는 개발자가 작성한 코드를 중앙 저장소에 통합하는 과정을 자동화하는 것입니다. 여기서는 Jenkins를 활용하여 빌드 및 Docker 이미지 생성 과정을 자동화했습니다.


Jenkins 설정

Deploy-project-initializer 프로젝트 진입 후 파이프라인 실행합니다.

  1. 실행된 콘솔 접속하여 param 입력
  • 첫번째 인자 입력

    • Project_id : Source 프로젝트 이름
    • Package : 프로젝트 다음 오는 key 값
    • Cluster : 배포할 클러스터 선택
  • 두번째 인자 입력

    • git_source_url : 프로젝트 깃 주소
    • Builder : node 버전
    • build_script : build.sh파일에 기입 할 빌드 스크립트
    • build_path: 빌드 결과물들의 디렉토리 패스 값 (Dockerfile, node*modules/**/_ 포함)
    • enable_decrypt_git_secret: Git Secret 사용 시 활성화
    • filter_branch : 브랜치 이름 필터링 조건
  1. 파이프라인 설정

    • ENABLE_BUILD_PIPELINE: 빌드 스크립트는 Dockerfile에서 처리하므로 비활성화
    • ENABLE_DOCKER_PIPELINE: Docker 이미지 빌드를 위해 활성화
  2. Docker 설정:

    • DOCKER_COMMAND_ARGUMENT: --build-arg NODE_ENV_ARG=환경 --build-arg PROXY_PATH=프록시 설정과 같이 Docker 빌드 인자를 설정합니다.
  3. Deployment 설정

    • Port: 80
    • NODE_POOL_NAME : 워커 노드 풀 이름 설정
  4. 추가 작업

  • Jenkins에서 생성된 파이프라인 리포지토리 확인
  • Docker Private Registry (Harbor) 생성
  • 실제 프로젝트 소스에 Dockerfile 작성:
FROM 생성한 하버 주소

WORKDIR 로컬 앱 디렉토리

ADD 캐시파일
COPY packages/서버파일 빌드 ./packages/서버파일 빌드
COPY packages/공통 파일 빌드 ./packages/공통 파일 빌드
COPY packages/프론트 빌드/out ./packages/프론트 빌드/out/
COPY packages/빌드파일 ./packages/contract-interface/

WORKDIR /usr/local/app/packages/admin

CMD ["node", "./빌드파일 디렉토리/src/app.js"]
  • 외부 접근을 위한 VIP 설정: Private VIP를 발급받고 필요시 Public VIP와 매핑합니다.

CD(Continous Delivery/Deployment)

CD는 CI를 통해 생성된 빌드 결과물을 자동으로 배포하는 과정입니다. 여기서는 ArgoCD를 활용하여 Kubernetes 환경에 애플리케이션을 배포했습니다.

ArgoCD

ArgoCD는 Kubernetes 애플리케이션의 자동 배포를 위한 오픈소스 도구입니다. Git 저장소의 변경 사항을 감지하여 자동으로 클러스터에 애플리케이션을 배포하는 GitOps를 지원합니다.

  1. ArgoCD 앱 생성 (Create New App)
  • Application Name = Deployment Git 의 프로젝트 명과 동일하기 입력
  • Project Name = default
  • Source
    • Repository URL = Deployment Git 주소
    • Revision = master
    • Path = 배포할 클러스터의 패스
  • Destination
    • Cluster URL = https://kubernetes.default.svc
    • Namespace = app
  1. Jenkins 내 devops 프로젝트에 들어가 Deployment / Service / Ingress / Kustomization 적용하기
  • Deployment.yaml : 앱 배포 설정
  • Ingress.yaml : 외부 도메인 접근 및 SSL
  • Service.yaml : Pod 접근 설정
  • Kustomization.yaml : 여러 리소스를 묶어 관리
  • Hpa.yaml : (선택) 트래픽 대응용 스케일링 설정
  1. 방화벽 오픈

트러블슈팅 유형

  1. Jenkins에서 빌드가 실패하는 유형 : 빌드 스크립트 및 빌드 패스, DockerFile 위치 확인 빌드 패스 및 DockerFile 내에 기재되어있는 패스가 유효한지 확인

  2. ArgoCD에서 Create App이 안되는 유형 : 배열이 들어가야하는 키 값(예: Volumes)에 배열 대신 String 문자열 값이 들어가 있을 때

  3. ArgoCD에서 Sync fail이 나는 유형 (Back-off 현상) : Deploymentcontainers 키 값에 복수의 컨테이너가 정의되어 있을 때