Container Registry를 이용한 Helm 차트 관리
Container Registry를 이용하여 Helm 차트를 저장하고 배포하는 방법을 소개합니다.
- 예상 소요 시간: 30분
- 사용자 환경
- 권장 운영 체제: MacOS
- Region: kr-central-2
- 사전 준비 사항
시나리오 소개
이 시나리오에서는 Container Registry를 이용하여 Helm 차트를 관리하고 쿠버네티스 클러스터에 배포하는 방법을 소개합니다. Helm은 쿠버네티스 패키지 매니저로, 복잡한 애플리케이션을 쉽게 배포하고 관리할 수 있는 도구입니다.
주요 내용은 아래와 같습니다.
- Container Registry에 Helm 차트를 저장할 리포지토리 생성 및 차트 업로드
- 간단한 Nginx 웹서버용 Helm 차트 생성
- 쿠버네티스 클러스터에 Helm 차트 배포
- Helm 차트 버전 관리 및 업그레이드
시작하기 전에
이 시나리오의 실습을 원활하게 진행하기 위해 Container Registry와 쿠버네티스 클러스터를 생성하고, 필수 도구를 설치합니다.
1. Container Registry 생성
Container Registry는 애플리케이션 패키지(예: Docker 이미지 또는 Helm 차트)를 중앙에서 저장하고 관리할 수 있는 클라우드 서비스입니다. 이 단계에서는 Helm 차트를 저장할 리포지토리를 생성합니다.
-
카카오클라우드 콘솔 > Container Registry 메뉴에서 아래 설정으로 리포지토리를 생성합니다.
구분 리포지토리 설정값 공개 여부 비공개 리포지토리 이름 tutorial-helm-cr 태그 덮어쓰기 가능 이미지 스캔 자동 -
Container Registry에서 정상적으로 리포지토리가 생성되었는지 확인합니다.
2. 쿠버네티스 클러스터 생성
실습에 필요한 쿠버네티스 클러스터를 생성합니다. Kubernetes Engine으로 쿠버네티스 클러스터 구축 가이드를 참고하여 Step 2. kubectl로 쿠버네티스 API 호출하기 단계까지 진행합니다.
3. 필수 도구 설치
MacOS 환경 기준, 아래와 같이 실습에 필요한 도구들을 설치합니다.
-
Helm
을 설치합니다. Helm은 쿠버네티스의 패키지 매니저로, 애플리케이션 배포와 관리를 간편하게 합니다.brew install helm
-
Docker Desktop
을 설치합니다. Docker는 컨테이너 실행과 이미지 관리를 위한 도구입니다.brew install --cask docker
-
Tree
유틸리티를 설치합니다. Tree는 디렉토리 구조를 시각적으로 확인할 수 있는 도구로, Helm 차트의 구조를 탐색할 때 유용합니다.brew install tree
시작하기
이 실습에서는 Helm 차트를 생성하고 네임스페이스를 설정한 뒤, Helm 차트를 배포하는 과정을 단계별로 안내합니다. 또한, Container Registry를 활용해 차트를 업로드하고 관리하는 방법을 설명합니다.
Step 1. Helm 차트 생성
Helm 차트는 쿠버네티스 리소스를 패키지로 관리할 수 있게 해주는 템플릿입니다. 이 단계에서는 Nginx 웹서버를 위한 기본 Helm 차트를 생성합니다.
-
기본 Helm 차트를 생성합니다.
helm create my-nginx
-
생성된 차트의 디렉토리 구조를 확인합니다.
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 -
values.yaml
파일에서serviceAccount.create
값을false
로 변경합니다. 이 튜토리얼에서는 별도의 서비스 계정이 필요하지 않습니다.
Step 2. 네임스페이스 생성 및 차트 배포
이 단계에서는 네임스페이스를 생성하여 리소스를 논리적으로 분리하고, 앞서 생성한 Helm 차트를 배포합니다.
-
새로운 네임스페이스를 생성합니다.
kubectl create ns helm-space
-
Helm 차트를 배포합니다.
cd ~/my-nginx
helm install my-nginx-release ../my-nginx/ --debug --namespace helm-space -
배포 상태를 확인합니다.
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에 업로드하기 위해 패키징과 업로드 작업을 진행합니다.
-
차트를 패키징합니다.
helm package my-nginx
-
패키징한 차트를 Container Registry에 업로드합니다.
helm push my-nginx-0.1.0.tgz oci://${PROJECT_NAME}.kr-central-2.kcr.dev/tutorial-helm-cr
환경 변수 설명 PROJECT_NAME🖌︎ 카카오클라우드의 프로젝트 이름 -
카카오클라우드 콘솔 > Container Registry > tutorial-helm-cr > my-nginx 메뉴에서 업로드된 차트와 버전(0.1.0)을 확인합니다.
Step 5. 차트 버전 업그레이드
Helm 차트의 설정을 변경하고, 새로운 버전의 차트를 배포하는 방법을 설명합니다.
-
values.yaml
파일에서replicaCount
값을2
로 변경하여 Pod 복제본 수를 증가시킵니다. -
Chart.yaml
파일의 버전을0.1.1
로 변경한 뒤 차트를 패키징합니다.helm package my-nginx
-
새로운 버전의 패키지를 Container Registry에 업로드합니다.
helm push my-nginx-0.1.1.tgz oci://${PROJECT_NAME}.kr-central-2.kcr.dev/tutorial-helm-cr
환경 변수 설명 PROJECT_NAME🖌︎ 카카오클라우드의 프로젝트 이름 -
카카오클라우드 콘솔 > Container Registry > tutorial-helm-cr > my-nginx 메뉴에서 업로드된 차트와 버전(0.1.1)을 확인합니다.
-
배포된 차트를 새 버전으로 업그레이드합니다.
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🖌︎ 카카오클라우드의 프로젝트 이름 -
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