쿠버네티스의 다양한 리소스로 구성된 패키지를 관리하는 쿠버네티스 패키지 매니저이다. ( yum, apt와 같음)
helm 차트를 사용하면 복잡한 쿠버네티스 애플리케이션을 쉽고 간단하게 정의할 수 있고 업그레이드가 가능하다.
기존 파일과 내용을 유지한 채 업데이트 가능
원격 repository 등을 통해 애플리케이션을 쉽게 공유할 수 있고 형상관리가 가능하다.
Rollbacks기능을 지원 하므로 간단하게 이전의 버전으로 롤백이 가능하다.
Helm chart 생성 가이드
$ 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 create [name]
helm 뼈대가 완성되었으므로 작성을 시작하면 된다!
helm-chart 작성 시 imagepullsecrets에서 syntax 오류가 발생하여 기록 중
imagepullsecrets - official docs
imageCredentials:
registry: quay.io
username: someone
password: sillyness
---
helper template
{{- define "imagePullSecret" }}
{{- with .Values.imageCredentials }}
{{- printf "{\"auths\":{\"%s\":{\"username\":\"%s\",\"password\":\"%s\",\"email\":\"%s\",\"auth\":\"%s\"}}}" .registry .username .password .email (printf "%s:%s" .username .password | b64enc) | b64enc }}
{{- end }}
{{- end }}
---
apiVersion: v1
kind: Secret
metadata:
name: myregistrykey
type: kubernetes.io/dockerconfigjson
data:
.dockerconfigjson: {{ template "imagePullSecret" . }}
이 방법 말고 다른 방법을 사용하여 해결 했습니다.
helm-chart
template/deployment.yaml
spec:
{{- with .Values.imagePullSecrets }}
imagePullSecrets:
{{- toYaml . | nindent 8 }}
{{- end }}
values.yaml
imagePullSecrets:
- name: ecr-secrets
간단한 방법으로 imagepullsecrets 오류를 해결했습니다. !
추후에 helm syntax에 대해서 자세하게 정리
비교하기 쉽게 values.yaml과 template에 있는 yaml들을 비교하면서 설명
values.yaml
#replicaCount: 1
image:
repository: [private-repository]
pullPolicy: IfNotPresent
tag: ["tag-num"]
imagePullSecrets:
- name : [private-repository-secret]
containers:
resources:
limits:
cpu: 100m
memory: 200Mi
requests:
cpu: 100m
memory: 200Mi
service:
type: LoadBalancer
ip: ""
port: 8080
autoscaling:
enabled: true
minReplicas: 1
maxReplicas: 3
targetCPUUtilizationPercentage: 50
targetMemoryUtilizationPercentage: 50
nodeSelector: []
tolerations: []
affinity: {}
template → deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ .Release.Name }}
labels:
spec:
selector:
matchLabels:
app: {{ .Release.Name }}
template:
metadata:
labels:
app: {{ .Release.Name }}
spec:
containers:
- name: {{ .Release.Name }}
image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
imagePullPolicy: {{ .Values.image.pullPolicy }}
ports:
- name: {{ .Release.Name }}
containerPort: 8080
resources:
limits:
memory: {{ .Values.containers.resources.limits.memory }}
cpu: {{ .Values.containers.resources.limits.cpu }}
requests:
memory: {{ .Values.containers.resources.requests.memory }}
cpu: {{ .Values.containers.resources.requests.cpu }}
예를 들어서 설명을 하면
resources:
limits:
memory: {{ .Values.containers.resources.limits.memory }}
cpu: {{ .Values.containers.resources.limits.cpu }}
requests:
memory: {{ .Values.containers.resources.requests.memory }}
cpu: {{ .Values.containers.resources.requests.cpu }}
memory 부분을 보면 “ {{ .Values.containers.resources.limits.memory }} “
따라서 쉽게 생각하면 ‘ . ‘을 기준으로 values.yaml에 하위리소스 라고 보면 됩니다.
들여쓰기에 항상 주의해 주세요.
{{- if .Values.autoscaling.enabled }} #만약 values.yaml에서 autoscaling 기능이 enable되어있으면 true, 아니면 false
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
name: {{ .Release.Name }}
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: {{ .Release.Name }}
minReplicas: {{ .Values.autoscaling.minReplicas }}
maxReplicas: {{ .Values.autoscaling.maxReplicas }}
metrics:
{{- if .Values.autoscaling.targetCPUUtilizationPercentage }}
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: {{ .Values.autoscaling.targetCPUUtilizationPercentage }}
{{- end }}
{{- if .Values.autoscaling.targetMemoryUtilizationPercentage }}
- type: Resource
resource:
name: memory
target:
type: Utilization
averageUtilization: {{ .Values.autoscaling.targetMemoryUtilizationPercentage }}
{{- end }}
{{- end }} # if 문 eof
helm-chart with, toYaml, nindent 설정
{{- with .Values.nodeSelector }}
nodeSelector:
{{- toYaml . | nindent 8 }}
{{- end }}
{{- with .Values.affinity }}
affinity:
{{- toYaml . | nindent 8 }}
{{- end }}
{{- with .Values.tolerations }}
tolerations:
{{- toYaml . | nindent 8 }}
{{- end }}
이 외에도 많은 문법이 있지만