728x90
반응형
Apply to Simple code
이미지를 불러와 차트에 적용시켜보자.
helm create simple-web
# templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ .Release.Name }}
labels:
{{- include "simple-web.labels" . | nindent 4 }}
spec:
minReadySeconds: 10
replicas: {{ .Values.replicas }}
selector:
matchLabels:
{{- include "simple-web.selectorLabels" . | nindent 6 }}
template:
metadata:
labels:
{{- include "simple-web.selectorLabels" . | nindent 8 }}
spec:
containers:
- name: {{ .Release.Name }}
image: {{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}
imagePullPolicy: {{ .Values.image.imagePullPolicy }}
ports:
- containerPort: 8000
readinessProbe:
httpGet:
path: /
port: 8000
initialDelaySeconds: 0
periodSeconds: 1
# templates/_helpers.tpl
{{- define "simple-web.labels" -}}
{{ include "simple-web.selectorLabels" . }}
app.kubernetes.io/version: "{{ .Values.image.tag | default .Chart.AppVersion }}"
app.kubernetes.io/managed-by: helm
{{- end -}}
{{- define "simple-web.selectorLabels" -}}
app.kubernetes.io/name: {{ .Chart.Name }}
release: {{ .Release.Name }}
{{- end -}}
# templates/service.yaml
apiVersion: v1
kind: Service
metadata:
name: {{ .Release.Name }}
labels:
{{- include "simple-web.labels" . | nindent 4 }}
spec:
type: {{ .Values.service.type }}
selector:
{{- include "simple-web.selectorLabels" . | nindent 4 }}
ports:
- port: 80
targetPort: 8000
# values.yaml
image:
repository: ${image_registry}
tag: ""
imagePullPolicy: Always
replicas: 4
service:
type: LoadBalancer
# Chart.yaml
apiVersion: v2
name: simple-web
description: A Helm chart for Kubernetes
type: application
version: 0.1.0
appVersion: v4
helm install simple ./simple-web/
#
kimminhyeok@Ivans-Mac k8s % helm install simple ./simple-web
NAME: simple
LAST DEPLOYED: Thu Sep 14 13:37:32 2023
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
Rollback test
helm upgrade simple ./simple-web/
#
kimminhyeok@Ivans-Mac k8s % helm upgrade simple ./simple-web
Release "simple" has been upgraded. Happy Helming!
NAME: simple
LAST DEPLOYED: Thu Sep 14 14:14:12 2023
NAMESPACE: default
STATUS: deployed
REVISION: 7
TEST SUITE: None
helm install --debug --dry-run simple ./simple-web/
...
spec:
containers:
- name: simple
image: ${image_registry}:v3
imagePullPolicy: Always
ports:
- containerPort: 8000
readinessProbe:
httpGet:
...
# v3 로 업데이트 되는 것을 확인 !
rollback
helm rollback simple
#
kimminhyeok@Ivans-Mac k8s % helm rollback simple
Rollback was a success! Happy Helming!
rollback은 —debug 로 내용을 가져 올 수 없으니
k get deploy
k describe deploy simple
#
...
ame: simple
Namespace: default
CreationTimestamp: Thu, 14 Sep 2023 13:07:04 +0900
Labels: app.kubernetes.io/managed-by=Helm
app.kubernetes.io/name=simple-web
app.kubernetes.io/version=v2
코드 내용 부연 설명
{{- define "lion.db.fullname" -}}
{{- $name := .Chart.Name }}
{{- if contains $name .Release.Name }}
{{- printf "%s-%s" "db" .Release.Name | trunc 63 | trimSuffix "-" }}
{{- else }}
{{- printf "%s-%s-%s" "db" .Release.Name $name | trunc 63 | trimSuffix "-" }}
{{- end }}
{{- end }}
이 Helm 템플릿은 데이터베이스(DB)의 전체 이름을 생성하는 로직을 담고 있습니다. .Release.Name과 .Chart.Name을 이용하여 전체 이름을 생성하며, 문자열 길이는 63자로 제한합니다.
상세 설명
$name := .Chart.Name: .Chart.Name을 $name 변수에 할당합니다.
if contains $name .Release.Name: .Release.Name이 $name을 포함하고 있는지 확인합니다.
예: .Release.Name이 "lion-myapp"이고, $name이 "lion"이면 이 조건은 참입니다.
printf "%s-%s" "db" .Release.Name | trunc 63 | trimSuffix "-": 참이라면 "db"와 .Release.Name을 하이픈(-)으로 연결하고, 그 결과를 63자로 제한한 후 끝의 하이픈을 제거합니다.
예: "db-lion-myapp" → "db-lion-myapp" (63자 제한 후) → "db-lion-myapp" (끝의 하이픈 제거)
else: .Release.Name이 $name을 포함하고 있지 않다면,
printf "%s-%s-%s" "db" .Release.Name $name | trunc 63 | trimSuffix "-": "db", .Release.Name, $name을 하이픈으로 연결하고, 그 결과를 63자로 제한한 후 끝의 하이픈을 제거합니다.
예: "db-myapp-lion" → "db-myapp-lion" (63자 제한 후) → "db-myapp-lion" (끝의 하이픈 제거)
이렇게 해서 최종적으로 데이터베이스의 전체 이름이 생성됩니다.
.Chart.Name은 Chart.yaml 파일에서 정의된 차트의 이름입니다.
.Release.Name은 helm install 명령에서 지정한 릴리즈 이름입니다 (lion과 같이).
상세 설명
.Chart.Name: 이 값은 Chart.yaml 파일에 정의되어 있습니다. 이 파일은 Helm 차트의 메타데이터를 담고 있으며, 차트 이름, 버전, 설명 등을 포함합니다. 예를 들어, Chart.yaml 파일에 name: lion 이라고 되어 있으면 .Chart.Name은 lion이 됩니다.
.Release.Name: 이 값은 helm install 명령을 실행할 때 지정한 릴리즈의 이름입니다. 예를 들어, helm install lion ./lion/ 명령을 실행하면 .Release.Name은 lion이 됩니다.
따라서, helm install lion ./lion/ 명령을 실행하면 .Release.Name은 lion이고, Chart.yaml 파일에 name: lion이라고 정의되어 있다면 .Chart.Name도 lion이 됩니다.
728x90
반응형
'Dev. > Kubernetes & Helm' 카테고리의 다른 글
Kubernetes: 안전하게 업로드하기 by using Kubeseal (1) | 2023.10.14 |
---|---|
Helm: Apply Actual Application (0) | 2023.10.09 |
Helm: 차트 작성 (0) | 2023.10.05 |
Helm: 쿠버네티스를 관리하는 툴 (0) | 2023.10.04 |
Kubernetes: 배포 환경 구분 짓기 (0) | 2023.10.03 |
댓글