كيفية تثبيت البرامج على مجموعات Kubernetes باستخدام إدارة الحزم Helm 3

0 الأسهم
0
0
0
0

مقدمة

Helm هو مدير حزم لـ Kubernetes يسمح للمطورين والمشغلين بتكوين ونشر التطبيقات بسهولة على مجموعات Kubernetes.

تُسمى حزم Helm بالمخططات، وهي تحتوي على قوالب لتعريفات الموارد التي تُستخدم لنشر وتكوين تطبيقات معينة بأقل جهد من المستخدم. باستخدام القوالب، يمكنك إدارة المخطط وإعداداته وسلوكه من خلال تمرير تعريفات المتغيرات دون تغيير المخطط نفسه. يدير Helm تلقائيًا تعريفات الموارد المُخصصة، بالإضافة إلى التغييرات التي تُجرى على التعريفات المنشورة مسبقًا. يُطلق على المخطط المنشور، مع إمكانية تخصيصه، اسم الإصدار.

في هذا الدرس التعليمي، ستتعلم كيفية إعداد Helm 3 وكيفية تثبيت المخططات وترقيتها واستعادتها وإدارتها، بالإضافة إلى كيفية إنشاء مخططاتك الخاصة وتغليفها، فضلاً عن إعداد مستودعات المخططات التي تستضيف المخططات التي يمكنك تثبيتها فوراً.

المتطلبات الأساسية
  • مجموعة Kubernetes مع تمكين التحكم في الوصول القائم على الأدوار (RBAC).
  • تم تثبيت أداة سطر الأوامر kubectl على جهازك المحلي وتهيئتها للاتصال بمجموعتك.
  • يمكنك اختبار اتصالك باستخدام الأمر التالي:
  • kubectl cluster-info
  • إذا لم تظهر أي أخطاء، فأنت متصل بالمجموعة. إذا كنت تستخدم kubectl للوصول إلى مجموعات متعددة، فتأكد من تحديد سياق المجموعة الصحيح عن طريق تشغيل الأمر التالي:
  • kubectl config get-contexts
  • تعرض المخرجات قائمة بالإعدادات المتاحة:
  • Output
    CURRENT NAME CLUSTER AUTHINFO NAMESPACE
    * do-fra1-helm3-example do-fra1-helm3-example do-fra1-helm3-example-admin
  • هنا، تشير علامة النجمة (*) إلى أننا متصلون بمجموعة do-fra1-helm3-example. للتبديل بين المجموعات، نفّذ الأمر التالي:
  • kubectl config use-context context-name
  • بمجرد اتصالك بالمجموعة الصحيحة، انتقل إلى الخطوة 1 لبدء تثبيت Helm.

الخطوة 1 - تثبيت Helm 3

في هذا القسم، ستقوم بتثبيت Helm 3 باستخدام البرنامج النصي الرسمي المقدم.

ابدأ بالذهاب إلى /tmp، حيث يمكنك العثور على برنامج التثبيت عن طريق تشغيل:

cd /tmp

قم بتنزيل البرنامج النصي باستخدام الأمر التالي:

curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3

يمكنك التحقق من ملف get_helm.sh في محرر النصوص الخاص بك للتأكد من أنه آمن.

اجعله قابلاً للتنفيذ عن طريق ضبط أذوناته على النحو التالي:

chmod u+x get_helm.sh

وأخيرًا، قم بتشغيله لتثبيت Helm 3:

./get_helm.sh

سوف تحصل على إخراج مماثل لما يلي:

Output
Downloading https://get.helm.sh/helm-v3.5.2-linux-amd64.tar.gz
Verifying checksum... Done.
Preparing to install helm into /usr/local/bin
helm installed into /usr/local/bin/helm

لقد قمت بتثبيت Helm 3 على جهازك. الآن سيتم تعريفك بمستودعات المخططات وكيفية استخدامها.

الخطوة الثانية - إعداد مستودعات المخططات

تُخزَّن مخططات Helm في مستودعات مخططات يمكن لأي شخص استضافتها. افتراضيًا، لا يأتي Helm 3 مُهيأً مسبقًا بأي مستودعات. كانت الإصدارات السابقة من Helm تتضمن مستودعًا مركزيًا للمخططات. مع ذلك، صُمِّم Helm 3 خصيصًا لتمكين مطوري المخططات من إدارة مستودعاتهم الخاصة، مما يتيح لهم حرية أكبر وإصدارات أسرع. هذا يعني أنه لكل مخطط ترغب في استخدامه، عليك التأكد من إضافة مستودع الاستضافة إلى تثبيت Helm الخاص بك.

لمساعدتك في العثور على المستودع المناسب، يمكنك استخدام ArtifactHub.io، وهو موقع ويب مفتوح المصدر تديره مؤسسة CNCF، ويُصنّف مخططات Helm ومستودعاتها. كما يتتبع المخططات الشائعة والمفيدة التي تستخدمها مشاريع CNCF الأخرى، مما يجعله مختلفًا عن المستودع الثابت الذي اعتمدت عليه الإصدارات السابقة من Helm. يُعدّ هذا الموقع مصدرًا ممتازًا للمشاريع الشائعة، مثل سجلات Nginx أو أدوات المراقبة.

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


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


يجب أن يتضمن كل مخطط وصفًا تفصيليًا للمهمة، بالإضافة إلى تعليمات لإضافة مستودعه إلى عملية تثبيت المخطط. وإلا، يمكنك الحصول على التعليمات اللازمة بالضغط على زر "تثبيت" الموجود على الجانب الأيمن من الصفحة.


يمكنك النقر على الزر الأزرق المجاور للأمر لنسخه. بالنسبة للأمر الأول، اتبع الخطوات التالية ثم قم بتشغيله:

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

لإضافة مستودع إلى Helm، قم بتشغيل الأمر helm repo add. المعلمات التي يقبلها هي اسم المستودع وموقعه.

سيكون الناتج:

Output
"ingress-nginx" has been added to your repositories

عند إضافة مستودع جديد، يجب عليك إخبار Helm بمحتوياته عن طريق تشغيل الأمر التالي:

helm repo update

ستتلقى المخرجات التالية التي تشير إلى نجاح التحديث:

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

في هذه المرحلة، تكون قد تعرفت على ArtifactHub وميزاته. كما أضفت مستودعًا جديدًا إلى تثبيت Helm الخاص بك. الآن، ستقوم بتثبيت مخطط Helm.

الخطوة 3 - تثبيت مخطط Helm

في القسم السابق، أضفت مستودع الرسم البياني ingress-nginx. الآن ستقوم بتثبيته على مجموعتك.

يحتوي كل مخطط على متغيرات تكوين يمكنك ضبطها لتغيير سلوكه. تُخزَّن هذه المتغيرات في ملف يُسمى values.yaml وهو جزء من المخطط. ما لم تكن قد نزّلت المخطط على جهازك، فستحتاج إلى تشغيل الأمر التالي لعرضه:

helm show values chart_name

لعرض المتغيرات المتاحة لـ ingress-nginx، استبدل chart_name:

helm show values ingress-nginx/ingress-nginx

سيكون الناتج طويلاً وسيعرض محتويات ملف values.yaml الخاص بـ ingress-nginx.

لتثبيت المخطط، يمكنك استخدام أمر التثبيت التالي:

helm install release_name repository/chart_name

الإصدار هو نسخة منشورة من الرسم البياني، وهنا نسميه ingress-nginx.

يقوم هذا الأمر بتثبيت المخطط بقيم افتراضية للمتغيرات على مجموعتك. إذا كنت ترغب في تغيير بعضها، يمكنك تمرير قيم جديدة للمتغيرات باستخدام الخيار ‎–set:

helm install ingress-nginx/ingress-nginx --set variable_name=variable_value

يمكنك تكرار الأمر `--set` لعدد المتغيرات الذي تحتاجه. بما أننا لن نقوم بتخصيصه الآن، فقم بتثبيته كما هو بتشغيل الأمر التالي:

helm install ingress-nginx ingress-nginx/ingress-nginx

سيكون الناتج مشابهًا لما يلي:

Output
NAME: ingress-nginx
LAST DEPLOYED: Wed Feb 24 10:12:37 2021
NAMESPACE: default
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 default get services -o wide -w ingress-nginx-controller'
...

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

للتحقق من المخططات المنشورة، استخدم قائمة الأوامر التالية:

helm list

ستلاحظ أن ingress-nginx هو الرسم البياني الوحيد المنشور حاليًا:

Output
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
ingress-nginx default 1 2021-02-24 10:12:37.281049711 +0000 UTC deployed ingress-nginx-3.23.0 0.44.0

يمكنك العثور على الخدمات الموجودة في مجموعتها عن طريق تشغيل الأمر التالي:

kubectl get services

سيكون الناتج مشابهًا لهذا:

Output
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ingress-nginx-controller LoadBalancer 10.245.211.81 46.101.68.67 80:30704/TCP,443:30700/TCP 7m19s
ingress-nginx-controller-admission ClusterIP 10.245.50.17 <none> 443/TCP 7m19s
kubernetes ClusterIP 10.245.0.1 <none> 443/TCP 83m

الآن بعد أن قمت بنشر إصدار على مجموعتك، ستقوم بتغيير تكوينه أثناء عملية النشر.

الخطوة 4 - ترقية الإصدار

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

يُظهر مخطط ingress-nginx متغير controller.replicaCount، الذي يتحكم في عدد وحدات التحكم المُنشأة. يتم تعيينه افتراضيًا إلى واحد، ويمكنك التحقق من ذلك عن طريق سرد الوحدات المتاحة.

kubectl get pods

ستلاحظ أنه لا يوجد سوى واحد:

Output
NAME READY STATUS RESTARTS AGE
ingress-nginx-controller-7fc74cf778-kjtst 1/1 Running 0 12m

إذا كنت ترغب في نشر المزيد من الأجهزة لضمان التكرار (على سبيل المثال، ثلاثة أجهزة)، يمكنك ترقية الإصدار وتعيين المتغير إلى 3 عن طريق تشغيل الأمر التالي:

helm upgrade ingress-nginx ingress-nginx/ingress-nginx --set controller.replicaCount=3 --reuse-values

كما تقوم بتمرير --reuse-values، الذي يوجه Helm لوضع تغييراتك فوق الإصدار المنشور والاحتفاظ بالتكوين السابق.

في المخرجات، يقوم برنامج Helm بإجراء تصحيحات للإشارة إلى أنه تم ترقية الإصدار:

Output
NAME: ingress-nginx
LAST DEPLOYED: Wed Feb 24 12:07:54 2021
NAMESPACE: default
STATUS: deployed
REVISION: 2
TEST SUITE: None
NOTES:
...

يمكنك عرض قائمة بالوحدات المتاحة عن طريق تشغيل الأمر التالي:

kubectl get pods

بدلاً من واحدة، ستجد ثلاث وحدات مدرجة:

Output
NAME READY STATUS RESTARTS AGE
ingress-nginx-controller-7fc74cf778-4hk9g 1/1 Running 0 18s
ingress-nginx-controller-7fc74cf778-kjtst 1/1 Running 0 22m
ingress-nginx-controller-7fc74cf778-wz595 1/1 Running 0 18s

بعد ذلك، ستقوم بإلغاء التغييرات وحذف المنشور بالكامل.

الخطوة 5 - استعادة وحذف نسخة

عند ترقية إصدار ما، يزداد رقم مراجعته. داخليًا، يخزن Helm جميع إصدارات الإصدار، مما يسمح لك بالرجوع إلى إصدار سابق عند الحاجة.

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

لاستعادة إصدار، استخدم أمر الاستعادة:

helm rollback release_name release_revision

يمكنك استخدامه للتراجع عن التغييرات التي أجريتها على ingress-nginx، والعودة إلى الإصدار 1:

helm rollback ingress-nginx 1

ستتلقى المخرجات التالية التي تشير إلى نجاح العملية:

Output
Rollback was a success! Happy Helming!

يمكنك التحقق من الإصدار الحالي من خلال سرد الإصدارات:

helm list

ستلاحظ أن رقم المراجعة أصبح الآن 3 وليس 1:

Output
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
ingress-nginx default 3 2021-02-24 12:43:21.523664768 +0000 UTC deployed ingress-nginx-3.23.0 0.44.0

يعتبر Helm كل تغيير، بما في ذلك التراجع، بمثابة مراجعة جديدة في الإصدار. يمكنك التحقق من عدد وحدات pods المنشورة بتشغيل الأمر التالي:

kubectl get pods

ستلاحظ أنه لا يوجد سوى واحد:

Output
NAME READY STATUS RESTARTS AGE
ingress-nginx-controller-7fc74cf778-kjtst 1/1 Running 0 41m

لحذف إصدار وجميع مراجعاته، يمكنك استخدام الأمر helm delete:

helm delete release_name

بما أنك لن تحتاج إليه بعد الآن، قم بإزالة ingress-nginx عن طريق تشغيل الأمر التالي:

helm delete ingress-nginx

سيكون الناتج:

Output
release "ingress-nginx" uninstalled

يمكنك سرد الإصدارات للتأكد من عدم وجود أي منها:

helm list

لن يحتوي جدول الإخراج على أي صفوف:

Output
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION

الآن بعد حذف الإصدار، يمكنك إعادة استخدام اسمه في عمليات النشر المستقبلية.

الخطوة 6 - (اختياري) إنشاء مخططات مخصصة

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

ستقوم بإنشاء مخطط جديد باسم sample-chart. لإنشائه، قم بتشغيل الأمر التالي:

helm create example-chart

سيؤدي هذا إلى إنشاء مجلد جديد باسم example-chart يحتوي على الملفات والبنية التالية:

charts/
templates/
├─ tests/
│ ├─ test-connection.yaml
├─ deployment.yaml
├─ hpa.yaml
├─ ingress.yaml
├─ NOTES.txt
├─ service.yaml
├─ serviceaccount.yaml
├─ _helpers.tpl
Chart.yaml
values.yaml

توجد تعريفات الموارد التي يُثبّتها الرسم البياني على المجموعات المستهدفة في دليل القوالب. تقوم التعريفات الافتراضية التي أنشأها Helm كنقطة بداية بنشر وحدة تحكم دخول Nginx. على الرغم من أن امتداد ملفاتها هو YAML، إلا أنها تستخدم صيغة تنسيق Go للحفاظ على إمكانية تهيئتها من خلال متغيرات مكشوفة يمكنك تمريرها. يمكنك عرض محتويات ملف service.yaml بتشغيل الأمر التالي:

cat example-chart/templates/service.yaml

ستلاحظ أنها تحتوي على تعليمات تنسيق لإنتاج القيم المحاطة بأقواس مزدوجة:

OutputapiVersion: v1
kind: Service
metadata:
name: {{ include "mychart.fullname" . }}
labels:
{{- include "mychart.labels" . | nindent 4 }}
spec:
type: {{ .Values.service.type }}
ports:
- port: {{ .Values.service.port }}
targetPort: http
protocol: TCP
name: http
selector:
{{- include "mychart.selectorLabels" . | nindent 4 }}

تُعرض المتغيرات المُشار إليها للمستخدم وتُعرّف في ملف values.yaml. يُخزّن نص ملاحظات Helm في ملف NOTES.txt بعد النشر، ويتم تنسيقه أيضًا. تُحدد بيانات تعريف المخطط، مثل اسم البرنامج وإصداره ورقم إصداره، في ملف Chart.yaml.

apiVersion: v2
name: mychart
description: A Helm chart for Kubernetes
...
type: application
...
version: 0.1.0
...
appVersion: "1.16.0"

للتحقق مما يقوم Helm بنشره، يمكنك تمرير الخيارين --dry-run و --debug إلى أمر helm install عن طريق الإشارة إلى دليل المخطط:

helm install example-chart --dry-run --debug ./example-chart

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

بعد الانتهاء من مشاركة الرسم البياني، يمكنك إتاحته للتوزيع عن طريق تشغيل الأمر التالي:

helm package ./example-chart

سيكون الناتج:

Output
Successfully packaged chart and saved it to: .../example-chart-0.1.0.tgz

يمكن تثبيت المخطط المعبأ تمامًا مثل المخططات الموجودة في المستودعات المضافة:

helm install example-chart example-chart-0.1.0.tgz

في هذه المرحلة، تكون قد أنشأت ونشرت مخططًا مخصصًا. كما قمت بتغليفه وأصبحت على دراية ببنيته.

نتيجة

أنت الآن تعرف كيفية استخدام Helm لتثبيت وتحديث البرامج المنشورة على مجموعة Kubernetes الخاصة بك. لقد أضفت مستودعات المخططات وتعرفت على أهميتها وكيف يمكن لـ ArtifactHub مساعدتك في العثور عليها. كما أنشأت مخططًا مخصصًا جديدًا وتعرفت على مراجعات الإصدارات وكيفية التراجع عنها عند الضرورة.

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

قد يعجبك أيضاً