إنشاء مخطط Helm وتثبيته

مكتمل

تجعل مخططات Helm من السهل نشر التطبيقات على أي مجموعة Kubernetes. يمكنك استخدام Helm لتعيين قوالب معلومات توزيع التطبيق كمخطط Helm، لاستخدمه بعد ذلك لتوزيع تطبيقك.

لنفترض أن فريق التطوير الخاص بك قام بالفعل بنشر موقع الويب الخاص بمتجر الحيوانات الأليفة الخاص بشركتك إلى مجموعة AKS الخاصة بك. ينشئ الفريق ثلاثة ملفات لنشر موقع الويب:

  • بيان توزيع يصف كيفية تثبيت التطبيق وتشغيله على نظام المجموعة،
  • بيان خدمة يصف كيفية كشف موقع الويب على نظام المجموعة، و
  • بيان دخول يصف كيفية توجيه نسبة استخدام الشبكة من خارج نظام المجموعة إلى تطبيق الويب.

ينشر الفريق هذه الملفات في كل من البيئات الثلاث كجزء من دورة حياة تطوير البرامج. يتم تحديث كل من الملفات الثلاثة مع المتغيرات والقيم الخاصة بالبيئة. بحكم أن كل ملف محدد بتعليمة برمجية ثابتة، فإن صيانة هذه الملفات عرضة للخطأ.

كيف يعمل Helm على معالجة المخطط؟

يعمل عميل Helm على تنفيذ محرك القالب المستند إلى لغة Go الذي يحلل كل الملفات المتوفرة في مجلدات المخطط. يقوم محرك القالب بإنشاء ملفات بيان Kubernetes عن طريق دمج القوالب في مجلد المخطط templates/ مع القيم من Chart.yaml الملفات و 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.

بمجرد أن تتوفر ملفات البيان، يمكن للعميل تثبيت وترقية وحذف التطبيق الذي تم تحديده في ملفات البيان التي تم إنشاؤها.

كيفية تعريف Chart.yaml ملف

Chart.yaml يعد أحد الملفات المطلوبة في تعريف مخطط Helm ويوفر معلومات حول المخطط. تتكون محتويات الملف من ثلاثة حقول مطلوبة وحقول اختيارية مختلفة.

تتضمن الحقول الثلاثة المطلوبة ما يلي:

  • apiVersion: إصدار واجهة برمجة تطبيقات المخطط المراد استخدامه. يمكنك تعيين الإصدار إلى v2 للمخططات التي تستخدم Helm 3.
  • name: اسم المخطط.
  • version: رقم إصدار المخطط، الذي يستخدم الإصدار الدلالي 2.0.0 ويتبع MAJOR.MINOR.PATCH رمز رقم الإصدار.

يوضح المثال التالي محتويات ملف أساسي 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

لاحظ استخدام الحقل في type ملف المثال. يمكنك إنشاء مخططات لتثبيت التطبيقات أو المكتبات. نوع المخطط الافتراضي هو application ويمكن تعيينه library لتحديد المخطط الذي سيقوم بتثبيت مكتبة.

تتوفر العديد من الحقول الاختيارية لتخصيص عملية نشر المخطط. على سبيل المثال، يمكنك استخدام dependencies الحقل لتحديد متطلبات إضافية للمخطط، مثل تطبيق ويب يعتمد على قاعدة بيانات.

إشعار

التغطية التفصيلية لجميع الحقول الاختيارية خارج نطاق هذه الوحدة النمطية. ومع ذلك، يتوفر رابط لوثائق Helm في قسم الملخص في الوحدة.

كيفية تحديد قالب مخطط

قالب مخطط Helm هو ملف يصف ملفات بيان نوع التوزيع المختلفة. تتم كتابة قوالب المخططات بلغة قالب Go وتوفر وظائف القالب لأتمتة إنشاء ملفات بيان كائن Kubernetes.

يتم تخزين ملفات القوالب في templates/ مجلد المخطط. يعالج محرك القالب هذه الملفات لإنشاء بيان العنصر النهائي.

على سبيل المثال، لنفترض أن فريق التطوير الخاص بك يستخدم ملف بيان النشر التالي لنشر المكون الأمامي لمتجر الحيوانات الأليفة للحل:

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

لاحظ كيفية ترميز موقع صورة الحاوية باستخدام بناء الجملة {{.Values.<property>}} . يسمح بناء الجملة بإنشاء عناصر نائبة لكل قيمة مخصصة.

عملية إنشاء مخططات Helm باليد مملة. طريقة سهلة لإنشاء مخطط Helm هي استخدام helm create الأمر لإنشاء مخطط Helm جديد. ثم تخصيص الملفات التي تم إنشاؤها تلقائيًا لتطابق متطلبات تطبيقك.

كيفية تعريف values.yaml ملف

استخدم قيم المخطط لتخصيص تكوين مخطط Helm. يمكن أن تكون قيم المخطط معرّفة مسبقًا أو تم توفيرها من قبل المستخدم في وقت توزيع المخطط.

القيمة المعرفة مسبقا هي قيمة حساسة لحالة الأحرف معرفة مسبقا في سياق مخطط Helm ولا يمكن للمستخدم تغييرها. على سبيل المثال، يمكنك استخدام Release.Name للإشارة إلى اسم الإصدار أو Release.IsInstall للتحقق مما إذا كانت العملية الحالية هي تثبيت.

يمكنك أيضا استخدام قيم معرفة مسبقا لاستخراج البيانات من محتويات Chart.yaml. على سبيل المثال، إذا كنت تريد التحقق من إصدار المخطط، فستشير إلى Chart.Version. ضع في اعتبارك أنه يمكنك فقط الإشارة إلى حقول معروفة. يمكنك اعتبار القيم المعرفة مسبقًا كثوابت لاستخدامها في القوالب التي تقوم بإنشائها.

يتضمن بناء الجملة لتضمين أسماء القيم في ملف قالب إحاطة اسم القيمة بأقواس متعرجة مزدوجة، على سبيل المثال، {{.Release.Name}}. لاحظ استخدام نقطة أمام اسم القيمة. عند استخدام نقطة بهذه الطريقة، تعمل النقطة كعامل بحث وتشير إلى النطاق الحالي للمتغير.

على سبيل المثال، يحتوي مقتطف YAML التالي على قاموس معرف في ملف قيم:

object:
  key: value

للوصول إلى القيمة في قالب يمكنك استخدام بناء الجملة التالي:

{{ .Values.object.key }}

تسمح لك القيمة المتوفرة بمعالجة القيم العشوائية في قالب المخطط. values.yaml يعرف الملف هذه القيم.

في المثال، يسمح فريق التطوير بالقيم القابلة للتكوين التالية:

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 }}
  ...

فيما يلي مثال على values.yaml الملف:

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

بمجرد تطبيق محرك القالب للقيم، ستبدو النتيجة النهائية مثل هذا المثال:

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
  ...

كيفية استخدام مستودع Helm

مستودع Helm هو خادم HTTP مخصص يقوم بتخزين المعلومات على مخططات Helm. يمكنك تكوين مستودعات Helm مع عميل Helm لتثبيت المخططات من مستودع باستخدام helm repo add الأمر .

على سبيل المثال، يمكنك إضافة مستودع Azure Marketplace Helm إلى عميل Helm المحلي الخاص بك عن طريق تشغيل الأمر التالي:

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

يتم تخزين معلومات حول المخططات المتوفرة على مستودع مخزن مؤقتًا على مضيف العميل. تحتاج إلى تحديث ذاكرة التخزين المؤقت بشكل دوري لإحضار أحدث معلومات المستودع باستخدام helm repo update الأمر .

helm search repo يسمح لك الأمر بالبحث عن مخططات على جميع مستودعات Helm المضافة محليا. يمكنك تشغيل helm search repo الأمر بنفسه لإرجاع قائمة بجميع مخططات Helm المعروفة لكل مستودع مضاف. تسرد النتيجة اسم المخطط وإصداره وإصدار التطبيق الذي نشره المخطط، كما هو موضح في إخراج المثال التالي:

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...

يمكنك البحث عن مخطط معين عن طريق إضافة مصطلح بحث إلى helm search repo الأمر . على سبيل المثال، إذا كنت تبحث عن مخطط يستند إلى ASP.NET، يمكنك استخدام الأمر التالي:

helm search repo aspnet

في هذا المثال، يحتوي العميل المحلي على مستودعين مسجلين ويعيد نتيجة من كل منهما، كما هو موضح في إخراج المثال التالي:

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...

كيفية اختبار مخطط Helm

يوفر Helm خيارًا لك لإنشاء ملفات البيان التي يعمل محرك القالب على إنشائها من المخطط. تسمح لك هذه الميزة باختبار المخطط قبل الإصدار عن طريق الجمع بين معلمتين إضافيتين: --dry-run و debug. --dry-run تضمن المعلمة محاكاة التثبيت، وتمكن المعلمة --debug الإخراج المطول.

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

يعرض الأمر معلومات حول القيم المستخدمة وكل الملفات التي تم إنشاؤها. قد تضطر إلى التمرير لعرض جميع المخرجات التي تم إنشاؤها.

كيفية تثبيت مخطط Helm

يمكنك استخدام helm install الأمر لتثبيت مخطط. يمكنك تثبيت مخطط Helm من أي من المواقع التالية:

  • مجلدات المخطط
  • مخططات أرشيف القطران المحزمة .tgz
  • مستودعات Helm

ومع ذلك، تختلف المعلمات المطلوبة استنادًا إلى موقع المخطط. في جميع الحالات، install يتطلب الأمر اسم المخطط الذي تريد تثبيته واسما للإصدار الذي ينشئه التثبيت.

يمكنك تثبيت مخطط محلي باستخدام مجلد مخطط غير معبأة من الملفات أو أرشيف tar معبأة .tgz . لتثبيت مخطط، helm يشير الأمر إلى نظام الملفات المحلي لموقع المخطط. فيما يلي مثال على أمر التثبيت الذي سينشر إصدارا لمخطط غير معبأة:

helm install my-release ./chart-name

في المثال السابق، المعلمة my-release هي اسم الإصدار والمعلمة ./chart-name هي اسم حزمة المخطط غير المحزمة.

يتم تثبيت مخطط محزَّم عن طريق الإشارة إلى اسم ملف المخطط المحزَّم. يوضح المثال التالي بناء الجملة لنفس التطبيق المحزم الآن كأرشيف tar:

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

عند تثبيت مخطط من مستودع Helm، يمكنك استخدام مرجع مخطط كاسم المخطط. يتضمن مرجع المخطط معلمتين، اسم المستودع واسم المخطط، كما هو موضح في المثال التالي:

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

في المثال، تحتوي المعلمة repository-name/chart-name على مرجع المستودع، repository-name، واسم المخطط، chart-name.