Ssoon

Helm : 5.3 - Helm에서 컨테이너 이미지 업데이트하기 본문

CICD Study [1기]

Helm : 5.3 - Helm에서 컨테이너 이미지 업데이트하기

구구달스 2025. 10. 19. 14:32

 

🐳 Helm을 이용한 컨테이너 이미지 업데이트하기

Helm은 Kubernetes 환경에서 애플리케이션을 손쉽게 배포하고 관리할 수 있는 패키지 매니저입니다.
이번 글에서는 Helm을 사용해 Deployment 파일의 컨테이너 이미지를 업데이트하고, 실행 중인 애플리케이션을 업그레이드하는 방법을 단계별로 알아보겠습니다.


🚀 Step 1. Helm 차트 설치 (초기 배포)

  • _helpers.tpl 파일 초기 설정으로 수정 후 Helm 배포
(⎈|kind-myk8s:N/A) ssoon@DESKTOP-72C919S:~/pacman$ cat << EOF > templates/_helpers.tpl
{{- define "pacman.selectorLabels" -}}
app.kubernetes.io/name: {{ .Chart.Name}}
{{- end }}
EOF
(⎈|kind-myk8s:N/A) ssoon@DESKTOP-72C919S:~/pacman$ helm install pacman .
NAME: pacman
LAST DEPLOYED: Tue Oct 21 23:36:57 2025
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
  • 이 명령어는 Chart.yaml과 values.yaml을 기반으로 pacman 차트를 클러스터에 설치합니다.
  • 배포 후, 현재 배포된 Revision(배포 이력)을 확인하려면 다음 명령어를 사용합니다:
(⎈|kind-myk8s:N/A) ssoon@DESKTOP-72C919S:~/pacman$ helm history pacman
REVISION        UPDATED                         STATUS          CHART           APP VERSION     DESCRIPTION
1               Tue Oct 21 23:36:57 2025        deployed        pacman-0.1.0    1.0.0           Install complete

Helm은 각 배포를 Revision으로 관리하며, 이후 업그레이드나 롤백 시 이 정보를 기반으로 동작합니다.


🧩 Step 2. 컨테이너 이미지 버전 업데이트

  • 이제 새로운 버전의 컨테이너 이미지를 사용하기 위해 values.yaml 파일을 수정합니다.
(⎈|kind-myk8s:N/A) ssoon@DESKTOP-72C919S:~/pacman$ cat << EOF > values.yaml
image:
  repository: quay.io/gitops-cookbook/pacman-kikd
  tag: "1.1.0"
  pullPolicy: Always
  containerPort: 8080

replicaCount: 1
securityContext: {}
EOF
  • 이렇게 하면 컨테이너 이미지 태그가 "1.1.0"으로 변경됩니다.

💬 "image.tag" 값은 실제 컨테이너 레지스트리에서 사용할 이미지 버전을 의미합니다.


📄 Step 3. Chart 메타데이터 수정 (Chart.yaml)

  • 이제 Chart.yaml의 appVersion을 동일하게 업데이트해야 합니다.
(⎈|kind-myk8s:N/A) ssoon@DESKTOP-72C919S:~/pacman$ cat << EOF > Chart.yaml
apiVersion: v2
name: pacman
description: A Helm chart for Pacman
type: application
version: 0.1.0
appVersion: "1.1.0"
EOF
  • 여기서 appVersion은 애플리케이션 자체의 버전을 나타내며, 실제 컨테이너 이미지 버전과 맞추는 것이 일반적입니다.
  • 반면 version은 Helm Chart의 버전으로, 템플릿 구조나 차트의 정의가 변경될 때 업데이트합니다.

appVersion은 애플리케이션 버전, version은 Helm Chart 버전입니다.
둘은 독립적으로 관리됩니다.


🔄 Step 4. Helm 업그레이드 실행

  • 이제 수정된 값을 반영하기 위해 다음 명령어로 차트를 업그레이드합니다.
(⎈|kind-myk8s:N/A) ssoon@DESKTOP-72C919S:~/pacman$ helm upgrade pacman .
Release "pacman" has been upgraded. Happy Helming!
NAME: pacman
LAST DEPLOYED: Tue Oct 21 23:39:48 2025
NAMESPACE: default
STATUS: deployed
REVISION: 2
TEST SUITE: None

 

  • REVISION: 2로 표시되며, 이는 새로운 배포가 완료되었음을 의미합니다.
  • 이제 다시 helm history pacman 명령으로 배포 이력을 확인해보면 다음과 같이 표시됩니다.
(⎈|kind-myk8s:N/A) ssoon@DESKTOP-72C919S:~/pacman$ helm history pacman
REVISION        UPDATED                         STATUS          CHART           APP VERSION     DESCRIPTION
1               Tue Oct 21 23:36:57 2025        superseded      pacman-0.1.0    1.0.0           Install complete
2               Tue Oct 21 23:39:48 2025        deployed        pacman-0.1.0    1.1.0           Upgrade complete

helm upgrade는 기존 배포를 새로운 Revision으로 대체하며, 변경 사항은 자동으로 반영됩니다.


⏪ Step 5. 이전 버전으로 롤백하기

  • Helm은 업그레이드뿐 아니라 이전 버전으로 Rollback도 지원합니다.
    예를 들어, Revision 1로 되돌리고 싶다면 아래 명령을 실행합니다: 성공 시 다음과 같은 메시지가 표시됩니다.
(⎈|kind-myk8s:N/A) ssoon@DESKTOP-72C919S:~/pacman$ helm rollback pacman 1
Rollback was a success! Happy Helming!

 

  • 롤백 후 이력을 다시 확인해 보면 다음과 같습니다.
(⎈|kind-myk8s:N/A) ssoon@DESKTOP-72C919S:~/pacman$ helm history pacman
REVISION        UPDATED                         STATUS          CHART           APP VERSION     DESCRIPTION
1               Tue Oct 21 23:36:57 2025        superseded      pacman-0.1.0    1.0.0           Install complete
2               Tue Oct 21 23:39:48 2025        superseded      pacman-0.1.0    1.1.0           Upgrade complete
3               Tue Oct 21 23:40:53 2025        deployed        pacman-0.1.0    1.0.0           Rollback to 1

helm rollback은 이전 Revision으로 손쉽게 되돌릴 수 있는 강력한 기능입니다.


⚙️ Step 6. YAML 파일을 통한 Override 적용

  • Helm은 --set 옵션 외에도 별도의 Override YAML 파일을 이용해 값을 덮어쓸 수 있습니다.
  • 예를 들어 newvalues.yaml 파일을 생성하고 다음과 같이 작성합니다:
(⎈|kind-myk8s:N/A) ssoon@DESKTOP-72C919S:~/pacman$ cat << EOF > newvalues.yaml
image:
  tag: "1.2.0"
EOF
  • 이제 이 파일을 이용해 Helm 템플릿을 렌더링합니다:
(⎈|kind-myk8s:N/A) ssoon@DESKTOP-72C919S:~/pacman$ helm template pacman -f newvalues.yaml .
...
    spec:
      containers:
        - image: "quay.io/gitops-cookbook/pacman-kikd:1.2.0"   #📌 이미지 지정 placeholder, 이미지 태그가 있으면 넣고, 없으면 Chart.yaml에 값을 설정
...
  • 렌더링된 결과를 보면 values.yaml의 기존 설정은 그대로 유지되지만,
    image.tag 값만 "1.2.0"으로 변경되어 반영됩니다.

-f newvalues.yaml 옵션을 사용하면 원본 설정을 유지한 채 특정 값만 간단히 덮어쓸 수 있습니다.


📘 Figure: Helm Upgrade Lifecycle

┌──────────────────────────────────────────────┐
│ 1️⃣ helm install → 최초 배포 (revision 1)       │
│ 2️⃣ helm upgrade → 새 이미지로 업데이트 (rev 2) │
│ 3️⃣ helm rollback → 이전 버전으로 복원 (rev 3)  │
│ 4️⃣ helm history → 전체 이력 확인               │
└──────────────────────────────────────────────┘

📌 핵심 요약

  • helm install 명령으로 애플리케이션을 초기 배포할 수 있습니다.
  • values.yaml의 image.tag와 Chart.yaml의 appVersion을 업데이트하여 새 버전으로 업그레이드합니다.
  • helm upgrade로 변경 사항을 반영하면 새로운 Revision이 생성됩니다.
  • helm rollback으로 이전 Revision으로 쉽게 복구할 수 있습니다.
  • -f newvalues.yaml 옵션을 사용하면 설정 파일로 특정 값만 Override 할 수 있습니다.

🎯 결론:
Helm은 애플리케이션 배포, 업그레이드, 롤백을 모두 체계적으로 관리할 수 있는 강력한 도구입니다.
특히 버전 관리와 배포 이력 추적이 용이하여 GitOps 환경에 매우 적합합니다.

Comments