Membuat dan menginstal bagan Helm

Selesai

Bagan Helm memudahkan penyebaran aplikasi ke kluster Kubernetes apa pun. Anda menggunakan Helm untuk membuat template informasi penyebaran aplikasi Anda sebagai bagan Helm, yang kemudian Anda gunakan untuk menyebarkan aplikasi Anda.

Katakanlah tim pengembangan Anda sudah menyebarkan situs web penyimpanan hewan peliharaan perusahaan Anda ke kluster AKS Anda. Tim membuat tiga file untuk menyebarkan situs web:

  • Manifes penyebaran yang menjelaskan cara menginstal dan menjalankan aplikasi pada kluster,
  • Manifes layanan yang menjelaskan cara mengekspos situs web pada kluster, dan
  • Manifes ingress yang menjelaskan bagaimana lalu lintas dari luar kluster dirutekan ke aplikasi web.

Tim menyebarkan file-file ini ke masing-masing dari tiga lingkungan sebagai bagian dari siklus hidup pengembangan perangkat lunak. Masing-masing dari tiga file diperbarui dengan variabel dan nilai yang spesifik untuk lingkungan. Karena setiap file di-hardcode, pemeliharaan file ini rentan terhadap kesalahan.

Bagaimana cara Helm memproses bagan?

Klien Helm menerapkan mesin templat berbasis bahasa Go yang memilah semua file yang tersedia di folder bagan. Mesin templat membuat file manifes Kubernetes dengan menggabungkan template di folder templates/ bagan dengan nilai dari file Chart.yaml dan values.yaml.

A diagram shows a process parsing a Helm template file and values file to create and deploy an application to a Kubernetes cluster using manifest files.

Setelah file manifes tersedia, klien dapat menginstal, meningkatkan, dan menghapus aplikasi yang ditentukan dalam file manifes yang dihasilkan.

Cara menentukan file Chart.yaml

Chart.yaml adalah salah satu file yang diperlukan dalam definisi bagan Helm dan menyediakan informasi tentang bagan. Konten file terdiri dari tiga bidang yang diperlukan dan berbagai bidang opsional.

Tiga bidang yang diperlukan meliputi:

  • apiVersion: Versi API bagan yang akan digunakan. Anda mengatur versi ke v2 untuk bagan yang menggunakan Helm 3.
  • name: Nama bagan.
  • version: Nomor versi bagan, yang menggunakan versi semantik 2.0.0 dan mengikuti MAJOR.MINOR.PATCH notasi nomor versi.

Contoh berikut menunjukkan konten file dasar Chart.yaml :

apiVersion: v2
name: webapp
description: A Helm chart for Kubernetes

# A chart can be either an 'application' or a 'library' chart.
#
# Application charts are a collection of templates that can be packaged into versioned archives
# to be deployed.
#
# Library charts provide useful utilities or functions for the chart developer. They're included as
# a dependency of application charts to inject those utilities and functions into the rendering
# pipeline. Library charts do not define any templates and therefore, cannot be deployed.
type: application

# This is the chart version. This version number should be incremented each time you make changes
# to the chart and its templates, including the app version.
version: 0.1.0

# This is the version number of the application being deployed. This version number should be
# incremented each time you make changes to the application.
appVersion: 1.0.0

Perhatikan penggunaan type bidang dalam file contoh. Anda dapat membuat bagan untuk menginstal aplikasi atau pustaka. Jenis bagan default adalah application dan dapat diatur ke library untuk menentukan bagan akan menginstal pustaka.

Banyak bidang opsional tersedia untuk menyesuaikan proses penyebaran bagan. Misalnya, Anda dapat menggunakan dependencies bidang untuk menentukan persyaratan tambahan untuk bagan, seperti aplikasi web yang bergantung pada database.

Catatan

Cakupan terperinci dari semua bidang opsional berada di luar cakupan modul ini. Namun, tautan ke dokumentasi Helm tersedia di bagian ringkasan modul.

Cara menentukan templat bagan

Templat bagan Helm adalah file yang menjelaskan file manifes jenis penyebaran yang berbeda. Templat bagan ditulis dalam bahasa templat Go dan menyediakan fungsi templat untuk mengotomatiskan pembuatan file manifes objek Kubernetes.

File templat disimpan di templates/ folder bagan. Mesin templat memproses file-file ini untuk membuat manifes objek akhir.

Misalnya, tim pengembangan Anda menggunakan file manifes penyebaran berikut untuk menyebarkan komponen depan penyimpanan hewan peliharaan dari solusi:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: store-front
spec:
  replicas: {{ .Values.replicaCount }}
  selector:
    matchLabels:
      app: store-front
  template:
    metadata:
      labels:
        app: store-front
    spec:
      nodeSelector:
        "kubernetes.io/os": linux
      containers:
      - name: store-front
        image: {{ .Values.storeFront.image.repository }}:{{ .Values.storeFront.image.tag }}
        ports:
        - containerPort: 8080
          name: store-front
        env: 
        - name: VUE_APP_ORDER_SERVICE_URL
          value: "http://order-service:3000/"
        - name: VUE_APP_PRODUCT_SERVICE_URL
          value: "http://product-service:3002/"
        resources:
          requests:
            cpu: 1m
            memory: 200Mi
          limits:
            cpu: 1000m
            memory: 512Mi
        startupProbe:
          httpGet:
            path: /health
            port: 8080
          failureThreshold: 3
          initialDelaySeconds: 5
          periodSeconds: 5
        readinessProbe:
          httpGet:
            path: /health
            port: 8080
          failureThreshold: 3
          initialDelaySeconds: 3
          periodSeconds: 3
        livenessProbe:
          httpGet:
            path: /health
            port: 8080
          failureThreshold: 5
          initialDelaySeconds: 3
          periodSeconds: 3
---
apiVersion: v1
kind: Service
metadata:
  name: store-front
spec:
  type: {{ .Values.storeFront.serviceType }}
  ports:
  - port: 80
    targetPort: 8080
  selector:
    app: store-front

Perhatikan bagaimana lokasi gambar kontainer dikodekan secara permanen menggunakan sintaks.{{.Values.<property>}} Sintaksis ini memungkinkan Anda membuat tempat penampung untuk setiap nilai kustom.

Proses pembuatan bagan Helm secara manual memang membosankan. Cara mudah untuk membuat bagan Helm adalah dengan menggunakan perintah helm create untuk membuat bagan Helm baru. Anda kemudian menyesuaikan file yang dihasilkan otomatis agar sesuai dengan kebutuhan aplikasi Anda.

Cara menentukan file values.yaml

Gunakan nilai bagan untuk menyesuaikan konfigurasi bagan Helm. Nilai bagan dapat ditentukan atau disediakan oleh pengguna pada saat menyebarkan bagan.

Nilai yang telah ditentukan sebelumnya adalah nilai peka huruf besar/kecil yang telah ditentukan sebelumnya dalam konteks bagan Helm dan tidak dapat diubah oleh pengguna. Misalnya, Anda dapat menggunakan Release.Name untuk mereferensikan nama rilis atau Release.IsInstall untuk memeriksa apakah operasi saat ini adalah penginstalan.

Anda juga dapat menggunakan nilai yang telah ditentukan sebelumnya untuk mengekstrak data dari konten Chart.yaml. Misalnya, jika Anda ingin memeriksa versi bagan, Anda akan mereferensikan Chart.Version. Perlu diingat bahwa Anda hanya bisa mereferensikan bidang umum. Anda dapat menganggap nilai yang sudah ditentukan sebelumnya sebagai konstanta untuk digunakan dalam templat yang Anda buat.

Sintaks untuk menyertakan nama nilai dalam file templat melibatkan penutupan nama nilai dalam kurung kurawal ganda, misalnya, {{.Release.Name}}. Perhatikan penggunaan titik di depan nama nilai. Ketika Anda menggunakan titik dengan cara ini, periode berfungsi sebagai operator pencarian dan menunjukkan lingkup variabel saat ini.

Misalnya, cuplikan YAML berikut berisi kamus yang ditentukan dalam file nilai:

object:
  key: value

Untuk mengakses nilai dalam templat, Anda bisa menggunakan sintaksis berikut:

{{ .Values.object.key }}

Nilai yang disediakan memungkinkan Anda memproses nilai arbitrer dalam templat bagan. File values.yaml menetapkan nilai ini.

Dalam contoh, tim pengembangan memungkinkan nilai yang dapat dikonfigurasi berikut:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: store-front
spec:
  replicas: {{ .Values.replicaCount }}
  ...
      containers:
      - name: store-front
        image: {{ .Values.storeFront.image.repository }}:{{ .Values.storeFront.image.tag }}
        ports:
  ...
---
apiVersion: v1
kind: Service
metadata:
  name: store-front
spec:
  type: {{ .Values.storeFront.serviceType }}
  ...

Berikut adalah contoh values.yaml file:

...
replicaCount: 1
...
storeFront:
  image:
    repository: "ghcr.io/azure-samples/aks-store-demo/store-front"
    tag: "latest"
  serviceType: LoadBalancer
...

Setelah mesin templat menerapkan nilai, hasil akhir akan terlihat seperti contoh ini:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: store-front
spec:
  replicas: 1
  ...
      containers:
      - name: store-front
        image: ghcr.io/azure-samples/aks-store-demo/store-front:latest
        ports:
---
apiVersion: v1
kind: Service
metadata:
  name: store-front
spec:
  type: LoadBalancer
  ...

Cara menggunakan repositori Helm

Repositori Helm adalah server HTTP khusus yang menyimpan informasi di bagan Helm. Anda mengonfigurasi repositori Helm dengan klien Helm untuk menginstal bagan dari repositori menggunakan perintah helm repo add.

Misalnya, Anda dapat menambahkan repositori Helm Marketplace Azure ke klien Helm lokal Anda dengan menjalankan perintah berikut:

helm repo add azure-marketplace https://marketplace.azurecr.io/helm/v1/repo

Informasi tentang bagan yang tersedia di repositori di-cache pada host klien. Anda perlu memperbarui cache secara berkala untuk mengambil informasi terbaru repositori menggunakan helm repo update perintah .

Perintah ini helm search repo memungkinkan Anda mencari bagan di semua repositori Helm yang ditambahkan secara lokal. Anda dapat menjalankan perintah helm search repo dengan sendirinya untuk mengembalikan daftar semua bagan Helm yang diketahui untuk setiap repositori yang ditambahkan. Hasilnya mencantumkan nama, versi, dan versi aplikasi bagan yang disebarkan oleh bagan, seperti yang ditunjukkan dalam contoh output berikut:

NAME                               CHART VERSION   APP VERSION   DESCRIPTION
azure-marketplace/airflow          11.0.8          2.1.4         Apache Airflow is a platform to programmaticall...
azure-marketplace/apache           8.8.3           2.4.50        Chart for Apache HTTP Server
azure-marketplace/aspnet-core      1.3.18          3.1.19        ASP.NET Core is an open-source framework create...
azure-marketplace/bitnami-common   0.0.7           0.0.7         Chart with custom tempaltes used in Bitnami cha...
azure-marketplace/cassandra        8.0.5           4.0.1         Apache Cassandra is a free and open-source dist...

Anda dapat mencari bagan tertentu dengan menambahkan istilah pencarian ke perintah helm search repo. Misalnya, jika Anda mencari bagan berbasis ASP.NET, Anda bisa menggunakan perintah berikut:

helm search repo aspnet

Dalam contoh ini, klien lokal memiliki dua repositori yang terdaftar dan mengembalikan hasil dari masing-masing, seperti yang ditunjukkan dalam contoh output berikut:

NAME                            CHART VERSION   APP VERSION   DESCRIPTION                                       
azure-marketplace/aspnet-core   1.3.18          3.1.19        ASP.NET Core is an open-source framework create...
bitnami/aspnet-core             1.3.18          3.1.19        ASP.NET Core is an open-source framework create...

Cara menguji bagan Helm

Helm menyediakan opsi bagi Anda untuk menghasilkan file manifes yang dibuat mesin templat dari bagan. Fitur ini memungkinkan Anda menguji bagan sebelum rilis dengan menggabungkan dua parameter tambahan: --dry-run dan debug. Parameter --dry-run memastikan bahwa penginstalan disimulasikan, dan --debug parameter memungkinkan output verbose.

helm install --debug --dry-run my-release ./chart-name

Perintah ini mencantumkan informasi tentang nilai yang digunakan dan semua file yang dihasilkan. Anda mungkin harus menggulir untuk melihat semua output yang dihasilkan.

Cara menginstal bagan Helm

Gunakan perintah helm install untuk menginstal bagan. Anda dapat menginstal bagan Helm dari salah satu lokasi berikut:

  • Folder bagan
  • .tgz Bagan arsip tar kemasan
  • Repositori Helm

Namun, parameter yang dibutuhkan berbeda tergantung pada lokasi bagan. Dalam semua kasus, install perintah memerlukan nama bagan yang ingin Anda instal dan nama untuk rilis yang dibuat instalasi.

Anda dapat menginstal bagan lokal menggunakan folder file bagan yang tidak dikemas atau arsip tar yang dikemas .tgz . Untuk menginstal bagan, perintah mereferensikan helm sistem file lokal untuk lokasi bagan. Berikut adalah contoh perintah instal yang akan menyebarkan rilis bagan yang dibongkar:

helm install my-release ./chart-name

Dalam contoh sebelumnya, my-release parameter adalah nama rilis dan ./chart-name parameter adalah nama paket bagan yang tidak dikemas.

Bagan yang dipaketkan diinstal dengan mereferensikan nama file bagan yang dipaketkan. Contoh berikut menunjukkan sintaks untuk aplikasi yang sama yang sekarang dikemas sebagai arsip tar:

helm install my-release ./chart-name.tgz

Saat menginstal bagan dari repositori Helm, Anda menggunakan referensi bagan sebagai nama bagan. Referensi bagan mencakup dua parameter, nama repositori dan nama bagan, seperti yang ditunjukkan dalam contoh berikut:

helm install my-release repository-name/chart-name

Dalam contoh, repository-name/chart-name parameter berisi referensi repositori, repository-name, dan nama bagan, chart-name.