Menghapus rilis Helm

Selesai

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.

A diagram shows how Helm deploys all subcharts as dependencies of the main chart to a Kubernetes cluster.

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.

A diagram shows how the Helm upgrade command creates a delta of all changed items in a Helm chart to upgrade a release and create a new release revision on a Kubernetes cluster.

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 ke linux-v2 dan nilai versi bagan ke 0.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.

Uji pengetahuan Anda

1.

Katakanlah Anda memiliki solusi perangkat lunak dengan dua komponen penting: aplikasi web dan layanan yang memproses pesanan online. Kedua komponen adalah bagian dari alur pemrosesan pesanan online, tetapi tidak memiliki dependensi satu sama lain. Strategi mana yang paling sesuai dengan penyebaran kedua aplikasi ini menggunakan Helm?

2.

Katakanlah Anda memiliki solusi perangkat lunak yang memiliki situs web sebagai salah satu komponen pentingnya. Situs web adalah satu-satunya komponen yang tergantung pada layanan penembolokan. Strategi mana yang paling sesuai dengan penyebaran kedua aplikasi ini menggunakan Helm?