본문으로 건너뛰기

Container Registry를 이용한 Helm 차트 관리

Container Registry를 이용하여 Helm 차트를 저장하고 배포하는 방법을 소개합니다.

기본 정보

시나리오 소개

이 시나리오에서는 Container Registry를 이용하여 Helm 차트를 관리하고 쿠버네티스 클러스터에 배포하는 방법을 소개합니다. Helm은 쿠버네티스 패키지 매니저로, 복잡한 애플리케이션을 쉽게 배포하고 관리할 수 있는 도구입니다.

주요 내용은 아래와 같습니다.

  • Container Registry에 Helm 차트를 저장할 리포지토리 생성 및 차트 업로드
  • 간단한 Nginx 웹서버용 Helm 차트 생성
  • 쿠버네티스 클러스터에 Helm 차트 배포
  • Helm 차트 버전 관리 및 업그레이드

시작하기 전에

이 시나리오의 실습을 원활하게 진행하기 위해 Container Registry와 쿠버네티스 클러스터를 생성하고, 필수 도구를 설치합니다.

1. Container Registry 생성

Container Registry는 애플리케이션 패키지(예: Docker 이미지 또는 Helm 차트)를 중앙에서 저장하고 관리할 수 있는 클라우드 서비스입니다. 이 단계에서는 Helm 차트를 저장할 리포지토리를 생성합니다.

  1. 카카오클라우드 콘솔 > Container Registry 메뉴에서 아래 설정으로 리포지토리를 생성합니다.

    구분리포지토리 설정값
    공개 여부비공개
    리포지토리 이름tutorial-helm-cr
    태그 덮어쓰기가능
    이미지 스캔자동
  2. Container Registry에서 정상적으로 리포지토리가 생성되었는지 확인합니다.

2. 쿠버네티스 클러스터 생성

실습에 필요한 쿠버네티스 클러스터를 생성합니다. Kubernetes Engine으로 쿠버네티스 클러스터 구축 가이드를 참고하여 Step 2. kubectl로 쿠버네티스 API 호출하기 단계까지 진행합니다.

3. 필수 도구 설치

MacOS 환경 기준, 아래와 같이 실습에 필요한 도구들을 설치합니다.

  1. Helm을 설치합니다. Helm은 쿠버네티스의 패키지 매니저로, 애플리케이션 배포와 관리를 간편하게 합니다.

    brew install helm
  2. Docker Desktop을 설치합니다. Docker는 컨테이너 실행과 이미지 관리를 위한 도구입니다.

    brew install --cask docker
  3. Tree 유틸리티를 설치합니다. Tree는 디렉토리 구조를 시각적으로 확인할 수 있는 도구로, Helm 차트의 구조를 탐색할 때 유용합니다.

    brew install tree

시작하기

이 실습에서는 Helm 차트를 생성하고 네임스페이스를 설정한 뒤, Helm 차트를 배포하는 과정을 단계별로 안내합니다. 또한, Container Registry를 활용해 차트를 업로드하고 관리하는 방법을 설명합니다.

Step 1. Helm 차트 생성

Helm 차트는 쿠버네티스 리소스를 패키지로 관리할 수 있게 해주는 템플릿입니다. 이 단계에서는 Nginx 웹서버를 위한 기본 Helm 차트를 생성합니다.

  1. 기본 Helm 차트를 생성합니다.

    helm create my-nginx
  2. 생성된 차트의 디렉토리 구조를 확인합니다.

    tree my-nginx

    다음과 같은 디렉토리 구조가 생성된 것을 확인합니다.

    my-nginx/
    ├── Chart.yaml
    ├── charts
    ├── templates
    │ ├── NOTES.txt
    │ ├── _helpers.tpl
    │ ├── deployment.yaml
    │ ├── hpa.yaml
    │ ├── ingress.yaml
    │ ├── service.yaml
    │ ├── serviceaccount.yaml
    │ └── tests
    │ └── test-connection.yaml
    └── values.yaml
  3. values.yaml 파일에서 serviceAccount.create 값을 false로 변경합니다. 이 튜토리얼에서는 별도의 서비스 계정이 필요하지 않습니다.

Step 2. 네임스페이스 생성 및 차트 배포

이 단계에서는 네임스페이스를 생성하여 리소스를 논리적으로 분리하고, 앞서 생성한 Helm 차트를 배포합니다.

  1. 새로운 네임스페이스를 생성합니다.

    kubectl create ns helm-space
  2. Helm 차트를 배포합니다.

    cd ~/my-nginx
    helm install my-nginx-release ../my-nginx/ --debug --namespace helm-space
  3. 배포 상태를 확인합니다.

    kubectl get all -n helm-space ## 배포된 리소스 확인
    helm list --all --namespace helm-space ## 배포된 차트 상태 확인

    출력 예

    NAME             NAMESPACE   REVISION  UPDATED                               STATUS    CHART          APP VERSION
    my-nginx-release helm-space 1 2025-01-03 16:53:29.378136 +0900 KST deployed my-nginx-0.1.0 1.16.0

Step 3. Container Registry 인증

Container Registry에 접속하기 위해 Helm 레지스트리 인증을 진행합니다.

helm registry login ${PROJECT_NAME}.kr-central-2.kcr.dev \
--username ${ACCESS_KEY_ID} \
--password ${SECRET_KEY}
환경 변수설명
PROJECT_NAME🖌 카카오클라우드의 프로젝트 이름
ACCESS_KEY_ID🖌액세스 키 ID
SECRET_KEY🖌보안 액세스 키

Step 4. 차트 패키징 및 업로드

생성한 Helm 차트를 Container Registry에 업로드하기 위해 패키징과 업로드 작업을 진행합니다.

  1. 차트를 패키징합니다.

    helm package my-nginx
  2. 패키징한 차트를 Container Registry에 업로드합니다.

    helm push my-nginx-0.1.0.tgz oci://${PROJECT_NAME}.kr-central-2.kcr.dev/tutorial-helm-cr
    환경 변수설명
    PROJECT_NAME🖌 카카오클라우드의 프로젝트 이름
  3. 카카오클라우드 콘솔 > Container Registry > tutorial-helm-cr > my-nginx 메뉴에서 업로드된 차트와 버전(0.1.0)을 확인합니다.

Step 5. 차트 버전 업그레이드

Helm 차트의 설정을 변경하고, 새로운 버전의 차트를 배포하는 방법을 설명합니다.

  1. values.yaml 파일에서 replicaCount 값을 2로 변경하여 Pod 복제본 수를 증가시킵니다.

  2. Chart.yaml 파일의 버전을 0.1.1로 변경한 뒤 차트를 패키징합니다.

    helm package my-nginx
  3. 새로운 버전의 패키지를 Container Registry에 업로드합니다.

    helm push my-nginx-0.1.1.tgz oci://${PROJECT_NAME}.kr-central-2.kcr.dev/tutorial-helm-cr
    환경 변수설명
    PROJECT_NAME🖌 카카오클라우드의 프로젝트 이름
  4. 카카오클라우드 콘솔 > Container Registry > tutorial-helm-cr > my-nginx 메뉴에서 업로드된 차트와 버전(0.1.1)을 확인합니다.

  5. 배포된 차트를 새 버전으로 업그레이드합니다.

    helm upgrade my-nginx-release oci://${PROJECT_NAME}.kr-central-2.kcr.dev/tutorial-helm-cr/my-nginx --version 0.1.1  --namespace helm-space
    환경 변수설명
    PROJECT_NAME🖌 카카오클라우드의 프로젝트 이름
  6. Helm 차트의 업그레이드가 정상적으로 되었는지 확인합니다.

    kubectl get all -n helm-space ## Pod 개수 2개 확인
    helm history my-nginx-release --namespace helm-space ## 차트 업그레이드 이력 확인

    출력 예

    REVISION	UPDATED                 	STATUS    	CHART         	APP VERSION	DESCRIPTION
    1 Fri Jan 3 16:53:29 2025 superseded my-nginx-0.1.0 1.16.0 Install complete
    2 Fri Jan 3 17:28:32 2025 deployed my-nginx-0.1.1 1.16.0 Upgrade complete

리소스 정리

실습을 완료한 후, 다음 명령어를 실행하여 생성된 리소스를 정리합니다.

helm uninstall my-nginx-release --namespace helm-space
kubectl delete namespace helm-space