Menghapus rilis Helm
Cara menggunakan fungsi dalam templat Helm
Bahasa templat Helm menentukan fungsi yang Anda gunakan untuk mengubah nilai dari file values.yaml
. Sintaksis untuk fungsi mengikuti struktur {{ functionName arg1 arg2 ... }}. Mari kita lihat fungsi quote
sebagai contoh untuk melihat sintaksis ini digunakan.
Fungsi quote
membungkus nilai dalam tanda kutip untuk menunjukkan penggunaan string
. Katakanlah Anda menentukan file berikut values.yaml
:
apiVersion: v2
name: webapp
description: A Helm chart for Kubernetes
ingress:
enabled: true
Anda memutuskan ingin menggunakan nilai ingress.enabled
sebagai boolean saat menentukan apakah manifes ingress harus dihasilkan. Untuk menggunakan nilai enabled
sebagai boolean, Anda mereferensikan nilai menggunakan {{ .Values.ingress.enabled }}
.
Kemudian, Anda memutuskan untuk menampilkan bidang sebagai untai (karakter) dalam file templates/Notes.txt
. Karena aturan koersi jenis YAML dapat menyebabkan bug yang sulit ditemukan dalam templat, Anda memutuskan untuk mengikuti panduan dan menjadi eksplisit saat menyertakan string dalam templat Anda. Misalnya, enabled: false
tidak sama dengan enabled: "false"
.
Untuk menampilkan nilai sebagai untai string, gunakan {{ quote .Values.ingress.enabled }}
untuk mereferensikan nilai boolean sebagai string.
Cara menggunakan alur dalam templat Helm
Gunakan alur ketika lebih dari satu fungsi perlu berfungsi berdasarkan nilai. Alur memungkinkan Anda mengirim nilai, atau hasil fungsi, ke fungsi lain. Misalnya, Anda dapat regenerasi fungsi quote
di atas sebagai {{ .Values.ingress.enabled | quote }}
. Perhatikan bagaimana |
menunjukkan bahwa nilai mengirim ke fungsi quote
.
Berikut adalah contoh lain. Katakanlah Anda ingin mengonversi nilai menjadi huruf besar dan membungkusnya dalam tanda kutip. Anda dapat menulis pernyataan sebagai {{ .Values.ingress.enabled | upper | quote }}
. Perhatikan bagaimana nilai diproses oleh fungsi upper
dan kemudian fungsi quote
.
Bahasa templat mencakup lebih dari 60 fungsi yang memungkinkan Anda mengekspos, mencari, dan mengubah nilai dan objek dalam templat.
Cara menggunakan kontrol aliran kondisional dalam templat Helm
Kontrol alur kondisional memungkinkan Anda memutuskan struktur atau data yang disertakan dalam file manifes yang dihasilkan. Misalnya, Anda mungkin ingin menyertakan nilai yang berbeda berdasarkan target atau kontrol penyebaran jika file manifes dibuat.
if / else
Blok adalah struktur alur kontrol dan sesuai dengan tata letak berikut:
{{ if | pipeline | }}
# Do something
{{ else if | other pipeline | }}
# Do something else
{{ else }}
# Default case
{{ end }}
Katakanlah Anda memutuskan bahwa file manifes ingress untuk bagan hanya dibuat dalam kasus tertentu. Contoh berikut menunjukkan cara mencapainya menggunakan if
pernyataan:
{{ if .Values.ingress.enabled }}
apiVersion: extensions/v1
kind: Ingress
metadata:
name: ...
labels:
...
annotations:
...
spec:
rules:
...
{{ end }}
Ingatlah bahwa Anda dapat menggunakan tempat penampung untuk mengisi metadata dalam templat. File templat dipilah dan dievaluasi secara berurutan oleh bahasa templat dari atas ke bawah. Dalam contoh sebelumnya, mesin templat hanya menghasilkan konten file manifes jika .Values.ingress.enabled
nilainya adalah true
.
Saat mesin templat memproses pernyataan, mesin templat menghapus konten yang dideklarasikan di dalam {{ }}
sintaks dan meninggalkan spasi kosong yang tersisa. Sintaksis ini menyebabkan mesin template menyertakan garis baru untuk baris pernyataan if
. Jika Anda membiarkan konten file sebelumnya apa adanya, Anda akan melihat baris kosong di YAML Anda, dan file manifes ingress dibuat.
YAML memberi arti pada spasi kosong. Itulah sebabnya tab, spasi, dan karakter baris baru dianggap penting. Untuk memperbaiki masalah spasi kosong yang tidak diinginkan, Anda bisa meregenerasi file sebagai berikut:
{{- if .Values.ingress.enabled -}}
apiVersion: extensions/v1
kind: Ingress
metadata:
name: ...
labels:
...
annotations:
...
spec:
rules:
...
{{- end }}
Perhatikan penggunaan karakter -
sebagai bagian dari awal {{-
dan urutan akhir pernyataan -}}
. Karakter -
memerintahkan pemilah untuk menghapus karakter spasi kosong. {{-
menghapus spasi kosong di awal baris dan -}}
di akhir baris, termasuk karakter garis baru.
Cara melakukan iterasi melalui kumpulan nilai dalam templat Helm
YAML memungkinkan Anda menentukan koleksi item dan menggunakan item individual sebagai nilai dalam templat Anda. Mengakses item dalam koleksi dimungkinkan menggunakan pengindeks. Namun, bahasa templat Helm mendukung iterasi koleksi nilai menggunakan operator range
.
Katakanlah Anda menentukan daftar nilai dalam file Anda values.yaml
untuk menunjukkan host ingress tambahan. Berikut adalah contoh nilai:
ingress:
enabled: true
extraHosts:
- name: host1.local
path: /
- name: host2.local
path: /
- name: host3.local
path: /
Gunakan operator rentang untuk memungkinkan mesin templat untuk iterasi melalui .Values.ingress.extraHosts
. Cuplikan kode berikut menunjukkan contoh ringkas menggunakan range
operator:
{{- if .Values.ingress.enabled -}}
apiVersion: extensions/v1
kind: Ingress
metadata:
...
spec:
rules:
...
{{- range .Values.ingress.extraHosts }}
- host: {{ .name }}
http:
paths:
- path: {{ .path }}
...
{{- end }}
...
{{- end }}
Cara mengontrol cakupan nilai dalam templat Helm
Ketika Anda memiliki nilai yang didefinisikan beberapa lapisan dalam, sintaks Anda bisa menjadi panjang dan rumit saat menyertakan nilai-nilai ini dalam templat. Tindakan with
memungkinkan Anda membatasi lingkup variabel dalam templat.
Ingatlah bahwa yang .
digunakan dalam templat Helm mereferensikan cakupan saat ini. Misalnya, .Values
memerintahkan mesin templat untuk menemukan objek Nilai dalam lingkup saat ini. Katakanlah Anda menggunakan values.yaml
file dari sebelumnya untuk membuat file manifes peta konfigurasi:
ingress:
enabled: true
extraHosts:
- name: host1.local
path: /
- name: host2.local
path: /
- name: host3.local
path: /
Sebagai ganti mengakses nilai jalur setiap item menggunakan {{ .Values.ingress.extraHosts.path }}
, Anda dapat menggunakan tindakan with
. Cuplikan kode berikut menunjukkan contoh menggunakan range
operator untuk menghasilkan file manifes peta konfigurasi:
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ .Release.Name }}-configmap
data:
{{- with .Values.ingress.extraHosts }}
hostname: {{ .name }}
path: {{ .path }}
{{ end }}
{{- with .Values.ingress.extraHosts }}
membatasi lingkup nilai ke array .Values.ingress.extraHosts
.
Tindakan with
membatasi cakupan. Anda tidak dapat mengakses objek lain dari cakupan induk. Katakanlah Anda juga ingin mengakses {{ .Release.Name }}
bagan di with
blok kode. Untuk mengakses objek induk, Anda perlu menunjukkan lingkup akar dengan menggunakan karakter $
atau meregenerasi kode Anda. Berikut adalah kode yang diperbarui untuk menunjukkan cara menyertakan objek induk menggunakan $
karakter :
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ .Release.Name }}-configmap
data:
{{- with .Values.ingress.extraHosts }}
hostname: {{ .name }}
path: {{ .path }}
release: {{ $.Release.Name}}
{{ end }}
Catatan
Ada beberapa konstruksi yang tersedia dalam bahasa template Helm ke mengontrol alur kontrol. Pelajaran ringkasan modul ini menyertakan bagian dengan tautan ke dokumentasi Helm untuk mempelajari selengkapnya.
Cara Helm menentukan dependensi bagan
Bagan memungkinkan deklarasi dependensi mendukung aplikasi utama dan membentuk bagian dari rilis yang diinstal.
Anda dapat membuat sub-bagan menggunakan perintah helm create
, menentukan lokasi bagan baru di folder /charts
, atau menggunakan perintah helm dependency
. Ingatlah bahwa /charts
folder mungkin berisi sub-bagan yang disebarkan sebagai bagian dari rilis bagan utama.
Perintah helm dependency
ini memungkinkan Anda mengelola dependensi yang disertakan dari repositori Helm. Perintah ini menggunakan metadata yang ditentukan di bagian file nilai dependencies
bagan Anda. Anda menentukan nama, nomor versi, dan repositori tempat menginstal sub-bagan. Berikut adalah ekstrak values.yaml
file yang memiliki bagan MongoDB yang tercantum sebagai dependensi:
apiVersion: v2
name: my-app
description: A Helm chart for Kubernetes
...
dependencies:
- name: mongodb
version: 10.27.2
repository: https://marketplace.azurecr.io/helm/v1/repo
Setelah metadata dependensi ditentukan, Anda menjalankan perintah helm dependency build
untuk mengambil bagan paket tar. Bagan membangun perintah mengunduh bagan ke dalam folder charts/
.
helm dependency build ./app-chart
Sub-bagan dikelola secara terpisah dari bagan utama dan mungkin memerlukan pembaruan saat rilis baru tersedia. Perintah untuk memperbarui sub-bagan adalah helm dependency update
. Perintah ini mengambil versi baru subchart saat menghapus paket yang sudah kedaluarsa.
helm dependency update ./app-chart
Perlu diingat bahwa dependensi bagan tidak terbatas pada aplikasi lain. Anda dapat memutuskan untuk menggunakan kembali logika templat di seluruh bagan Anda dan membuat dependensi khusus untuk mengelola logika ini sebagai dependensi bagan. Anda akan mendapatkan contoh strategi ini di latihan berikutnya.
Cara meningkatkan rilis Helm
Helm memungkinkan peningkatan rilis yang ada sebagai delta dari semua perubahan yang diterapkan untuk bagan dan dependensinya.
Misalnya, tim pengembangan contoh webapp
dalam unit ini membuat perubahan kode yang hanya memengaruhi fungsionalitas situs web. Tim membuat pembaruan berikut pada Chart.yaml
file untuk mencerminkan versi baru aplikasi:
- Memperbarui gambar kontainer aplikasi web dan menandai gambar seperti
webapp: linux-v2
saat mendorong gambar ke registri kontainer. dockerTag
Memperbarui nilai kelinux-v2
dan nilai versi bagan ke0.2.0
dalam file nilai bagan.
Berikut adalah contoh file yang diperbarui values.yaml
:
apiVersion: v2
name: my-app
description: A Helm chart for Kubernetes
type: application
version: 0.2.0
appVersion: 1.0.0
registry: "my-acr-registry.azurecr.io"
dockerTag: "linux-v2"
pullPolicy: "Always"
Alih-alih menghapus instalan rilis saat ini, Anda menggunakan helm upgrade
perintah untuk meningkatkan rilis Helm yang ada.
helm upgrade my-app ./app-chart
Ingatlah bahwa Helm menghasilkan delta perubahan yang dibuat pada bagan Helm saat Anda meningkatkan rilis. Dengan demikian, peningkatan Helm hanya meningkatkan komponen yang diidentifikasi dalam delta. Dalam contoh, hanya situs web yang disebarkan kembali.
Setelah peningkatan selesai, Anda dapat meninjau riwayat penyebaran rilis menggunakan helm history
perintah dengan nama rilis.
helm history my-app
Perintah riwayat mengembalikan beberapa bidang yang menjelaskan rilis, seperti yang ditunjukkan dalam contoh output berikut:
REVISION UPDATED STATUS CHART APP VERSION DESCRIPTION
1 Mon Oct 11 17:25:33 2021 deployed aspnet-core-1.3.18 3.1.19 Install complete
Perhatikan bidang revision
dalam hasilnya. Helm melacak informasi rilis dari semua rilis yang dilakukan untuk bagan Helm. Saat Anda menginstal versi baru bagan Helm, jumlah revisi bertambah satu per satu, dan informasi rilis baru cocok dengan revisi tersebut.
Berikut adalah contoh perintah riwayat yang sama yang dijalankan setelah penginstalan versi baru aplikasi web:
REVISION UPDATED STATUS CHART APP VERSION DESCRIPTION
1 Mon Oct 11 17:25:33 2021 superseded aspnet-core-1.3.18 3.1.19 Install complete
2 Mon Oct 11 17:35:13 2021 deployed aspnet-core-1.3.18 3.1.19 Upgrade complete
Cara menggulung balik rilis Helm
Helm memungkinkan pemutaran kembali rilis Helm yang ada ke rilis yang diinstal sebelumnya. Ingat dari sebelumnya bahwa Helm melacak informasi rilis semua rilis bagan Helm.
Anda menggunakan perintah helm rollback
untuk kembali ke revisi rilis Helm tertentu. Perintah ini menggunakan dua parameter. Parameter pertama mengidentifikasi nama rilis, dan yang kedua mengidentifikasi nomor revisi rilis.
helm rollback my-app 2
Perintah helm rollback
mengembalikan versi rilis aplikasi ke revisi yang ditentukan dan memperbarui riwayat rilis aplikasi. Eksekusi lanjutan perintah helm history
menunjukkan nomor revisi aktif terbaru sebagai entri rilis terbaru.
Misalnya, tim pengembangan contoh webapp
dalam unit ini menemukan bug di aplikasi web pelacakan drone dan perlu kembali ke rilis sebelumnya. Alih-alih menghapus instalan rilis saat ini dan menginstal versi sebelumnya, mereka kembali ke rilis kerja.
helm rollback my-app 1
Setelah pemutaran kembali selesai, Anda dapat meninjau riwayat penyebaran menggunakan helm history
perintah .
REVISION UPDATED STATUS CHART APP VERSION DESCRIPTION
1 Mon Oct 11 17:25:33 2021 superseded aspnet-core-1.3.18 3.1.19 Install complete
2 Mon Oct 11 17:35:13 2021 superseded aspnet-core-1.3.18 3.1.19 Rolled back to 1
3 Mon Oct 11 17:38:13 2021 deployed aspnet-core-1.3.18 3.1.19 Upgrade complete
Perhatikan bagaimana bidang deskripsi menunjukkan nomor revisi pemutaran kembali untuk memudahkan Anda melacak perubahan.