المقدمة
Helm هو أداة إدارة الحزم لـ Kubernetes التي تتيح للمطورين والمشغلين تكوين ونشر التطبيقات على مجموعات Kubernetes بشكل أسهل.
تسمى حزم Helm المخططات، وتحتوي على قوالب لتعريفات الموارد التي تنشئ وتكونفيج تطبيقات معينة مع الحد الأدنى من الجهد المطلوب من المستخدم. من خلال القوالب، يمكنك إدارة المخطط وإعداداته وسلوكه عن طريق تمرير تعاريف المتغيرات دون تعديل المخطط الفعلي. تدير Helm بشكل تلقائي تعريفات الموارد المخصصة، فضلاً عن التعديلات على التعريفات التي تم نشرها بالفعل. يُطلق على المخطط الذي تم نشره، مع إمكانية التخصيص، اسم إصدار.
في هذا البرنامج التعليمي، ستقوم بإعداد Helm 3 وستتعلم كيفية تثبيت المخططات وتحديثها والتراجع عنها وإدارتها. كما ستتعلم إنشاء وتعبئة المخططات الخاصة بك، بالإضافة إلى إعداد مستودعات المخططات، التي تستضيف مخططات يمكنك تثبيتها مباشرة.
المتطلبات المسبقة
-
مجموعة Kubernetes مع تحكم في الوصول بناءً على الأدوار (RBAC) ممكّن. للحصول على مزيد من المعلومات حول الإصدارات، يمكنك التحقق من صفحة إصدارات Helm.
-
تم تثبيت أداة سطر الأوامر
kubectl
على جهازك المحلي، مكونة للاتصال بعقدتك. يمكنك قراءة المزيد حول تثبيتkubectl
في التوثيق الرسمي.يمكنك اختبار الاتصال الخاص بك باستخدام الأمر التالي:
إذا لم تتلق أي أخطاء، فأنت متصل بالعقدة. إذا كان لديك وصول إلى عدة عقد باستخدام
kubectl
، تأكد من التحقق من أنك قمت باختيار سياق العقدة الصحيحة عن طريق تشغيل:سيقوم الإخراج بسرد التكوينات المتاحة:
الإخراجCURRENT NAME CLUSTER AUTHINFO NAMESPACE * do-fra1-helm3-example do-fra1-helm3-example do-fra1-helm3-example-adminهنا، يشير النجمة (
*
) إلى أننا متصلون بعقدةdo-fra1-helm3-example
. للتبديل بين العقد، قم بتشغيل:
عندما تكون متصلاً بالعنقود الصحيح، تابع إلى الخطوة 1 للبدء في تثبيت Helm.
الخطوة 1 — تثبيت Helm 3
في هذا القسم، ستقوم بـ تثبيت Helm 3 باستخدام سكريبت الشل المُقدّم رسميًا.
ابدأ بالانتقال إلى /tmp
، حيث ستخزن سكريبت التثبيت عبر تشغيل:
قم بتنزيل السكريبت باستخدام الأمر التالي:
يمكنك فحص get_helm.sh
في محرر النصوص للتأكد من سلامته.
اجعله قابلاً للتنفيذ عن طريق تعيين الصلاحيات إلى ما يلي:
أخيرًا، قم بتشغيله لتثبيت Helm 3:
ستتلقى إخراجًا مشابهًا للتالي:
OutputDownloading 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 الموجود على يمين الصفحة.
يمكنك النقر على الزر الأزرق المجاور للأمر لنسخه. افعل ذلك للأمر الأول، وقم بتشغيله:
لإضافة مستودع إلى Helm، تقوم بتشغيل helm repo add
. البارامترات التي يقبلها هي اسم المستودع وموقعه.
سيكون الإخراج:
Output"ingress-nginx" has been added to your repositories
عند إضافة مستودع جديد، تحتاج إلى إبلاغ Helm بمحتواه عن طريق تشغيل:
ستتلقى الإخراج التالي، الذي يظهر أن التحديث كان ناجحًا:
OutputHang 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
والذي يُعتبر جزءًا من الرسم البياني. ما لم تقم بتنزيل الرسم البياني إلى جهازك، ستحتاج إلى تشغيل الأمر التالي لعرضه:
لعرض المتغيرات المتاحة لـ ingress-nginx
، قم بتغيير اسم_الرسم_البياني
:
سيكون الإخراج طويلًا يعرض محتويات values.yaml
لـ ingress-nginx
.
لتثبيت رسم بياني، يمكنك استخدام helm install
:
A release is a deployed instance of the chart, and here you’re calling it ingress-nginx
.
سيقوم هذا الأمر بتثبيت الرسم البياني في عنقودك باستخدام القيم الافتراضية للمتغيرات. إذا كنت ترغب في تعديل بعضها، يمكنك تمرير قيم المتغيرات الجديدة باستخدام --set
:
يمكنك تكرار --set
للعديد من المتغيرات حسب الحاجة. نظرًا لأننا لن نُخصصها الآن، قم بتثبيته كما هو عن طريق تشغيل:
سيكون الإخراج مشابهًا للتالي:
OutputNAME: 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
:
ستجد أن ingress-nginx
هو الرسم البياني الوحيد المنشأ في الوقت الحالي:
OutputNAME 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
يمكنك العثور على الخدمات المتوفرة في مجموعتك عن طريق تشغيل:
سيكون الإخراج مماثلًا لهذا:
OutputNAME 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
الذي يتحكم في عدد وحدات تحكم المراقب المنشأة. بشكل افتراضي، يتم تعيينه على واحد، يمكنك التحقق من ذلك عن طريق سرد الوحدات المتاحة:
سوف تجد أن هناك وحدة واحدة فقط:
OutputNAME READY STATUS RESTARTS AGE
ingress-nginx-controller-7fc74cf778-kjtst 1/1 Running 0 12m
إذا كنت ترغب في نشر المزيد لضمان الاحتياطية (مثل ثلاثة)، يمكنك ترقية
الإصدار وتعيين المتغير على 3
عن طريق التشغيل:
كما يتم تمرير --reuse-values
، مما يُعلم Helm بأن يستند التغييرات إلى الإصدار المنشور مسبقًا، محافظًا على التكوين السابق.
في الإخراج، سوف يقووم Helm بزيادة التنازل للإشارة إلى أن الإصدار قد تم ترقيته:
OutputNAME: ingress-nginx
LAST DEPLOYED: Wed Feb 24 12:07:54 2021
NAMESPACE: default
STATUS: deployed
REVISION: 2
TEST SUITE: None
NOTES:
...
يمكنك سرد الوحدات المتاحة عن طريق التشغيل:
سوف تجد ثلاث وحدات مُدرجة، بدلاً من واحدة:
OutputNAME 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
:
يمكنك استخدامه للتراجع عن التغييرات التي قمت بها على ingress-nginx
عن طريق العودة إلى النسخة 1
:
سوف تتلقى الناتج التالي، مما يشير إلى نجاح الإجراء:
OutputRollback was a success! Happy Helming!
يمكنك التحقق من النسخة الحالية عن طريق عرض الإصدارات:
ستجد أن النسخة الحالية الآن هي 3
، وليس 1
:
OutputNAME 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 التي تم نشرها عن طريق تشغيل:
ستجد أن هناك واحد فقط:
OutputNAME READY STATUS RESTARTS AGE
ingress-nginx-controller-7fc74cf778-kjtst 1/1 Running 0 41m
لحذف إصدار وجميع نسخه، يمكنك استخدام helm delete
:
بما أنك لن تحتاج إليها بعد الآن، احذف ingress-nginx
عبر تشغيل الأمر التالي:
سيكون الناتج:
Outputrelease "ingress-nginx" uninstalled
يمكنك استعراض الإصدارات للتحقق من عدم وجود أي منها:
سيكون جدول الناتج بدون صفوف:
OutputNAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
الآن بعد حذف الإصدار، يمكنك إعادة استخدام اسمه للنشرات المستقبلية.
الخطوة 6 — (اختياري) إنشاء رسومات مخصصة
في هذه الخطوة الاختيارية، ستتعلم كيفية إنشاء رسم بياني مخصص، وأين تضع تعريفات الموارد الخاصة بك، وكيفية تعبئتها للتوزيع الأكثر تقدمًا.
ستقوم بإنشاء رسم بياني جديد يسمى 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
عبر التشغيل:
ستجد أن لديها توجيهات القوالب لتوليد القيم المحاطة بالأقواس المزدوجة:
المتغيرات المشار إليها متاحة للمستخدم ومحددة في values.yaml
. يتم تخزين نص NOTES
الذي يظهر بعد نشر Helm في NOTES.txt
، وهو مفهرس أيضًا. يتم تحديد بيانات تعريف المخطط، مثل الاسم والإصدار وإصدار البرنامج المُنشأ، في Chart.yaml
:
للتحقق من ما سينشئه Helm، يمكنك تمرير --dry-run
و --debug
إلى helm install
مشيرًا إلى دليل المخطط:
سيكون الإخراج طويلًا وسيحتوي على جميع تعريفات الموارد النهائية التي سيتم تطبيقها على مجموعتك. أثناء عملك على المخطط الخاص بك، يمكنك استخدام helm upgrade
لنشر إصدارات جديدة على Kubernetes.
عندما يحين الوقت لمشاركة المخطط النهائي الخاص بك، يمكنك تجميعه للتوزيع عبر تشغيل:
سيكون الإخراج:
OutputSuccessfully packaged chart and saved it to: .../example-chart-0.1.0.tgz
يمكن تثبيت المخطط المجمع تمامًا كما هو الحال مع تلك المضافة إلى المستودعات:
في هذه الخطوة، قمت بإنشاء مخطط مخصص ونشرته. كما قمت بتجميعه وتعرفت على هيكله.
الاستنتاج
أنت تعرف الآن كيفية استخدام Helm لتثبيت وترقية البرمجيات المنشأة على مجموعة Kubernetes الخاصة بك. لقد أضفت مستودعات مخططات، وتعرفت على سبب أهميتها وكيف يمكن لـ ArtifactHub مساعدتك في العثور عليها. كما قمت بإنشاء مخطط مخصص جديد وتعرفت على تناوب الإصدارات وكيفية الرجوع إلى الخلف إذا لزم الأمر.
لمزيد من المعلومات حول إنشاء الرسوم البيانية المخصصة، قم بزيارة الدليل الرسمي.