[helm] 구조 정리

zzery·2022년 9월 28일

일지(2022~2024)

목록 보기
21/25

helm

  • k8s 환경의 패키지 매니저.
  • 복잡한 형태의 배포를 chart라는 단위로 패키징하여 관리 가능.
# 가장 빠른 설치 및 사용 예시

# helm CLI 설치
❯ brew install helm
❯ helm version
version.BuildInfo{Version:"v3.8.2", GitCommit:"6e3701edea09e5d55a8ca2aae03a68917630e91b", GitTreeState:"clean", GoVersion:"go1.18.1"}

# 차트에 대한 repo 추가
❯ helm repo add bitnami https://charts.bitnami.com/bitnami
"bitnami" has been added to your repositories

# 검색
❯ helm search repo bitnami | grep nginx
bitnami/nginx                                   10.2.1          1.21.6          NGINX Open Source is a web server that can be a...
bitnami/nginx-ingress-controller                9.1.27          1.2.0           NGINX Ingress Controller is an Ingress controll...
bitnami/nginx-intel                             1.0.5           0.4.7           NGINX Open Source for Intel is a lightweight se...

# 적용
❯ helm install helm-nginx bitnami/nginx
NAME: helm-nginx
LAST DEPLOYED: Mon May  9 22:49:20 2022
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
CHART NAME: nginx
CHART VERSION: 10.2.1
APP VERSION: 1.21.6

# k8s에 배포된 목록 확인
❯ helm ls
NAME            NAMESPACE       REVISION        UPDATED                                 STATUS          CHART          APP VERSION
helm-nginx      default         1               2022-05-09 22:49:20.559748444 +0900 KST deployed        nginx-10.2.1   1.21.6    

Chart 구조

  • 공식 문서 예시: https://helm.sh/ko/docs/topics/charts/
  • 차트를 새로 만드는게 아닌 경우는 주로 values.yaml을 사용하게 됨.
  • 예시: flagger 설치할 때 쓴 values 첨부
# 예시 - wordpress에 대한 helm chart 구조
wordpress/
  Chart.yaml          # 차트에 대한 정보를 가진 YAML 파일
  values.yaml         # 차트에 대한 기본 환경설정 값들
  charts/             # 이 차트에 종속된 차트들을 포함하는 디렉터리
  crds/               # 커스텀 자원에 대한 정의
  templates/          # values와 결합될 때, 유효한 쿠버네티스 manifest 파일들이 생성될 템플릿들의 디렉터리

helm architecture

  • helm 3: 2019.11 release
  • helm 2: tiller 기반으로 차트가 관리되었음.
    • helm 3과 비교했을 때, helm 2를 사용하려면 별도의 초기 구성이 필요함.
    • helm 3은 k8s 클러스터 / kubeconfig / helm CLI 만 있으면 됩니다.
  • 참고 자료: https://developer.ibm.com/blogs/kubernetes-helm-3/

helm v2

  • client-server 구조로 동작. (client는 helm, server는 tiller)
  • helm의 백엔드 역할인 tiller는 cluster-admin 권한으로 동작.
    • 이때 권한 관련된 보안 이슈가 발생할 수 있음.

helm v3

  • client-only 구조로 동작. (client는 helm)
  • client는 k8s API Server와 직접적으로 연결됨.
    • helm 3은 kubeconfig 파일을 사용하기에, user마다 권한을 나눌 수 있게 됨.

helm Operator

위처럼 helm CLI와 values.yaml만 있는 경우엔 실제 관리가 어려울 수 있음.

  • 관리하는 서비스/chart 종류가 많을 때
  • helm으로 관리하는 서비스에서 변경점을 반영할 때

helm Operator를 적용하면 helm chart를 선언적으로 관리할 수 있음.

helm에 대한 CR 사용 예시 - HelmRelease

apiVersion: helm.toolkit.fluxcd.io/v2beta1
kind: HelmRelease
metadata:
  name: podinfo
  namespace: default
spec:
  interval: 5m
  chart:
    spec:
      chart: <name|path>
      version: 6.0.2
      sourceRef:
        kind: <HelmRepository|GitRepository|Bucket>
        name: podinfo
        namespace: flux-system
      interval: 1m
  values: # podinfo에 대한 values 파일 내용 정의
    replicaCount: 5
    logLevel: debug
    service:
      enabled: true
      annotations: {}
      type: ClusterIP
      metricsPort: 9797
      httpPort: 9898
      externalPort: 9898
      grpcPort: 9999
      grpcService: podinfo
      nodePort: 31198
    redis:
      enabled: false
      repository: redis
      tag: 6.0.8

기타

helm 관리 방안 - argoCD

  • argoCD는 helm chart를 배포할 수 있음.

Operator SDK를 통한 helm Operator 개발

  • Operator SDK는 helm 기반 operator 개발을 지원함.
    • 기본 템플릿 제공
    • 개발 단계의 테스트가 용이
    • 최종 결과물은 flux의 helm-controller와 유사
profile
이 블로그의 모든 글은 수제로 짜여져 있습니다...

0개의 댓글