Notice
Recent Posts
Recent Comments
Link
«   2025/09   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

나이는 지구가 태양을 도는 횟수일 뿐이다.

[Helm]Subchart에 오픈소스 chart 추가하기 본문

IT

[Helm]Subchart에 오픈소스 chart 추가하기

카락스의 포톤캐논 2023. 3. 22. 11:34

앱의 Helm 차트를 만들때 오픈소스를 한개의 차트에서 배포할수 있도록 하고싶다.

  • 이전에 하였던 Argo-CD나 대부분의 오픈소스 차트에서 Subchart로 같이 배포되는것을 보았다.
  • 내가 서브로 사용할 오픈소스 는 Kafka, redis, mongodb, ECK-operator 이다.
  • 오픈소스의 차트를 분석해보니 그렇게 어렵지는 않았다.
  • 윈도우에서 vscode로 하였다.

시작 해보자.

1. 메인 Helm 차트 생성하기

  • main의 이름으로 부모 차트를 생성한다.
helm create main
tree main /f
E:.
│  .helmignore
│  Chart.yaml
│  values.yaml
│
├─charts
└─templates
    │  deployment.yaml
    │  hpa.yaml
    │  ingress.yaml
    │  NOTES.txt
    │  service.yaml
    │  serviceaccount.yaml
    │  _helpers.tpl
    │
    └─tests
            test-connection.yaml

2. charts 폴더에 내가사용할 다른 차트를 넣는다.

  • Helm repo는 추가가 이미 되었다고 생각하기에 pull을 사용하고 tar를 풀어준다.
helm pull bitnami/kafka
helm pull bitnami/redis-cluster
helm pull elastic/eck-operator
helm pull bitnami/mongodb-sharded
tar zxf .\kafka-21.4.0.tgz
tar zxf .\redis-cluster-8.3.12.tgz
tar zxf .\mongodb-sharded-6.3.1.tgz
tar zxf .\eck-operator-2.6.1.tgz
tree 
E:.
├─eck-operator
│  ├─charts
│  │  └─eck-operator-crds
│  │      └─templates
│  └─templates
├─kafka
│  ├─charts
│  │  ├─common
│  │  │  └─templates
│  │  │      └─validations
│  │  └─zookeeper
│  │      ├─charts
│  │      │  └─common
│  │      │      └─templates
│  │      │          └─validations
│  │      └─templates
│  └─templates
├─mongodb-sharded
│  ├─charts
│  │  └─common
│  │      └─templates
│  │          └─validations
│  └─templates
│      ├─config-server
│      ├─mongos
│      └─shard
└─redis-cluster
    ├─charts
    │  └─common
    │      └─templates
    │          └─validations
    ├─img
    └─templates

3. 템플릿 체크

  • Helm template 명령을 사용하여 렌더링이 잘되어 매니페스트가 생성되는지 확인한다. (부모 차트에서 실행!)
  • test.yaml 파일을 확인해보니 13000줄 가량되었다. 
helm template -f .\values.yaml . > test.yaml

4. 밸류 추가하기

  • 노드 수같은 것을 조정이 필요하여 메인차트 Values 파일을 수정하였다.
  • 예시중 하나이므로 필요한것은 추가하면 된다.
  • 차트 이름 밑에 서브차트의 밸류를 써주면 덮어쓰기가 된다.
  • 음.. 서브 차트에서 cluster.nodes 라면 메인차트에선 redis-cluster.cluster.nodes 라고 생각하면 될것같다.
Values.yaml 파일 수정.
~~~ 파일 윗내용 생략 ~~~
kafka:
  replicaCount: 2
redis-cluster:
  cluster:
    nodes: 3

5. 템플릿 체크

  • 밸류를 추가하고 다시 helm template 명령으로 파일을 생성하고 replicas가 원하는대로 맞추어졌는지 확인했다.
  • 원하는대로 적용되었다.
# Source: main/charts/redis-cluster/templates/redis-statefulset.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: release-name-redis-cluster
  namespace: "default"
  labels:
    app.kubernetes.io/name: redis-cluster
    helm.sh/chart: redis-cluster-8.3.12
    app.kubernetes.io/instance: release-name
    app.kubernetes.io/managed-by: Helm
spec:
  updateStrategy:
    rollingUpdate:
      partition: 0
    type: RollingUpdate
  selector:
    matchLabels:
      app.kubernetes.io/name: redis-cluster
      app.kubernetes.io/instance: release-name
  replicas: 3
  -------------------------------------------------------------------
  # Source: main/charts/kafka/templates/statefulset.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: release-name-kafka
  namespace: "default"
  labels:
    app.kubernetes.io/name: kafka
    helm.sh/chart: kafka-21.4.0
    app.kubernetes.io/instance: release-name
    app.kubernetes.io/managed-by: Helm
    app.kubernetes.io/component: kafka
spec:
  podManagementPolicy: Parallel
  replicas: 2

6. Subchart 비활성화

main/Chart.yaml 수정
==============================================
apiVersion: v2
name: main
description: A Helm chart for Kubernetes

type: application

version: 0.1.0

appVersion: "1.16.0"

~~~ 추가한 내용 ~~~
dependencies:
- condition: redis-cluster.enabled
  name: redis-cluster
- condition: mongodb-sharded.enabled
  name: mongodb-sharded
- condition: kafka.enabled
  name: kafka
- condition: eck-operator.enabled
  name: eck-operator
maintainers:
  - name: uyjang
  • 원하지 않는 차트를 비활성화 하기 위해서 4번의 Values 파일에서 추가로 수정하였다.
kafka:
  enabled: true
  replicaCount: 2
  
redis-cluster:
  enabled: true
  cluster:
    nodes: 3

mongodb-sharded:
  enabled: false

eck-operator:
  enabled: true
  • mongoDB가 렌더링이 안되는지 확인하였다.
  • Helm template 명령어를 사용해서 test.yaml결과를 생성하였고 확인하였다.

없다!!

7. 끝

  • 메인 차트를 마저 완성시켜야 겠다.. 집에 가야되니까....
  • 모두 행복 Helming!

썸네일