Ssoon

Helm : 5.5 Deploying a Chart from a Repository 본문

CICD Study [1기]

Helm : 5.5 Deploying a Chart from a Repository

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

 

🚀 Helm Chart Repository에서 Chart 배포하기

  • Helm은 Kubernetes 애플리케이션을 손쉽게 패키징, 배포, 관리할 수 있도록 도와주는 패키지 매니저입니다.
  • Helm Chart를 원격 Chart Repository(예: Bitnami)에서 가져와 Kubernetes 클러스터에 배포하는 전체 과정

📦 1. Helm Repository 등록하기

  • Helm을 이용해 Chart를 설치하기 위해서는 먼저 Chart Repository를 등록해야 합니다.
  • Helm Repository는 Chart들이 저장되어 있는 원격 저장소이며, 아래 명령으로 Bitnami Repository를 등록합니다:
(⎈|kind-myk8s:N/A) ssoon@DESKTOP-72C919S:~$ helm repo add bitnami https://charts.bitnami.com/bitnami
"bitnami" has been added to your repositories

 

"Helm Chart Repository는 Chart의 원격 저장소이며, URL에는 항상 index.yaml이 존재해야 합니다."


📚 2. 등록된 Repository 확인하기

  • 등록된 Repository 목록을 확인하려면 아래 명령어를 실행합니다:
(⎈|kind-myk8s:N/A) ssoon@DESKTOP-72C919S:~$ helm repo list
NAME    URL
bitnami https://charts.bitnami.com/bitnami

"Repository가 정상 등록되면 Helm이 Chart를 검색하고 설치할 수 있는 기반이 마련됩니다."


🔄 3. Repository 최신 상태로 갱신하기

  • 새로운 Chart 버전을 사용하거나 Repository의 최신 상태를 반영하려면 다음 명령을 실행합니다:
(⎈|kind-myk8s:N/A) ssoon@DESKTOP-72C919S:~$ helm repo update
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "bitnami" chart repository
Update Complete. ⎈Happy Helming!⎈

"Repository를 갱신하면 최신 Chart 리스트를 항상 반영할 수 있습니다."


🔍 4. 설치 가능한 Chart 검색하기

  • Repository에 어떤 Chart들이 있는지 알고 싶을 때는 search 명령을 사용합니다.
    예를 들어 PostgreSQL을 설치하고 싶다면 다음과 같이 검색할 수 있습니다:
⎈|kind-myk8s:N/A) ssoon@DESKTOP-72C919S:~$ helm search repo postgresql
NAME                    CHART VERSION   APP VERSION     DESCRIPTION                   

bitnami/postgresql      18.1.1          18.0.0          PostgreSQL (Postgres) is an open source object-...
bitnami/postgresql-ha   16.3.2          17.6.0          This PostgreSQL cluster solution includes the P...
bitnami/cloudnative-pg  1.0.11          1.26.1          CloudNativePG is an open-source tool for managi...
bitnami/supabase        5.3.6           1.24.7          DEPRECATED Supabase is an open source Firebase ...
bitnami/minio-operator  0.2.9           7.1.1           MinIO(R) Operator is a Kubernetes-native tool f...

"Helm은 검색 결과에서 <repo>/<chart> 형식으로 Chart 이름을 표시합니다.
예: bitnami/postgresql"


⚙️ 5. PostgreSQL Chart 배포하기

  • 이제 실제로 PostgreSQL Chart를 설치해보겠습니다.
  • 다음 명령어는 Helm Repository에서 PostgreSQL Chart를 가져와 클러스터에 배포합니다:
(⎈|kind-myk8s:N/A) ssoon@DESKTOP-72C919S:~$ helm install my-db oci://registry-1.docker.io/bitnamicharts/postgresql \
--namespace default \
--set auth.username=my-default \
--set auth.password=postgres \
--set auth.database=mydb \
--set primary.persistence.enabled=false
Pulled: registry-1.docker.io/bitnamicharts/postgresql:18.1.1
Digest: sha256:fac73c125728fa182d47a0b3fb5db3ee7ac35372533585dd8a4355b4797b2a16
NAME: my-db
LAST DEPLOYED: Sat Oct 25 15:14:03 2025
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
CHART NAME: postgresql
CHART VERSION: 18.1.1
APP VERSION: 18.0.0
...

🔧 명령어 설명

  • my-db : 배포 이름 (release name)
  • --set : Chart의 기본값을 직접 오버라이드
  • bitnami/postgresql : Bitnami Repository의 PostgreSQL Chart 지정

"Helm install 명령은 지정된 Chart를 가져와 Kubernetes 리소스(Deployment, Service, StatefulSet 등)를 자동으로 생성합니다."


📋 6. 배포 결과 확인하기

  • 설치가 완료되면 Helm은 아래와 같은 상세 정보를 출력합니다:
...

⚠ WARNING: Since August 28th, 2025, only a limited subset of images/charts are available for free.
    Subscribe to Bitnami Secure Images to receive continued support and security updates.
    More info at https://bitnami.com and https://github.com/bitnami/containers/issues/83267

** Please be patient while the chart is being deployed **

PostgreSQL can be accessed via port 5432 on the following DNS names from within your cluster:

    my-db-postgresql.default.svc.cluster.local - Read/Write connection

To get the password for "postgres" run:

    export POSTGRES_ADMIN_PASSWORD=$(kubectl get secret --namespace default my-db-postgresql -o jsonpath="{.data.postgres-password}" | base64 -d)

To get the password for "my-default" run:

    export POSTGRES_PASSWORD=$(kubectl get secret --namespace default my-db-postgresql -o jsonpath="{.data.password}" | base64 -d)

To connect to your database run the following command:

    kubectl run my-db-postgresql-client --rm --tty -i --restart='Never' --namespace default --image registry-1.docker.io/bitnami/postgresql:latest --env="PGPASSWORD=$POSTGRES_PASSWORD" \
      --command -- psql --host my-db-postgresql -U my-default -d mydb -p 5432

    > NOTE: If you access the container using bash, make sure that you execute "/opt/bitnami/scripts/postgresql/entrypoint.sh /bin/bash" in order to avoid the error "psql: local user with ID 1001} does not exist"

To connect to your database from outside the cluster execute the following commands:

    kubectl port-forward --namespace default svc/my-db-postgresql 5432:5432 &
    PGPASSWORD="$POSTGRES_PASSWORD" psql --host 127.0.0.1 -U my-default -d mydb -p 5432

WARNING: The configured password will be ignored on new installation in case when previous PostgreSQL release was deleted through the helm command. In that case, old PVC will have an old password, and setting it through helm won't take effect. Deleting persistent volumes (PVs) will solve the issue.
WARNING: Rolling tag detected (bitnami/postgresql:latest), please note that it is strongly recommended to avoid using rolling tags in a production environment.
+info https://techdocs.broadcom.com/us/en/vmware-tanzu/application-catalog/tanzu-application-catalog/services/tac-doc/apps-tutorials-understand-rolling-tags-containers-index.html
WARNING: Rolling tag detected (bitnami/os-shell:latest), please note that it is strongly recommended to avoid using rolling tags in a production environment.
+info https://techdocs.broadcom.com/us/en/vmware-tanzu/application-catalog/tanzu-application-catalog/services/tac-doc/apps-tutorials-understand-rolling-tags-containers-index.html

WARNING: There are "resources" sections in the chart not set. Using "resourcesPreset" is not recommended for production. For production installations, please set the following values according to your workload needs:
  - primary.resources
  - readReplicas.resources
+info https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
  • 그리고 Chart와 App의 버전, 접근 방법, 접속 명령어 등을 함께 안내해줍니다.

"Helm은 배포 후 접속 정보와 Secret 조회 방법까지 자동으로 안내해줍니다."


🔑 7. PostgreSQL 비밀번호 가져오기

  • PostgreSQL의 관리자 비밀번호와 사용자 비밀번호는 Secret으로 관리됩니다.
  • 아래 명령으로 비밀번호를 확인할 수 있습니다:
(⎈|kind-myk8s:N/A) ssoon@DESKTOP-72C919S:~$ export POSTGRES_ADMIN_PASSWORD=$(kubectl get secret --namespace default my-db-postgresql -o jsonpath="{.data.postgres-password}" | base64 -d)
(⎈|kind-myk8s:N/A) ssoon@DESKTOP-72C919S:~$ export POSTGRES_PASSWORD=$(kubectl get secret --namespace default my-db-postgresql -o jsonpath="{.data.password}" | base64 -d)

"Helm Chart는 보안 강화를 위해 비밀번호를 Kubernetes Secret에 자동 저장합니다."


🧩 8. 클러스터 내부에서 데이터베이스 접속하기

  • 클러스터 내에서 PostgreSQL에 접속하려면 다음 명령을 사용합니다:
(⎈|kind-myk8s:N/A) ssoon@DESKTOP-72C919S:~$ kubectl run my-db-postgresql-client --rm --tty -i --restart='Never' --namespace default --image registry-1.docker.io/bitnami/postgresql:latest --env="PGPASSWORD=$POSTGRES_PASSWORD" \
      --command -- psql --host my-db-postgresql -U my-default -d mydb -p 5432
All commands and output from this session will be recorded in container logs, including credentials and sensitive information passed through the command prompt.
If you don't see a command prompt, try pressing enter.
mydb=>

"Pod 내부에서 psql 클라이언트를 통해 직접 DB 연결이 가능합니다."


🌐 9. 클러스터 외부에서 데이터베이스 접속하기

  • 외부에서 PostgreSQL에 접속하려면 port-forwarding을 설정해야 합니다:
(⎈|kind-myk8s:N/A) ssoon@DESKTOP-72C919S:~$ kubectl port-forward --namespace default svc/my-db-postgresql 5432:5432 &
    PGPASSWORD="$POSTGRES_PASSWORD" psql --host 127.0.0.1 -U my-default -d mydb -p 5432

"Port-forwarding을 통해 로컬 환경에서도 Kubernetes 내부의 DB에 접속할 수 있습니다."


🔎 10. 배포 리소스 점검하기

  • 배포된 리소스 상태를 확인하려면 다음 명령어를 사용할 수 있습니다.
(⎈|kind-myk8s:N/A) ssoon@DESKTOP-72C919S:~$ kubectl get sts,pod,svc,ep,secret
NAME                                READY   AGE
statefulset.apps/my-db-postgresql   1/1     4m8s

NAME                          READY   STATUS      RESTARTS      AGE
pod/my-db-postgresql-0        1/1     Running     0             4m8s
pod/my-db-postgresql-client   0/1     Completed   0             3m30s
pod/pacman-576769bb86-w2vsc   1/1     Running     1 (50m ago)   3d15h

NAME                          TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
service/kubernetes            ClusterIP   10.96.0.1       <none>        443/TCP    3d16h
service/my-db-postgresql      ClusterIP   10.96.217.49    <none>        5432/TCP   4m8s
service/my-db-postgresql-hl   ClusterIP   None            <none>        5432/TCP   4m8s
service/pacman                ClusterIP   10.96.156.153   <none>        8080/TCP   3d15h

NAME                            ENDPOINTS          AGE
endpoints/kubernetes            172.19.0.2:6443    3d16h
endpoints/my-db-postgresql      10.244.0.30:5432   4m8s
endpoints/my-db-postgresql-hl   10.244.0.30:5432   4m8s
endpoints/pacman                10.244.0.5:8080    3d15h

NAME                                  TYPE                 DATA   AGE
secret/my-db-postgresql               Opaque               2      4m8s
secret/sh.helm.release.v1.my-db.v1    helm.sh/release.v1   1      4m8s
secret/sh.helm.release.v1.pacman.v1   helm.sh/release.v1   1      3d15h
secret/sh.helm.release.v1.pacman.v2   helm.sh/release.v1   1      3d15h
secret/sh.helm.release.v1.pacman.v3   helm.sh/release.v1   1      3d15h

"kubectl 명령으로 Helm Chart가 생성한 리소스를 손쉽게 확인할 수 있습니다."


🧠 11. Chart의 기본값 확인하기

  • 3rd-party Chart는 기본 설정을 바로 확인하기 어렵습니다.
    이럴 때는 helm show values 명령으로 모든 설정값을 확인할 수 있습니다:
(⎈|kind-myk8s:N/A) ssoon@DESKTOP-72C919S:~$ helm show values bitnami/postgresql
# Copyright Broadcom, Inc. All Rights Reserved.
# SPDX-License-Identifier: APACHE-2.0

## @section Global parameters
## Please, note that this will override the parameters, including dependencies, configured to use the global value
##
global:
  ## @param global.imageRegistry Global Docker image registry
  ##
  imageRegistry: ""
  ## @param global.imagePullSecrets Global Docker registry secret names as an array
  ## e.g.
  ## imagePullSecrets:
  ##   - myRegistryKeySecretName
  ##
  imagePullSecrets: []
  ## @param global.defaultStorageCl
...

이 명령은 values.yaml에 정의된 모든 파라미터를 출력합니다.

"helm show values 명령으로 기본 설정값을 확인하고, 필요한 항목만 --set 옵션으로 오버라이드하면 됩니다."


📌 핵심 요약

항목 내용

📦 Repository 등록 helm repo add <name> <url>
🔍 Chart 검색 helm search repo <chart-name>
⚙️ Chart 설치 helm install <release> <repo/chart>
🔑 비밀번호 확인 Secret을 kubectl로 가져오기
🌐 외부 접속 kubectl port-forward 사용
🧠 설정 확인 helm show values <repo/chart>

"Helm은 Chart Repository를 통해 Kubernetes 애플리케이션을 손쉽게 검색, 배포, 관리할 수 있는 강력한 도구입니다."

 
Comments