본문 바로가기
DevOps

Helm chart / kustomize

by 이강복 2023. 2. 24.

Helm chart / kustomize : 쿠버네티스에 애플리케이션을 배포할 때 쿠버네티스 리소스를 하나하나 작성해야 하지만 그것을 편리하게 해주는 방식들을 말합니다.

같은 애플리케이션을 test와 staging에 배포하기 위한 리소스들은 보통 90% 이상 그 정의가 동일합니다. 그렇지만 서로 다른 DB 주소를 가리켜야 하는 등의 일부 자그마한 수정 작업은 또 필요하죠.

우리 모두는 코드를 중복해서 쓰는 것이 매우 나쁜 일이라고 배웠습니다. 그렇기 때문에, 90% 이상의 동일한 항목은 한 번만, 그러나 변경이 필요한 일부 항목은 변경해줄 수 있는 시스템을 희망하곤 합니다.

  • Helm은 템플릿 방식을 이용해 이 문제를 해결합니다. 그저 필요한 쿠버네티스 정의들을 여느 때처럼 작성해주면 됩니다. 배포 A와 B에서 일부 항목이 달라야 하는 부분이 있다면, 그저 해당 항목을 적을 수 있는 공간 하나만 추가해주고, 설치 시점에 Helm이 해당 공간을 유저가 추가해준 값으로 대체하도록 두면 됩니다.
  • Kustomize는 폴리모픽(다형성의)한 상속 방식으로 이 문제를 해결합니다. 또한 패치와 같은 후처리를 위한 도메인에 특정된 언어와 결합되어 있습니다. 풀어 설명하자면, staging 배포에 관한 내용을 서술한 여러분의 파일은 'generic' 파일에서 상속된다는 의미입니다. 그리고 커스텀 설정 언어를 통해 수정사항과 패치를 추가합니다.

Helm chart install

curl -fsSL -o get_helm.sh <https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3>
chmod 700 get_helm.sh
./get_helm.sh

helm repo add bitnami <https://charts.bitnami.com/bitnami>

helm repo update

Kustomize install

curl -s "<https://raw.githubusercontent.com/kubernetes-sigs/kustomize/master/hack/install_kustomize.sh>"  | bash
mv kustomize /usr/local/bin/

Kustomize

kubectl create namespace my-argocd

base/kustomization.yaml

resources:
- n1.yaml
- j1.yaml
- ingress_n1.yaml
- ingress_j1.yaml
- svc_n1.yaml
- svc_j1.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

overlays/dev/kustomization.yaml

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
images:
- name: <https://registry-1.docker.io/kangbock/nginx>
  newTag: latest
- name: <https://registry-1.docker.io/kangbock/nodejs>
  newTag: latest
resources:
- ../../base
cd overlays/dev/
kustomize edit set image <https://registry-1.docker.io/kangbock/nginx:latest>

cd ../..
kustomize build overlays/dev/.

'DevOps' 카테고리의 다른 글

Harbor  (1) 2023.05.23
ArgoCD Image Updater (현재 Beta 버전)  (0) 2023.02.24
CI/CD (Argo CD)  (0) 2023.01.31
Terraform (Azure)  (0) 2023.01.18
CI/CD (Jenkins)  (0) 2023.01.18