Dev./Kubernetes & Helm

Helm: Apply to simple code

Ivan'show 2023. 10. 6.
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
반응형

댓글