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

المقدمة

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

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

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

المتطلبات المسبقة

  • مجموعة Kubernetes مع تحكم في الوصول بناءً على الأدوار (RBAC) ممكّن. للحصول على مزيد من المعلومات حول الإصدارات، يمكنك التحقق من صفحة إصدارات Helm.

  • تم تثبيت أداة سطر الأوامر kubectl على جهازك المحلي، مكونة للاتصال بعقدتك. يمكنك قراءة المزيد حول تثبيت kubectl في التوثيق الرسمي.

    يمكنك اختبار الاتصال الخاص بك باستخدام الأمر التالي:

    1. kubectl cluster-info

    إذا لم تتلق أي أخطاء، فأنت متصل بالعقدة. إذا كان لديك وصول إلى عدة عقد باستخدام kubectl، تأكد من التحقق من أنك قمت باختيار سياق العقدة الصحيحة عن طريق تشغيل:

    1. kubectl config get-contexts

    سيقوم الإخراج بسرد التكوينات المتاحة:

    الإخراج
    CURRENT NAME CLUSTER AUTHINFO NAMESPACE * do-fra1-helm3-example do-fra1-helm3-example do-fra1-helm3-example-admin

    هنا، يشير النجمة (*) إلى أننا متصلون بعقدة do-fra1-helm3-example. للتبديل بين العقد، قم بتشغيل:

    1. kubectl config use-context اسم-السياق

عندما تكون متصلاً بالعنقود الصحيح، تابع إلى الخطوة 1 للبدء في تثبيت Helm.

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

في هذا القسم، ستقوم بـ تثبيت Helm 3 باستخدام سكريبت الشل المُقدّم رسميًا.

ابدأ بالانتقال إلى /tmp، حيث ستخزن سكريبت التثبيت عبر تشغيل:

  1. cd /tmp

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

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

يمكنك فحص get_helm.sh في محرر النصوص للتأكد من سلامته.

اجعله قابلاً للتنفيذ عن طريق تعيين الصلاحيات إلى ما يلي:

  1. chmod u+x get_helm.sh

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

  1. ./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 على جهازك. الآن ستتعلم حول مستودعات الرسومات وكيفية استخدامها.

الخطوة 2 — إعداد مستودعات الرسومات

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

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

يمكنك البحث عن رسم ترغب في تثبيته عبر الصفحة الرئيسية. ستظهر جميع الرسومات المُفَهرسة المتعلقة به عند البحث عن nginx.

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

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

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

  1. 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 بمحتواه عن طريق تشغيل:

  1. 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 والذي يُعتبر جزءًا من الرسم البياني. ما لم تقم بتنزيل الرسم البياني إلى جهازك، ستحتاج إلى تشغيل الأمر التالي لعرضه:

  1. helm show values chart_name

لعرض المتغيرات المتاحة لـ ingress-nginx، قم بتغيير اسم_الرسم_البياني:

  1. helm show values ingress-nginx/ingress-nginx

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

لتثبيت رسم بياني، يمكنك استخدام helm install:

  1. helm install release_name repository/chart_name

A release is a deployed instance of the chart, and here you’re calling it ingress-nginx.

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

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

يمكنك تكرار --set للعديد من المتغيرات حسب الحاجة. نظرًا لأننا لن نُخصصها الآن، قم بتثبيته كما هو عن طريق تشغيل:

  1. 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 بعرض معلومات شائعة، مثل حالة الإصدار ومساحة الاسم الفضائية التي يتم نشرها فيها. تختلف قسم NOTES بين الرسوم البيانية، وغالبًا ما يحتوي على إرشادات سريعة للبدء أو يحذر من بعض المشاكل الشائعة عند استخدام موارد الرسم البياني. هنا، يُشير إلى أن جهاز التوازن يتم إنشاؤه وأنه قد يستغرق بعض الوقت لاستكماله.

للتحقق من الرسوم البيانية المنشأة، استخدم helm list:

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

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

  1. 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 — ترقية الإصدار

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

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

  1. kubectl get pods

سوف تجد أن هناك وحدة واحدة فقط:

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

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

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

يمكنك سرد الوحدات المتاحة عن طريق التشغيل:

  1. 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 بتخزين جميع النسخ لإصدار معين، مما يتيح لك العودة إلى نسخة سابقة إذا لزم الأمر.

لإعادة عدد الـ pods إلى واحد فقط، يمكنك تشغيل helm upgrade مرة أخرى وضبط العدد يدويًا لأنه تغيير بسيط. ومع ذلك، عند العمل مع مخططات أكبر مع العديد من المتغيرات، فإن التراجع اليدوي ليس عمليًا ويجب أن يكون مؤتمتًا.

للتراجع عن إصدار، استخدم helm rollback:

  1. helm rollback release_name release_revision

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

  1. helm rollback ingress-nginx 1

سوف تتلقى الناتج التالي، مما يشير إلى نجاح الإجراء:

Output
Rollback was a success! Happy Helming!

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

  1. 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 كل تغيير، بما في ذلك التراجعات، كنسخة جديدة لإصدار. يمكنك التحقق من أن النسخة 3 متساوية مع الأولى عن طريق فحص عدد الـ pods التي تم نشرها عن طريق تشغيل:

  1. kubectl get pods

ستجد أن هناك واحد فقط:

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

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

  1. helm delete release_name

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

  1. helm delete ingress-nginx

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

Output
release "ingress-nginx" uninstalled

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

  1. helm list

سيكون جدول الناتج بدون صفوف:

Output
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION

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

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

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

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

  1. helm create example-chart

سينشئ هذا دليلاً جديدًا يسمى 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

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

  1. cat example-chart/templates/service.yaml

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

Output
apiVersion
: 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. يتم تخزين نص NOTES الذي يظهر بعد نشر Helm في NOTES.txt، وهو مفهرس أيضًا. يتم تحديد بيانات تعريف المخطط، مثل الاسم والإصدار وإصدار البرنامج المُنشأ، في Chart.yaml:

example-chart/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 مشيرًا إلى دليل المخطط:

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

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

عندما يحين الوقت لمشاركة المخطط النهائي الخاص بك، يمكنك تجميعه للتوزيع عبر تشغيل:

  1. helm package ./example-chart

سيكون الإخراج:

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

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

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

في هذه الخطوة، قمت بإنشاء مخطط مخصص ونشرته. كما قمت بتجميعه وتعرفت على هيكله.

الاستنتاج

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

لمزيد من المعلومات حول إنشاء الرسوم البيانية المخصصة، قم بزيارة الدليل الرسمي.

Source:
https://www.digitalocean.com/community/tutorials/how-to-install-software-on-kubernetes-clusters-with-the-helm-3-package-manager