Kubernetes : Helm 2

JIWON·2025년 8월 12일

Kubernetes

목록 보기
29/32
post-thumbnail

1. Helm을 이용한 WordPress 설치 및 삭제

Helm은 쿠버네티스(Kubernetes)의 패키지 매니저이다. Node.js의 npm이나 Python의 pip처럼, 쿠버네티스 애플리케이션을 차트(Chart)라는 패키지 단위로 쉽게 정의하고, 설치하며, 업그레이드할 수 있도록 돕는다.

1) wordpress 설치

WordPress 설치는 Helm 명령어의 파라미터를 직접 입력하는 방식과, 파라미터 값을 파일로 미리 정의하여 사용하는 두 가지 방식으로 진행할 수 있다.

설치 방법 1: 파라미터를 직접 입력하여 설치

helm install 명령어에 --set 플래그를 사용하여 필요한 설정값을 직접 전달하는 방식이다.

helm install sample-wordpress bitnami/wordpress --version 25.0.8 \
--set wordpressUsername=유저이름 \
--set wordpressPassword=비밀번호 \
--set wordpressBlogName="블로그이름" \
--set persistence.size=10Gi
  • --set wordpressUsername: WordPress 관리자 사용자 이름을 설정한다.

  • --set wordpressPassword: WordPress 관리자 비밀번호를 설정한다.

  • --set wordpressBlogName: 생성될 WordPress 블로그의 이름을 지정한다.

  • --set persistence.size=10Gi: 영구 볼륨(Persistent Volume)의 크기를 설정한다. 이는 컨테이너(Pod)가 재시작되어도 데이터(예: 게시글, 미디어 파일)가 사라지지 않고 유지되도록 보장하는 중요한 설정이다.

설치 방법 2: values.yaml 파일을 이용한 설치

설치에 필요한 파라미터들을 values.yaml 이라는 파일에 미리 정의해두고, 설치 시 이 파일을 참조하게 하는 방식이다. 이 방법은 설정값이 많거나, 동일한 설정으로 여러 번 설치해야 할 때 유용하며, 설정 관리가 용이하다는 장점이 있다.

1. values.yaml 파일 생성

다음과 같이 설치에 필요한 파라미터 값들을 저장할 YAML 파일을 생성한다.

# 사용자 이름 (문자열)
wordpressUsername: jw

# 비밀번호 (문자열, 보안을 위해 따옴표 사용 권장)
wordpressPassword: "0000"

# 블로그 이름 (문자열)
wordpressBlogName: "wblog"

# 영구 볼륨(Persistent Volume) 설정
persistence:
  # 데이터 저장을 위한 볼륨 크기
  # 예: 10Gi (10 기비바이트), 500Mi (500 메비바이트)
  # 반드시 크기와 단위를 함께 명시해야 합니다.
  size: "10Gi"

2. values.yaml 파일을 읽어 설치 진행

--values (또는 -f) 플래그를 사용하여 위에서 생성한 파일의 경로를 지정한다.

# helm install [릴리스 이름] [차트 이름] --version [버전] --values [파라미터 파일 경로]
helm install sample-wordpress bitnami/wordpress --version 25.0.8 --values ./values.yaml

설치가 완료되면 다음과 유사한 결과가 출력된다.

설치 후 테스트

helm test 명령어를 사용하여 설치된 릴리스가 정상적으로 동작하는지 확인할 수 있다.

helm test sample-wordpress

2) WordPress 삭제

helm uninstall 명령어를 사용하여 설치된 릴리스를 간단하게 삭제할 수 있다.

helm uninstall sample-wordpress

2. Helm 아키텍처

Helm은 쿠버네티스 클러스터와 상호작용하기 위해 별도의 데이터베이스를 필요로 하지 않는다는 큰 특징이 있다.

헬름 클라이언트는 헬름 저장소(Repository)에서 다운로드한 차트(Chart)와 사용자가 지정한 값(Values)의 조합을 하나의 릴리스(Release)로 관리한다. 그리고 이 릴리스에 대한 모든 정보(버전, 설정값 등)는 쿠버네티스의 Secret 리소스에 저장된다. 이 덕분에 Helm은 상태 정보를 쿠버네티스 내부에 안전하게 보관하며, 가볍고 효율적으로 동작할 수 있다.

릴리스 정보 확인 (Secret)

kubectl 명령어를 통해 Helm이 생성한 Secret을 직접 확인할 수 있다. owner=helm 레이블로 필터링하여 조회한다.

kubectl get secret -l owner=helm

# 실행결과
NAME                                     TYPE                 DATA   AGE
sh.helm.release.v1.sample-wordpress.v1   helm.sh/release.v1   1      77s

위 결과는 sample-wordpress라는 릴리스의 첫 번째 버전(v1) 정보가 Secret으로 저장되어 있음을 보여준다.

릴리스 목록 확인

helm list 명령어를 사용하면 현재 네임스페이스에 배포된 릴리스의 목록을 확인할 수 있다.

helm list

# 실행결과
NAME                    NAMESPACE       REVISION        UPDATED                                 STATUS          CHART                   APP VERSION
sample-wordpress        default         1               2025-08-12 00:50:16.447809063 +0000 UTC deployed        wordpress-25.0.8        6.8.2

3. 커스텀 차트 생성

Helm은 기존에 만들어진 차트를 사용하는 것뿐만 아니라, 직접 내 애플리케이션을 패키징할 커스텀 차트를 생성하는 기능도 제공한다.

차트는 쿠버네티스의 매니페스트(Manifest) 템플릿변수(Values)가 핵심 구성 요소이다. 매니페스트는 Pod, Deployment, Service 등 쿠버네티스 리소스의 의도된 상태를 기술하는 YAML 파일이다.

1) 차트 생성

helm create 명령어를 실행하면 차트의 기본 구조와 템플릿 파일들이 자동으로 생성된다.

# helm create [생성할 차트 이름]
helm create mychart

명령 실행 후 mychart 라는 디렉토리가 생성되며, 그 안에는 다음과 같은 표준화된 구조의 파일들이 포함되어 있다.

mychart
├── charts
├── Chart.yaml
├── templates
│   ├── deployment.yaml
│   ├── _helpers.tpl
│   ├── hpa.yaml
│   ├── ingress.yaml
│   ├── NOTES.txt
│   ├── serviceaccount.yaml
│   ├── service.yaml
│   └── tests
│       └── test-connection.yaml
└── values.yaml

📌 권장 사항: 쿠버네티스 버전이 올라가면서 리소스 정의 문법(예: 어노테이션 위치 변경)이 바뀌는 경우가 있다. helm create는 최신 버전에 맞는 표준 템플릿을 생성해주므로, 처음부터 직접 만들기보다는 이 명령어를 통해 생성하고 수정하는 것을 권장한다.

📌 유지 보수: 이미 생성된 매니페스트는 쿠버네티스 버전 업그레이드에 맞춰 수동으로 유지보수해야 한다. Helm이 자동으로 문법을 변환해주지는 않는다.

파일구성

  • templates/*.yaml: 설치하는 매니페스트 템플릿
  • templates/tests/*.yaml: 설치한 차트가 정상적으로 동작하는지 테스트하는 매니페스트 템플릿
  • values.yaml : 사용자가 나중에 덮어쓸 수 있는 기본값의 정의, 리소스 제한, 사용 이미지, 포트 번호 등을 제공
  • templates/NOTES.txt : helm install 중에 출력되는 메시지
  • templates/_helpers.tpl : 릴리스 이름으로 변수를 정의하는 등의 헬퍼 변수 정의
  • requirements.yaml : 의존하는 차트와 해당 버전 기록
  • Chart.yaml : 차트 메타 데이터

2) 생성한 차트 설치

생성된 커스텀 차트는 로컬 경로를 지정하여 바로 설치할 수 있다.

# helm install [릴리스 이름] [차트 경로]
helm install sample-helm mychart

3) 차트 패키징 및 배포

차트 패키지화

helm package 명령어를 사용하여 차트 디렉토리를 .tgz 압축 파일로 만들 수 있다. 이렇게 패키징된 파일은 공유하거나 웹 서버에 올려 배포할 수 있다.

# 의존성 차트가 있다면 --dependency-update 옵션으로 업데이트 후 패키징
helm package --dependency-update mychart/

차트 공개 (배포)

  1. 패키징된 .tgz 파일을 웹 서버의 특정 디렉토리에 업로드한다.

  2. 사용자는 helm repo add 명령으로 해당 웹 서버 URL을 헬름 저장소로 등록하여 차트를 사용할 수 있다.

4) 원격 저장소 차트 다운로드

helm pull 명령어는 원격 저장소의 차트를 설치하지 않고, .tgz 패키지 파일 형태로 로컬에 다운로드한다. 이는 차트의 내부 구조나 values.yaml 파일의 내용을 분석할 때 유용하다.

helm pull bitnami/wordpress

다운로드된 .tgz 파일은 tar 명령어로 압축을 해제하여 내용을 확인할 수 있다.

# 압축해제
tar zxvf wordpress-25.0.8.tgz

0개의 댓글