Hola, jadi pada tutorial ini, saya akan mencoba menggunakan template Helm Chart untuk me-manage Deployment dan Service tanpa lansung menggunakan resource template kubernetes.
Karena penggunaan helm chart ini membantu kita menghemat waktu untuk menuliskan script untuk membuat/mengupdate resources.
Lets begin!
- Kluster Kubernetes
- Helm Chart (V3++) (Boleh diinstall di local atau di server. Disarankan di local saja)
- Membuat Chart Baru
- Membuat Helpers
- Membuat Namespace
- Membuat Deployment
- Membuat Service
- Membuat Ingress
- Install Chart ke Kluster
- Upgrade Versi
- Buat direktori baru di local, misalnya
mkdir -p helm-chart-example
- Masuk ke
cd helm-chart-example
- Jalankan perintah:
helm create <nama-chart-kamu>
, misalnyahelm create nginx-example
- CATATAN: nama chart harus menggunakan huruf kecil dan tidak boleh ada spasi. Gunakan "-" untuk memisah.
- Masuk ke
cd <nama-chart-kamu>
- Hapus seluruh file yang ada di dalam folder
./templates
:rm -rf ./templates/*
- Hapus isi dari
./values.yaml
, dan ubah menjadi:
# Deployment
deployment:
replicas: 2
# Containers
images:
name: nginx
ports:
- 80
# Service
service:
ports:
- 80
# Ingress
ingress:
hostname: "app-1.k8s.local"
path: "/"
port: 80
- Update isi dari
./Chart.yaml
sesuai kebutuhan
- Berikut adalah sample helpers
- Buat file
_helpers.tpl
pada template./templates/_helpers.tpl
- Copy paste:
{{/* Labels */}}
{{- define "labels" }}
app_name: {{ .Charts.Label }}
{{- end }}
- Berikut adalah sample namespace
- Buat file
namespace.yaml
pada template./templates/namespace.yaml
- Copy paste:
apiVersion: v1
kind: Namespace
metadata:
name: {{ .Values.namespace }}
- Simpan
- Berikut adalah sample deployment
- Buat file
deployment.yaml
pada template./templates/deployment.yaml
- Copy paste:
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ .Chart.Name }}-deployment
labels:
{{- include "labels" . | indent 4 }}
spec:
replicas: {{ .Values.deployment.replicas }}
selector:
matchLabels:
{{- include "labels" . | indent 6 }}
template:
metadata:
labels:
{{- include "labels" . | indent 8 }}
spec:
containers:
- name: {{ .Chart.Name }}
image: {{ .Values.deployment.images.name }}
ports:
{{- range .Values.deployment.ports }}
- containerPort: {{ . }}
{{- end }}
- Berikut adalah sample service
- Buat file
service.yaml
pada template./templates/service.yaml
- Copy paste:
apiVersion: v1
kind: Service
metadata:
name: {{ .Chart.Name }}-service
labels:
{{- include "labels" . | indent 4 }}
spec:
selector:
{{- include "labels" . | indent 4 }}
ports:
{{- range .Values.service.ports }}
- name: port-{{ . }}
protocol: TCP
port: {{ . }}
{{- end }}
- Buat file
ingress.yaml
pada template./templates/ingress.yaml
- Copy paste:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: {{ .Chart.Name }}-ingress
annotations:
cert-manager.io/cluster-issuer: "selfsigned-cluster-issuer"
spec:
ingressClassName: nginx
tls:
- hosts:
- {{ .Values.ingress.hostname | quote }}
secretName: webserver-secret
rules:
- host: {{ .Values.ingress.hostname | quote }}
http:
paths:
- pathType: Prefix
path: {{ .Values.ingress.path | quote }}
backend:
service:
name: {{ .Chart.Name }}-service
port:
number: {{ .Values.ingress.port }}
- Setelah semua selesai, pastikan kembali dengan men-debug:
helm install <nama-release> <nama-chart> --debug --dry-run [...opsi]
- Contoh:
helm install nginx-production ./nginx-example --debug --dry-run
- Jika tidak ada error, maka kamu dapat menjalankan perintah:
helm install nginx-production ./nginx-example
- Jika ada perubahan, maka kamu harus menaikkan versi
version
danappVersion
pada file./Chart.yaml
- Selanjutnya, jalankan:
helm upgrade nginx-production ./nginx-example
Dokumentasi ini merupakan tahapan awal/basic untuk menggunakan helm chart. Untuk penggunaan helm chart lebih lanjut, silahkan klik link ini