إنشاء مخطط Helm وتثبيته
تجعل مخططات Helm من السهل نشر التطبيقات على أي مجموعة Kubernetes. يمكنك استخدام Helm لتعيين قوالب معلومات توزيع التطبيق كمخطط Helm، لاستخدمه بعد ذلك لتوزيع تطبيقك.
لنفترض أن فريق التطوير الخاص بك قام بالفعل بنشر موقع الويب الخاص بمتجر الحيوانات الأليفة الخاص بشركتك إلى مجموعة AKS الخاصة بك. ينشئ الفريق ثلاثة ملفات لنشر موقع الويب:
- بيان توزيع يصف كيفية تثبيت التطبيق وتشغيله على نظام المجموعة،
- بيان خدمة يصف كيفية كشف موقع الويب على نظام المجموعة، و
- بيان دخول يصف كيفية توجيه نسبة استخدام الشبكة من خارج نظام المجموعة إلى تطبيق الويب.
ينشر الفريق هذه الملفات في كل من البيئات الثلاث كجزء من دورة حياة تطوير البرامج. يتم تحديث كل من الملفات الثلاثة مع المتغيرات والقيم الخاصة بالبيئة. بحكم أن كل ملف محدد بتعليمة برمجية ثابتة، فإن صيانة هذه الملفات عرضة للخطأ.
كيف يعمل Helm على معالجة المخطط؟
يعمل عميل Helm على تنفيذ محرك القالب المستند إلى لغة Go الذي يحلل كل الملفات المتوفرة في مجلدات المخطط. يقوم محرك القالب بإنشاء ملفات بيان Kubernetes عن طريق دمج القوالب في مجلد المخطط templates/
مع القيم من Chart.yaml
الملفات و values.yaml
.
بمجرد أن تتوفر ملفات البيان، يمكن للعميل تثبيت وترقية وحذف التطبيق الذي تم تحديده في ملفات البيان التي تم إنشاؤها.
كيفية تعريف 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
.