ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Helm 알아보기
    Kubernetes 2023. 12. 11. 17:25
    728x90
    반응형

     

     

    - 목차

     

    소개.


    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 파일의 설정을 활용하여 쿠버네티스 리소스의 설정을 변경할 수 있습니다. 
     
     
     
     
     

    반응형
Designed by Tistory.