나이는 지구가 태양을 도는 횟수일 뿐이다.
[Helm]Subchart에 오픈소스 chart 추가하기 본문
앱의 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 비활성화
- 생각해보니 오픈소스 차트들엔 서브차트를 비활성화 활성화 할수있도록 되어있었다.
- 오픈소스들의 Chart.yaml을 보니 dependencies의 condition으로 하는것같아서 공식문서를 찾아보았다.
- 참조: https://helm.sh/docs/topics/charts/#tags-and-condition-fields-in-dependencies
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!
'IT' 카테고리의 다른 글
[EKS] 클러스터에 대한 IAM 보안 엑세스 (0) | 2023.04.12 |
---|---|
[K8spacket] 쿠버네티스 패킷 트래픽 시각화 (0) | 2023.04.04 |
GKE에서 ECR 이미지 사용하기 (0) | 2023.02.16 |
AWX로 앤서블 사용하기 (0) | 2023.01.30 |
K8s 모니터링 하기 [prometheus,grafana] (0) | 2023.01.16 |