도커,리눅스

Jenkins와 ArgoCD로 쿠버네티스 CI/CD 구축하기

dig04214 2025. 5. 15. 20:38

쿠버네티스는 컨테이너를 알아서 관리해주는 아주 멋진 도구입니다. 하지만 쿠버네티스가 관리하는 컨테이너에는 이미지가 필요하고, 이 이미지는 여전히 개발자가 직접 만들고 있습니다. 그래서 등장한 것이 CI/CD 파이프라인입니다.

CI/CD 란

CI/CD는 지속적 통합(Continuous Integration)과 지속적 배포(Continuous Deployment)의 줄임말입니다. 이전에는 개발자가 코드를 수정하고, 빌드, 테스트, 배포까지의 과정을 전부 직접 처리했다면, CI/CD 도입으로 이제 개발자는 코드 수정, 개발만 하면 되고 빌드, 테스트, 배포는 CI/CD가 알아서 진행하게 되었습니다. 덕분에 개발자는 개발에만 집중할 수 있는 환경이 만들어졌습니다.

 

애플리케이션이 쿠버네티스에 배포되기까지는 다음과 같은 과정을 거칩니다.

1. 개발, 코드 수정 : 개발자가 새로운 기능 추가를 위해 개발하거나, 문제를 해결하기 위해 코드를 수정합니다.

2. 컴파일 : 개발자가 작성한 코드는 사람이 이해할 수 있는 형태입니다. 이를 컴퓨터가 실행할 수 있는 형태로 바꿔야 하는데, 이를 컴파일이라고 합니다. 컴파일이 끝나면 컴퓨터에서 실행할 수 있는 프로그램 형태가 되는 것이죠.

3. 이미지 빌드(=컨테이너화) : 쿠버네티스는 컨테이너가 동작하도록 관리하고, 컨테이너는 이미지를 기반으로 만들어집니다. 따라서 개발자는 Dockerfile에 자신이 만든 프로그램을 컨테이너에서 동작하게 하는 방법을 작성하고, 이 파일을 바탕으로 이미지를 만듭니다.

4. 이미지 업로드 : 만들어진 이미지는 개발자의 컴퓨터에 있습니다. 이걸 쿠버네티스가 접근할 수 있어야 쿠버네티스가 이미지를 가져와 컨테이너를 배포하겠죠. 이미지를 저장하고, 쿠버네티스가 접근할 수 있는 공용 공간을 이미지 레지스트리라고 합니다. 개발자는 자신이 만든 이미지를 이미지 레지스트리에 업로드해서, 쿠버네티스가 컨테이너를 배포할 수 있게 합니다.

5. 쿠버네티스 배포 : 쿠버네티스는 업로드된 이미지를 가져와 개발자가 선언한 방식(디플로이먼트, 서비스 등)에 맞게 컨테이너를 생성하고 동작시킵니다. 이렇게 배포된 컨테이너를 통해 사용자는 애플리케이션을 이용할 수 있습니다.

 

CI는 2 ~ 4번 과정을, CD는 5번 과정을 자동화하는 도구입니다.

Jenkins : CI 자동화 도구

Jenkins는 오픈소스 CI/CD 자동화 서버로, 소프트웨어 빌드, 테스트, 배포 과정을 자동화하는 데 아주 널리 사용되는 도구입니다. 개발자가 Jenkins 파일에 배포 과정을 작성하면, Jenkins 서버는 이를 바탕으로 애플리케이션을 배포하기 위한 준비를 합니다.

더 나아가서, 개발자가 Jenkins 서버를 조작할 필요 없이, git에 코드를 푸시하는 것만으로도 Jenkins가 이를 감지하고 동작하게 설정할 수도 있습니다.

Jenkins는 CI, CD 모두 가능한 도구이지만, 쿠버네티스에서 CD에 최적화되어 있지 않습니다. 따라서 Jenkins는 CI로만 사용하고, CD를 위해 ArgoCD를 이용합니다.

ArgoCD : GitOps 기반 쿠버네티스 CD 도구 

ArgoCD는 쿠버네티스 환경을 위한 선언적 GitOps 지속적 전달 도구입니다.

GitOps: Git을 중심으로 돌아가는 운영 방식

GitOps는 Git 저장소를 이용해 인프라와 애플리케이션 배포를 관리하는 방식입니다. 마치 우리 집 설계도(Git 저장소)가 있고, 이 설계도대로 집(쿠버네티스 클러스터)의 상태를 항상 유지하는 스마트홈 시스템(ArgoCD)과 같다고 생각할 수 있습니다. 모든 변경 사항은 설계도(Git)에 먼저 반영되고, 시스템은 이 설계도를 기준으로 실제 집 상태를 자동으로 맞춥니다.

ArgoCD는 쿠버네티스 클러스터 내부에 있으면서, Git 저장소에 있는 배포 설정(yaml 파일)이 변경되면, ArgoCD가 이 변경 사항을 끌어와서(pull) 클러스터 상태를 Git에 정의된 대로 쿠버네티스를 동기화합니다.

 

이제, 쿠버네티스, Jenkins, ArgoCD를 통해, 개발자는 개발에만 집중할 수 있게 되었습니다. 처음 설정할 때는 난이도가 다소 높을 수 있지만, 한번 설정해놓으면 그 이후에는 크게 신경 쓰지 않아도 되니 아주 편리가 도구라고 생각합니다.