Memasang aplikasi yang ada dengan Helm di Azure Kubernetes Service (AKS)

Helm adalah alat pengemasan sumber terbuka yang membantu Anda memasang dan mengelola siklus hidup aplikasi Kube. Mirip dengan manajer paket Linux, seperti APT dan Yum, Anda dapat menggunakan Helm untuk mengelola bagan Kubernetes, yang merupakan paket sumber daya Kube yang telah dikonfigurasi sebelumnya.

Artikel ini menunjukkan cara mengonfigurasi dan menggunakan Helm di kluster Kubernetes pada Azure Kubernetes Service (AKS).

Sebelum Anda mulai

  • Artikel ini mengasumsikan Anda memiliki kluster AKS yang sudah ada. Jika Anda memerlukan kluster AKS, buat kluster menggunakan Azure CLI, Azure PowerShell, atau portal Azure.
  • Kluster AKS Anda harus memiliki ACR terintegrasi. Untuk detail tentang membuat kluster AKS dengan ACR terintegrasi, lihat Mengautentikasi dengan Azure Container Registry dari Azure Kubernetes Service.
  • Anda juga memerlukan Helm CLI yang terpasang, yaitu klien yang berjalan pada sistem pengembangan Anda. Ini memungkinkan Anda untuk memulai, menghentikan, dan mengelola aplikasi dengan Helm. Jika Anda menggunakan Azure Cloud Shell, Helm CLI sudah terpasang. Untuk petunjuk penginstalan di platform lokal Anda, lihat Memasang Helm.

Penting

Helm dimaksudkan untuk berjalan pada simpul Linux. Jika Anda memiliki simpul Windows Server di kluster Anda, Anda harus memastikan bahwa pod Helm hanya dijadwalkan untuk berjalan pada simpul Linux. Anda juga perlu memastikan bahwa setiap bagan Helm yang Anda pasang juga dijadwalkan untuk berjalan pada simpul yang benar. Perintah dalam artikel ini menggunakan node-selectors untuk memastikan pod dijadwalkan ke simpul yang benar, tetapi tidak semua bagan Helm dapat mengekspos pemilih simpul. Anda juga dapat mempertimbangkan untuk menggunakan opsi lain pada kluster Anda, seperti taint.

Memverifikasi versi Helm Anda

  • helm version Gunakan perintah untuk memverifikasi bahwa Anda telah menginstal Helm 3.

    helm version
    

    Contoh output berikut menunjukkan Helm versi 3.0.0 terinstal:

    version.BuildInfo{Version:"v3.0.0", GitCommit:"e29ce2a54e96cd02ccfce88bee4f58bb6e2a28b6", GitTreeState:"clean", GoVersion:"go1.13.4"}
    

Memasang aplikasi dengan Helm v3

Menambahkan repositori Helm

  • Tambahkan repositori ingress-nginx menggunakan perintah repositori helm .

    helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
    

Menemukan bagan Helm

  1. Cari bagan Helm yang dibuat sebelumnya menggunakan perintah pencarian helm .

    helm search repo ingress-nginx
    

    Contoh output ringkas berikut ini memperlihatkan beberapa bagan Helm yang tersedia untuk digunakan:

    NAME                            CHART VERSION   APP VERSION     DESCRIPTION                                       
    ingress-nginx/ingress-nginx     4.7.0           1.8.0           Ingress controller for Kubernetes using NGINX a...
    
  2. Perbarui daftar bagan menggunakan perintah pembaruan repositori helm .

    helm repo update
    

    Contoh output berikut menunjukkan pembaruan repositori yang berhasil:

    Hang tight while we grab the latest from your chart repositories...
    ...Successfully got an update from the "ingress-nginx" chart repository
    Update Complete. ⎈ Happy Helming!⎈
    

Mengimpor gambar bagan Helm ke ACR Anda

Artikel ini menggunakan bagan Helm pengontrol ingress NGINX, yang bergantung pada tiga citra kontainer.

  • Gunakan az acr import untuk mengimpor gambar pengontrol ingress NGINX ke ACR Anda.

    REGISTRY_NAME=<REGISTRY_NAME>
    CONTROLLER_REGISTRY=registry.k8s.io
    CONTROLLER_IMAGE=ingress-nginx/controller
    CONTROLLER_TAG=v1.8.0
    PATCH_REGISTRY=registry.k8s.io
    PATCH_IMAGE=ingress-nginx/kube-webhook-certgen
    PATCH_TAG=v20230407
    DEFAULTBACKEND_REGISTRY=registry.k8s.io
    DEFAULTBACKEND_IMAGE=defaultbackend-amd64
    DEFAULTBACKEND_TAG=1.5
    
    az acr import --name $REGISTRY_NAME --source $CONTROLLER_REGISTRY/$CONTROLLER_IMAGE:$CONTROLLER_TAG --image $CONTROLLER_IMAGE:$CONTROLLER_TAG
    az acr import --name $REGISTRY_NAME --source $PATCH_REGISTRY/$PATCH_IMAGE:$PATCH_TAG --image $PATCH_IMAGE:$PATCH_TAG
    az acr import --name $REGISTRY_NAME --source $DEFAULTBACKEND_REGISTRY/$DEFAULTBACKEND_IMAGE:$DEFAULTBACKEND_TAG --image $DEFAULTBACKEND_IMAGE:$DEFAULTBACKEND_TAG
    

    Catatan

    Selain mengimpor citra kontainer ke Azure Container Registry Anda, Anda juga dapat mengimpor bagan Helm ke Azure Container Registry Anda. Untuk informasi selengkapnya, lihat Dorong dan tarik bagan Helm ke registri kontainer Azure.

Menjalankan bagan Helm

  1. Instal bagan Helm menggunakan perintah helm install dan tentukan nama rilis dan nama bagan yang akan diinstal.

    Tip

    Contoh berikut membuat namespace layanan Kube untuk sumber daya ingress bernama ingress-basic dan dimaksudkan untuk bekerja di dalam namespace layanan tersebut. Tentukan namespace layanan untuk lingkungan Anda sendiri jika diperlukan.

    ACR_URL=<REGISTRY_URL>
    
    # Create a namespace for your ingress resources
    kubectl create namespace ingress-basic
    
    # Use Helm to deploy an NGINX ingress controller
    helm install ingress-nginx ingress-nginx/ingress-nginx \
        --version 4.0.13 \
        --namespace ingress-basic \
        --set controller.replicaCount=2 \
        --set controller.nodeSelector."kubernetes\.io/os"=linux \
        --set controller.image.registry=$ACR_URL \
        --set controller.image.image=$CONTROLLER_IMAGE \
        --set controller.image.tag=$CONTROLLER_TAG \
        --set controller.image.digest="" \
        --set controller.admissionWebhooks.patch.nodeSelector."kubernetes\.io/os"=linux \
        --set controller.service.annotations."service\.beta\.kubernetes\.io/azure-load-balancer-health-probe-request-path"=/healthz \
        --set controller.admissionWebhooks.patch.image.registry=$ACR_URL \
        --set controller.admissionWebhooks.patch.image.image=$PATCH_IMAGE \
        --set controller.admissionWebhooks.patch.image.tag=$PATCH_TAG \
        --set defaultBackend.nodeSelector."kubernetes\.io/os"=linux \
        --set defaultBackend.image.registry=$ACR_URL \
        --set defaultBackend.image.image=$DEFAULTBACKEND_IMAGE \
        --set defaultBackend.image.tag=$DEFAULTBACKEND_TAG \
        --set defaultBackend.image.digest=""
    

    Contoh output ringkas berikut menunjukkan status penyebaran sumber daya Kube yang dibuat oleh bagan Helm:

    NAME: nginx-ingress
    LAST DEPLOYED: Wed Jul 28 11:35:29 2021
    NAMESPACE: ingress-basic
    STATUS: deployed
    REVISION: 1
    TEST SUITE: None
    NOTES:
    The ingress-nginx controller has been installed.
    It may take a few minutes for the LoadBalancer IP to be available.
    You can watch the status by running 'kubectl --namespace ingress-basic get services -o wide -w nginx-ingress-ingress-nginx-controller'
    ...
    
  2. Dapatkan EXTERNAL-IP layanan Anda menggunakan kubectl get services perintah .

    kubectl --namespace ingress-basic get services -o wide -w ingress-nginx-ingress-nginx-controller
    

    Contoh output berikut menunjukkan EXTERNAL-IP untuk layanan ingress-nginx-ingress-nginx-controller :

    NAME                                     TYPE           CLUSTER-IP    EXTERNAL-IP     PORT(S)                      AGE   SELECTOR
    nginx-ingress-ingress-nginx-controller   LoadBalancer   10.0.254.93   <EXTERNAL_IP>   80:30004/TCP,443:30348/TCP   61s   app.kubernetes.io/component=controller,app.kubernetes.io/instance=nginx-ingress,app.kubernetes.io/name=ingress-nginx
    

Daftar rilis

  • Dapatkan daftar rilis yang diinstal pada kluster Anda menggunakan helm list perintah .

    helm list --namespace ingress-basic
    

    Contoh output berikut menunjukkan rilis ingress-nginx yang disebarkan pada langkah sebelumnya:

    NAME            NAMESPACE       REVISION        UPDATED                                 STATUS          CHART                   APP VERSION
    ingress-nginx   ingress-basic   1               2021-07-28 11:35:29.9623734 -0500 CDT   deployed        ingress-nginx-3.34.0    0.47.0
    

Membersihkan sumber daya

Menyebarkan bagan Helm membuat sumber daya Kubernetes seperti pod, penyebaran, dan layanan.

  • Bersihkan sumber daya menggunakan perintah hapus instalan helm dan tentukan nama rilis Anda.

    helm uninstall --namespace ingress-basic ingress-nginx
    

    Contoh output berikut menunjukkan rilis bernama ingress-nginx telah dihapus instalasinya:

    release "nginx-ingress" uninstalled
    
  • Hapus seluruh namespace sampel bersama dengan sumber daya menggunakan kubectl delete perintah dan tentukan nama namespace Anda.

    kubectl delete namespace ingress-basic
    

Langkah berikutnya

Untuk informasi selengkapnya tentang mengelola penyebaran aplikasi Kube dengan Helm, lihat dokumentasi Helm.