-
Helm 알아보기Kubernetes 2023. 12. 11. 17:25728x90반응형
- 목차
소개.
Helm 은 쿠버네티스를 위한 패키지 매니저입니다.
npm, pip 등의 패키지 매니저들이 이미 만들어진 라이브러리들을 추가/삭제할 수 있는 기능을 제공하듯이,
Helm 은 미리 설정된 쿠버네티스 리소스들을 관리하는 패키지 매니저입니다.
굴직한 서비스들을 손쉽게 쿠버네티스 클러스터 내부에 디플로이할 수 있도록 설정되어 있구요.
Kafka, Spark, Hadoop 등의 서비스를 간편하게 쿠버네티스에 적용할 수 있습니다.
Helm 을 사용하기 위해서는 Chart, Values 등의 이해가 선행되어야 하며,
이어지는 글에서 Helm 의 구성요소들과 사용하는 방법에 대해서 설명해보도록 하겠습니다.
Helm 으로 MySQL 생성하기.
Helm 에 대해서 알아보기 이전에 이해를 돕고자 간단한 실습을 선행하려고 합니다.
MySQL Helm Chart 추가하기.
먼저 현재 Helm 과 연결된 KUBECONFIG 가 Helm Chart 를 추가할 Cluster 인지 알아야합니다.
다른 Kubernetes Cluster 에 Helm Chart 가 추가됨을 사전에 방지하는 목적입니다.kubectl config view apiVersion: v1 clusters: - context: cluster: kind-test-cluster user: kind-test-cluster name: kind-test-cluster current-context: kind-test-cluster kind: Config preferences: {} users: - name: kind-test-cluster user: client-certificate-data: DATA+OMITTED client-key-data: DATA+OMITTED
1. Repository 추가하기.
Helm Chart 를 사용하기 위해서는 해당하는 Chart 가 속한 Repository 를 Helm 에 추가해야합니다.
"helm repo add" 가 Repository 를 추가하는 커맨드입니다.
< helm add chart >helm repo add bitnami https://charts.bitnami.com/bitnami
< log (helm add chart) >"bitnami" already exists with the same configuration, skipping
2. Template 조회하기.
Helm Template 은 하나의 yaml 파일 또는 내용입니다.
Helm 을 통해서 생성된 Kubernetes Resource 들이 작성되어 있구요.
Helm 으로 구현할 대상이 필요로하는 Service, Deployment, PersistentVolumeClaim 등 리소스가 작성되어 있습니다.
아래와 같은 커맨드를 실행하면 test 라는 이름의 Template 을 조회할 수 있습니다.
< bitnami/mysql Helm Template 조회 >helm template test bitnami/mysql
< bitnami/mysql Helm Template >helm template test bitnami/mysql | grep kind -A 5 kind: ServiceAccount metadata: name: test-mysql namespace: "default" labels: app.kubernetes.io/instance: test -- kind: Secret metadata: name: test-mysql namespace: "default" labels: app.kubernetes.io/instance: test -- kind: ConfigMap metadata: name: test-mysql namespace: "default" labels: app.kubernetes.io/instance: test -- kind: Service metadata: name: test-mysql-headless namespace: "default" labels: app.kubernetes.io/instance: test -- kind: Service metadata: name: test-mysql namespace: "default" labels: app.kubernetes.io/instance: test -- kind: StatefulSet metadata: name: test-mysql namespace: "default" labels: app.kubernetes.io/instance: test
3. Helm Values 포맷 조회하기.
Template 과 더불어 Values 를 조회할 수 있습니다.helm show values bitnami/mysql > /tmp/mysql/values.yaml
실제로 helm 을 통해서 Kubernetes Resource 를 생성할 때에는
values.yaml 을 수정하여 원하는 Configuration 을 설정할 수 있습니다.helm show values bitnami/mysql # Copyright VMware, Inc. # SPDX-License-Identifier: APACHE-2.0 ## @section Global parameters ## Global Docker image parameters ## Please, note that this will override the image parameters, including dependencies, configured to use the global value ## Current available global Docker image parameters: imageRegistry, imagePullSecrets and storageClass ## ## @param global.imageRegistry Global Docker image registry ## @param global.imagePullSecrets Global Docker registry secret names as an array ## @param global.storageClass Global StorageClass for Persistent Volume(s) ## global: imageRegistry: "" ## E.g. ## imagePullSecrets: ## - myRegistryKeySecretName ## imagePullSecrets: [] storageClass: ""
4. Kubernetes 에 Helm 관련 리소스 생성하기.
helm install test-mysql --set auth.rootPassword=pass bitnami/mysql
kubectl get pod NAME READY STATUS RESTARTS AGE test-mysql-0 1/1 Running 0 25m
5. Helm Uninstall 하기.
helm uninstall test-mysql release "test-mysql" uninstalled
Helm Chart 란 ?
Helm 의 패키지들을 Chart 라고 부릅니다.
패키지가 그러하듯 Chart 는 미리 설정된 Kubernetes Resource 의 설정들이 존재합니다.
Helm Chart 는 Template 과 Value 들을 포함하는데요.
Template 은 어떠한 Kubernetes Resource 들로 구성되는지에 대한 내용이 작성되어 있습니다.
- Service
- Deployment
- PersistentVolumeClaim
등이 작성됩니다.
그리고 Values 의 경우에는 Template 의 설정값을 Replacing 하는 목적으로 사용됩니다.
예를 들어, 아래와 같이 Template 은 ReplicaSet 를 구성하는 설정값이 있고,
Values 에 replicas: 10 이라는 값으로 채워져있다면,
해당 Template 과 Values 파일로 생성되는 Kubernetes Resource 는 10 개의 복제본을 가지는 ReplicaSet 이 생성됩니다.
Template kind: ReplicaSet replicas : {.Values.replicas} ========================== Values replicas: 10
Helm Template 이란 ?
Template 는 Helm Chart 를 통해서 구현하게 된 Kubernetes Resource 들이 기록되어 있습니다.
아래는 bitnami/nginx 차트의 Template 입니다.
Service 와 Deployment 로 구성됩니다.apiVersion: v1 kind: Service metadata: name: test-nginx namespace: "default" labels: app.kubernetes.io/instance: test app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: nginx app.kubernetes.io/version: 1.25.3 helm.sh/chart: nginx-15.4.4 -- apiVersion: apps/v1 kind: Deployment metadata: name: test-nginx namespace: "default" labels: app.kubernetes.io/instance: test app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: nginx app.kubernetes.io/version: 1.25.3 helm.sh/chart: nginx-15.4.4
아래는 bitnami/redis 의 Template 입니다.
Service, StatefulSet 으로 구성됩니다.apiVersion: v1 kind: Service metadata: -- apiVersion: v1 kind: Service metadata: -- apiVersion: v1 kind: Service metadata: -- apiVersion: apps/v1 kind: StatefulSet metadata: -- - apiVersion: v1 kind: PersistentVolumeClaim metadata: -- apiVersion: apps/v1 kind: StatefulSet metadata: -- - apiVersion: v1 kind: PersistentVolumeClaim metadata:
이처럼 Template 은 Helm Chart 가 필요로하는 Kubernetes Resource 의 설정 내용들로 구성됩니다.
Value File.
Values 는 yaml 파일입니다.
Helm Template 은 Kubernetes 의 리소스 설정의 모음이라고 말씀드렸습니다.
이때, Helm Template 는 설정에 따라서 적용되어야하는 값이 달라질 수 있습니다.
이때 Values.yaml 파일의 설정을 활용하여 쿠버네티스 리소스의 설정을 변경할 수 있습니다.
반응형'Kubernetes' 카테고리의 다른 글
[Kubernetes] Argo Workflows 시작하기 (0) 2023.12.28 Kubernetes Nginx Ingress 알아보기 (0) 2023.12.16 Kubernetes Custom Resource 알아보기 (0) 2023.12.11 Kubernetes Certificate 알아보기 (0) 2023.12.11 Kubernetes ReplicaSet 알아보기 (2) 2023.11.28