본문 바로가기

인턴

[Kubernetes] Helm / Kustomize

Helm

: 템플릿 방식, Deployment YAML 파일을 만들때, 환경에 따라 변경되는 부분을 변수로 처리한 템플릿을 만든 후에, 환경별로 변수 값을 채워 넣는 방식

  • 코드를 중복으로 사용하는 일을 helm chart로 손쉽게 배포 가능
  • 배포 A와 B에서 일부 항목이 달라야 하는 부분이 있다면, 그저 해당 항목을 적을 수 있는 공간 하나만 추가해주고, 설치 시점에 Helm이 해당 공간을 유저가 추가해준 값으로 대체하도록 두면 됩니다.
  • 상속이 없어 장기간의 관리가 가능
  • 소량의 value만을 외부에 노출해 쿠버네티스 리소스가 어떻게 구현되는 지에 대해서는 완전히 숨겨줌
# file: _charts/microserviceA/templates/secret.yaml
apiVersion: v1
kind: Secret
metadata:
  name: mysecret
type: Opaque
stringData:
  database_password: {{ .Values.databasePassword }}

 

Kustomize

: 상속 방식, base YAML을 정의한 후에, 다른 변경할 부분만 상속받은 YAML에서 구현하는 방식, 쿠버네티스 구성을 사용자 정의화하는 도구, 폴리모픽(다형성의)한 상속 방식, 기본적으로 참조하고 있는 제너릭 쿠버네티스 리소스를 커스컴화하는 컴파일러

  • kubectl명령어를 통해 바로 배포 가능
  • 패치와 같은 후처리를 위한 도메인에 특정된 언어와 결합되어 있다. staging 배포에 관한 내용을 서술한 여러분의 파일은 'generic' 파일에서 상속된다는 의미. 그리고 커스텀 설정 언어를 통해 수정사항과 패치를 추가.
  • kustomization.yaml 파일을 작성할 때, 상속해온 'generic' 애플리케이션의 배포 설정이 어떻게 되어 있는지도 파악하고 있어야 한다는 것이 문제
# file: microserviceA-staging/kustomization.yaml
bases:
  - ../_bases/microserviceA/
commonLabels:
  app: microserviceA-staging

디렉토리 구조

오리지널 파일이 있는 디렉토리 (base)를 만든 후에, 각 환경별로 다른 디렉토리(dev)를 만들고 환경별 디렉토리마다 변경할 내용이 정의된 patch 파일 작성