تعرف على المزيد حول تثبيت التطبيقات باستخدام Helm في ⁧خدمة Azure Kubernetes Service⁧⁩.

Helm أداة تعبئة مفتوحة المصدر تساعدك على تثبيت دورة حياة تطبيقات Kubernetes وإدارتها. على غرار مديري حزم Linux، مثل APT وYum، يمكنك استخدام Helm لإدارة مخططات Kubernetes، وهي حزم من موارد Kubernetes التي تم تكوينها مسبقا.

توضح هذه المقالة كيفية تكوين Helm واستخدامه في مجموعة Kubernetes على خدمة Azure Kubernetes (AKS).

قبل البدء

  • تفترض هذه المقالة أن لديك مجموعة AKS موجودة. إذا كنت بحاجة إلى نظام مجموعة AKS، قم بإنشاء مجموعة باستخدام Azure CLI أو Azure PowerShell أو مدخل Azure.
  • تحتاج مجموعة AKS الخاصة بك إلى ACR متكامل. للحصول على تفاصيل حول إنشاء نظام مجموعة AKS باستخدام ACR متكامل، راجع المصادقة باستخدام Azure Container Registry من Azure Kubernetes Service.
  • تحتاج أيضًا إلى تثبيت Helm CLI، وهو العميل الذي يتم تشغيله على نظام التطوير الخاص بك. فهو يسمح لك ببدء التطبيقات وإيقافها وإدارتها باستخدام Helm. في حال كنت تستخدم Azure Cloud Shell، يكون Helm CLI مثبتًا بالفعل. للحصول على إرشادات التثبيت على النظام الأساسي المحلي، راجع تثبيت Helm.

هام

يهدف Helm إلى التشغيل على عقد Linux. إذا كان لديك عقد Windows Server في نظام المجموعة، يجب التأكد من جدولة Helm pods فقط للتشغيل على عقد Linux. تحتاج أيضًا إلى التأكد من جدولة أي مخططات Helm تقوم بتثبيتها أيضًا للتشغيل على العقد الصحيحة. تستخدم الأوامر الواردة في هذه المقالة محددات العقدة للتأكد من جدولة pods إلى العقد الصحيحة، ولكن ليس كل مخططات Helm قد تعرض محدد عقدة. يمكنك أيضا التفكير في استخدام خيارات أخرى على نظام المجموعة، مثل العيوب.

تحقق من إصدار Helm

  • helm version استخدم الأمر للتحقق من تثبيت Helm 3.

    helm version
    

    يظهر إخراج المثال التالي إصدار Helm 3.0.0 المثبت:

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

تثبيت التطبيق باستخدام Helm v3

إضافة مستودعات Helm

  • أضف مستودع ingress-nginx باستخدام أمر helm repo.

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

البحث عن مخططات helm

  1. ابحث عن مخططات Helm التي تم إنشاؤها مسبقا باستخدام أمر بحث helm.

    helm search repo ingress-nginx
    

    يظهر إخراج المثال التالي بعض مخططات Helm المتوفرة للاستخدام:

    NAME                            CHART VERSION   APP VERSION     DESCRIPTION                                       
    ingress-nginx/ingress-nginx     4.7.0           1.8.0           Ingress controller for Kubernetes using NGINX a...
    
  2. قم بتحديث قائمة المخططات باستخدام أمر تحديث helm repo.

    helm repo update
    

    يظهر إخراج المثال التالي تحديث مستودع ناجح:

    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!⎈
    

استيراد صور مخطط Helm إلى ACR الخاص بك

تستخدم هذه المقالة مخطط Helm لوحدة تحكم دخول NGINX، والذي يعتمد على ثلاث صور للحاوية.

  • استخدم az acr import لاستيراد صور وحدة تحكم دخول NGINX إلى ACR الخاص بك.

    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
    

    إشعار

    إلى جانب استيراد صور الحاويات إلى ACR الخاص بك، يمكنك أيضاً استيراد مخططات Helm إلى ACR الخاص بك. لمزيد من المعلومات، راجع «Push and pull Helm charts» إلى سجل حاويات Azure Container Registry.

تشغيل مخططات Helm

  1. قم بتثبيت مخططات Helm باستخدام أمر تثبيت helm وحدد اسم الإصدار واسم المخطط المراد تثبيته.

    تلميح

    ينشئ المثال التالي مساحة اسم Kubernetes لموارد الدخول التي تحمل اسم ingress-basic وتهدف إلى العمل ضمن مساحة الاسم. حدد مساحة االاسم للبيئة الخاصة بك حسب الحاجة.

    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=""
    

    يظهر إخراج المثال المكثف التالي حالة نشر موارد Kubernetes التي تم إنشاؤها بواسطة مخطط 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. احصل على EXTERNAL-IP للخدمة kubectl get services الخاصة بك باستخدام الأمر .

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

    يظهر إخراج المثال التالي EXTERNAL-IP لخدمة 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
    

إصدارات القائمة

  • احصل على قائمة الإصدارات المثبتة على نظام المجموعة باستخدام helm list الأمر .

    helm list --namespace ingress-basic
    

    يظهر إخراج المثال التالي إصدار ingress-nginx المنشور في الخطوة السابقة:

    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
    

تنظيف الموارد

يؤدي نشر مخطط Helm إلى إنشاء موارد Kubernetes مثل الحجيرات والنشرات والخدمات.

  • قم بتنظيف الموارد باستخدام الأمر helm uninstall وحدد اسم الإصدار الخاص بك.

    helm uninstall --namespace ingress-basic ingress-nginx
    

    يظهر إخراج المثال التالي أن الإصدار المسمى ingress-nginx قد تم إلغاء تثبيته:

    release "nginx-ingress" uninstalled
    
  • احذف عينة مساحة الاسم بأكملها مع الموارد باستخدام kubectl delete الأمر وحدد اسم مساحة الاسم.

    kubectl delete namespace ingress-basic
    

الخطوات التالية

لمزيد من المعلومات حول إدارة عمليات نشر تطبيقات Kubernetes مع Helm، راجع وثائق Helm.