Helm chart 생성 및 배포

푸르둥개·2022년 12월 23일
목표
  • 현재 서비스용 docker-compose.yml을 kubertetes 에 맞게 chats 형태로 변환
  • 서비스별 values.yaml 생성 및 배포.

Helm

Kubernetes에 resource를 생성하기 위해서는 YAML manifest나 이와 유사한 데이터가 필요합니다. Helm은 Kubernetes 용 package manager로 배포에 필요한 resource를 하나로 묶고 (charts), 상태를 추적하여 배포 또는 롤백을 쉽게 할 수 있도록 도와줍니다.

Helm Charts

Helm charts를 만들어 아래 resource manifest를 생성하는 데 사용하려고 합니다.

Deployment | StatefulSet | DaemonSet | CronJob | Job
ConfigMap
HorizontalPodAutoscaler (파드 개수를 자동으로 스케일)
PodDisruptionBudget (항상 최소한의 Pod수를 유지)
Service
VirtualService (istio)
DestinationRule (istio)
Gateway (istio)
RequestAuthentication (istio)
AuthorizationPolicy (istio)

Helm Chart를 만든 이유
Kubernetes Deployment나 Service manifest에는 개발자가 느끼는 반복적인 작업이 생각보다 많습니다. DevOps 관점에서는 당연히 지정해야 하는 spec.selector도 개발자의 관점에서는 하나의 반복작업 입니다. 이런 반복작업을 최소화하고, 개발자가 최소한의 지식으로 빠르게 배포 할 수 있도록 Helm chart를 만드는 작업이 필요 합니다.


START!!

Manifast 작성
Range

Helm charts에 사용할 values.yaml 파일을 작성할 때, 각 stack에만 적용되는 -values.yaml 파일을 만들어서 사용하고자 합니다. 예를 들어, dev 환경에 배포할 때에는 dev-values.yaml 파일을 사용하며, prod 환경에 배포할 때에는 prod-values.yaml 파일을 사용합니다. (차후, 모든 stack에 공통적으로 적용되는 대부분의 설정을 values.yaml에 넣고, -values.yaml에는 최소한의 설정만 override할 계획을 가지고 있습니다.)

그런데, PodTemplateSpec 의 env 등 핵심적인 부분은 수시로 변경되어 지고 각 stack (dev/prod..)에 따라 설정을 다르게 가져갈 경우가 많습니다. 이럴 환경을 고려해 Range List 형태로 운영 합니다.

Options
  • Range 를 사용할 경우, value.yaml 내용을 string 타입으로 변경을 해줄 필요가 있기때문에 quote 를 같이 사용 합니다.
  • ingress.yaml 의 annotaioons 경우는 ToYaml 를 사용합니다.
values.yaml

모듈 개발자는 values.yaml 파일의 내용만 수정하면 바로 Kubernetes 에 자동 배포가 진행 됩니다. 내용은 크게 4가지 항목 (deployment, ingress, service, configMap ) 으로 구분되어 집니다. 기본적인 내용은 아래와 같습니다.

  • image name & Tag / env 설정
  • ingress 설정 / domain / tls
  • 기타 - 필요에 따라 내용 추가.

예시)

배포 전략

  • main → release/x branch
  • pull requests 를 merge 하면 자동 배포. (dev)

profile
DevOps업무중, 개발팀과 운영팀이 알아두면 좋은 정보를 공유합니다.

0개의 댓글