Kubernetes는 컨테이너화된 애플리케이션을 관리하고 배포하기 위한 강력한 플랫폼입니다. 그러나 복잡한 애플리케이션을 Kubernetes에 배포하는 일은 종종 도전적입니다. 이때 Helm이 큰 도움이 됩니다. Helm은 Kubernetes의 패키지 매니저로, 복잡한 애플리케이션을 쉽게 배포하고 관리할 수 있도록 도와줍니다. 이번 글에서는 Helm을 사용하여 Kubernetes에서 복잡한 애플리케이션을 배포하는 방법에 대해 알아보겠습니다.

Helm 설치하기

먼저 Helm을 설치해야 합니다. Helm은 Go로 작성된 CLI 도구로, Linux, macOS, Windows 모두에서 사용할 수 있습니다.

Helm 설치

brew install helm

# Linux에서 Snap을 이용한 설치
sudo snap install helm --classic

# Windows에서 Chocolatey를 이용한 설치
choco install kubernetes-helm

설치가 완료되면 Helm 버전을 확인하여 정상적으로 설치되었는지 확인합니다.

helm version

Helm 차트 준비하기

Helm은 애플리케이션을 구성하는 리소스를 정의하는 "차트"를 사용합니다. 차트는 애플리케이션의 Kubernetes 리소스와 그 설정을 포함합니다. Helm 차트를 생성하려면 아래의 명령어를 사용합니다.

helm create my-app

이 명령어를 실행하면 my-app이라는 디렉토리가 생성되고, 해당 디렉토리 안에는 기본적인 Helm 차트 구조가 생성됩니다.

디렉토리 구조는 다음과 같습니다.

my-app/
  Chart.yaml        # 차트 메타데이터
  values.yaml       # 기본 값이 설정된 파일
  templates/        # Kubernetes 리소스 템플릿

values.yaml 수정하기

values.yaml 파일은 Helm 차트의 기본값을 정의합니다. 이 파일에서 애플리케이션의 환경 변수를 설정하거나, 이미지 태그, 포트, 리소스 요청 등을 정의할 수 있습니다. 예를 들어, 다음과 같이 간단한 웹 서버의 설정을 추가할 수 있습니다.
replicaCount: 2

image:
  repository: nginx
  tag: stable
  pullPolicy: IfNotPresent

service:
  type: ClusterIP
  port: 80

resources: {}

템플릿 수정하기

templates 디렉토리에는 Kubernetes 리소스를 정의하는 템플릿 파일이 있습니다. 기본적으로 Deployment, Service, Ingress 등의 템플릿 파일이 포함되어 있습니다. 이를 수정하여 원하는 구조로 변경할 수 있습니다. 예를 들어, deployment.yaml 파일을 다음과 같이 수정할 수 있습니다.
apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ .Release.Name }}-nginx
  labels:
    app: {{ .Release.Name }}
spec:
  replicas: {{ .Values.replicaCount }}
  selector:
    matchLabels:
      app: {{ .Release.Name }}
  template:
    metadata:
      labels:
        app: {{ .Release.Name }}
    spec:
      containers:
        - name: nginx
          image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
          ports:
            - containerPort: 80

애플리케이션 배포하기

이제 Helm 차트를 사용하여 애플리케이션을 배포할 준비가 되었습니다. 다음 명령어를 사용하여 Helm 차트를 Kubernetes 클러스터에 배포합니다.

helm install my-app ./my-app

배포가 완료되면 아래의 명령어로 배포 상태를 확인할 수 있습니다.

kubectl get all

업데이트 및 삭제

Helm을 사용하면 애플리케이션의 버전을 쉽게 업데이트할 수 있습니다. values.yaml 파일에서 변경 사항을 적용한 후 다음 명령어를 사용하여 업데이트합니다.

helm upgrade my-app ./my-app

애플리케이션을 삭제할 때는 다음과 같은 명령어를 사용합니다.

helm uninstall my-app

마무리

Kubernetes에서 Helm을 사용하면 복잡한 애플리케이션을 쉽게 배포하고 관리할 수 있습니다. Helm 차트를 정의하고, 값을 설정하며, 배포 명령어를 실행하는 과정은 매우 직관적입니다. Helm을 통해 Kubernetes의 강력한 기능을 더욱 손쉽게 활용할 수 있으며, 반복적인 작업을 자동화하여 개발 및 운영 효율성을 높일 수 있습니다. 이제 여러분도 Helm을 활용하여 Kubernetes에서 복잡한 애플리케이션을 손쉽게 배포해 보세요!