본문 바로가기

Docker & Kubenetes

Helm Operator (Helm Controller)에 대하여

2021년 helm-operator는 maintenance 모드에 있으며 같은 회사에서 helm-controller라는 이름으로 새롭게 나왔습니다.

Helm을 통해 쿠버네티스 위에 필요한 패키지를 쉽게 설치할 수 있습니다.

하지만 서비스가 성장함에 따라 동일한 애플리케이션도 여러 상황으로 운영하게 됩니다.

애플리케이션 갯수가 많아지면 자연스럽게 chart 개수도 많아지는데, 이때 공통부 template은 하나로 사용하고 구성에 따라 values.yaml 파일만 따로 관리하는 것이 Helm Operator입니다.

Helm Operator는 helm chart를 쿠버네티스 Operator 패턴으로 조금 더 편리하게 패키지를 관리해주는 역할이라고 생각하시면 됩니다.

Operator란?

기본적인 쿠버네티스 리소스 이외에 Custom Resource 또한 쿠버네티스의 control loop 정책을 따라 동작하도록 만들어주고 이러한 패턴을 Operator 패턴이라고 합니다.(controller manager와 유사한 역할)

control loop : current state와 desired state를 모니터링하며 새로운 리소스가 생성되어 desired state가 변경되었을 때 그것을 자동으로 감지하여 current state를 desired state와 sync되도록 동작한다.

Helm Operator

- Helm Chart를 Custom Resource처럼 관리할 수 있게 해주는 Operator

- Custom Resource를 HelmRelease라고 부른다.

- Helm Operator가 자체적으로 control loop를 살펴보다 변경된 것을 감지하여 새로운 helm release를 배포한다.

HelmRelease

- YAML 형식의 파일

apiVersion: helm.fluxcd.io/v1
kind: HelmRelease
metadata:
  name: rabbit
  namespace: default
spec:
  releaseName: rabbitmq
  chart:
    repository: https://kubernetes-charts.storage.googleapis.com/
    name: rabbitmq
    version: 3.3.6
  values:
    replicas: 1
  • apiVersion, kind, metadata: 기본적인 리소스 정보, 리소스의 버전, 종류, 이름 등을 설정
  • spec: HelmRelease에 특화된 세부 스펙
  • releaseName: 배포된 helm chart의 이름 지정 (helm install --name <RELEASE_NAME>)
  • chart: chart의 공통부 template이 위치한 정보 (helm repo, git repo 등)
  • values: values.yaml 파일의 정보를 해당 property에 입력

Helm Operator Install

# helm repo 등록
helm repo add fluxcd https://charts.fluxcd.io
# helm-operator 설치
helm upgrade -i helm-operator fluxcd/helm-operator \
    --namespace flux \
    --set helm.versions=v3

 

참고 : https://coffeewhale.com/kubernetes/gitops/helm/2020/05/13/helm-operator/