مقدمة عملية لمدير مجموعة Kubernetes - Helm



المقالة هي استمرار منطقي لمنشورنا الأخير حول تاريخ مدير الحزم لـ Kubernetes - Helm . هذه المرة سوف نتناول مرة أخرى مشكلات الجهاز وعمل Helm الحالي ( الإصدار 2.x ) ، بالإضافة إلى الرسوم البيانية والمستودعات المدارة ، وبعد ذلك سننتقل إلى ممارسة تثبيت Helm في مجموعة Kubernetes واستخدام الرسوم البيانية.

الدخول


Helm هي أداة لإدارة المخططات.

يصف المخطط مجموعة البيانات اللازمة لنسخ التطبيق في مجموعة Kubernetes. يمكن أن تحتوي على مخططات مدمجة ويمكن استخدامها لوصف الخدمات الكاملة ، التي تتكون من العديد من الموارد التابعة ، ووصف المكونات المستقلة الفردية. على سبيل المثال ، يصف الرسم البياني الثابت / gitlab-ce حلاً كاملاً باستخدام مخططات redis و postgresql المستقلة.

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

يتحمل جانب العميل في Helm مسؤولية إنشاء المخطط ونقل مكون Tiller إلى مجموعة Kubernetes جنبًا إلى جنب مع معلمات المستخدم. بدوره ، فإن تيلر مسؤول عن دورة حياة مثيل الرسم البياني الذي تم إطلاقه. (فقط في حالة ، دعني أذكرك بأن التحديث الرئيسي التالي لـ Helm - الإصدار 3 - لن يكون لديه Tiller بعد الآن.)

والآن - الأشياء الأولى أولاً.

التثبيت والترقية


يتطلب هيلم Kubernetes للعمل. يمكنك استخدام Minikube مثبت محليًا (انظر أيضًا " الشروع في Kubernetes مع Minikube ") أو أي مجموعة أخرى متاحة.

لنبدأ بتثبيت العميل: حدد الإصدار ، وقم بتنزيل أرشيف النظام الخاص بك وفكه ، ونقل الملف القابل للتنفيذ ...

$ curl https://storage.googleapis.com/kubernetes-helm/helm-v2.10.0-linux-amd64.tar.gz | tar -zxv $ sudo mv linux-amd64/helm /usr/local/bin/helm 

بعد ذلك ، قم بتثبيت Tiller في الكتلة. بشكل افتراضي ، يتم تثبيت Tiller في kubectl سياق kubectl السياق kubectl config current-context ) ، في مساحة اسم kube-system ، ولكن يمكن تغيير ذلك باستخدام الخيارات المناسبة ومتغيرات البيئة - يتم وصفها في المساعدة ( helm init --help help). دعنا نكمل التثبيت ونلقي نظرة على الموارد التي تم إنشاؤها في المجموعة:

 $ helm init $HELM_HOME has been configured at /home/habr/.helm. (Use --client-only to suppress this message, or --upgrade to upgrade Tiller to the current version.) Happy Helming! $ kubectl get all --selector=name=tiller --namespace kube-system NAME READY STATUS RESTARTS AGE po/tiller-deploy-df4fdf55d-h5mvh 0/1 Running 0 5s NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE svc/tiller-deploy 10.107.191.68 <none> 44134/TCP 5s NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE deploy/tiller-deploy 1 1 1 0 5s NAME DESIRED CURRENT READY AGE rs/tiller-deploy-df4fdf55d 1 1 0 5s 

الآن تم تثبيت Tiller في المجموعة وهو جاهز لإدارة الإصدار ، والتفاعل مع Kubernetes API.

ملاحظة : أثناء التثبيت والترقية (الخيار - --upgrade ) لـ Tiller ، يمكنك تحديد صورة معينة بدلاً من استخدام أحدث إصدار ثابت بشكل افتراضي. يتم تحديد اسم الصورة العشوائية من خلال الخيار --tiller-image ، ومع --canary-image ، سيتم استخدام --canary-image عند طرح Tiller. تسمح لك صورة الكناري باستخدام Tiller ، الذي يتوافق إصدار رمزه مع الفرع الرئيسي.

يتم تخزين بيانات الخدمة في مجموعة في موارد خاصة ، ConfigMaps ، لذلك لا يؤدي إلغاء تثبيت Tiller وإعادة تثبيته إلى فقدان البيانات من الإصدارات المثبتة مسبقًا.

مستودعات التخطيط


مستودع المخططات - خادم HTTP لتخزين وتوزيع الرسوم البيانية. يتم تخزين معلومات حول المخططات في المستودع في ملف index.yaml . كما يشير إلى المكان الذي يمكن تحميل كل مخطط منه. في أغلب الأحيان ، يتم تخزين المخططات مع ملف index.yaml ، ولكن لا شيء يمنع وضعها على خادم آخر. عادة ما ينزل هيكل الملف إلى شكل مسطح:

 . ├── index.yaml ├── artifactory-7.3.0.tgz ├── docker-registry-1.5.2.tgz ... └── wordpress-2.1.10.tgz 

بشكل افتراضي ، يستخدم Helm مستودع مخطط Kubernetes الرسمي . يحتوي على مخططات حالية مصممة بعناية لحل العديد من المشاكل التطبيقية. يسمى هذا المستودع مستقرًا :

 $ helm repo list NAME URL stable https://kubernetes-charts.storage.googleapis.com 

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

عند استخدام مستودعات المخططات ، يمكن إضافتها وإزالتها. لكي تكون إصدارات المخطط محدثة ، يجب عليك تحديث الفهرس بشكل دوري. سأعطي مثالاً لمخزن bitnami العام ، حيث يتم استخدام معظم المخططات في مستودع Helm الرسمي:

 $ helm repo add bitnami https://charts.bitnami.com/bitnami "bitnami" has been added to your repositories $ helm repo update Hang tight while we grab the latest from your chart repositories... ...Successfully got an update from the "bitnami" chart repository ...Successfully got an update from the "stable" chart repository Update Complete. Happy Helming! $ helm repo remove bitnami "bitnami" has been removed from your repositories 

التالي - البحث من خلال المستودعات. تُظهر مكالمة helm search بدون مساعدة الوسائط كافة الرسوم البيانية المتاحة:

 $ helm search NAME CHART VERSION APP VERSION DESCRIPTION stable/acs-engine-autoscaler 2.2.0 2.1.1 Scales worker nodes within agent pools stable/aerospike 0.1.7 v3.14.1.2 A Helm chart for Aerospike in Kubernetes stable/anchore-engine 0.2.1 0.2.4 Anchore container analysis and policy evaluation engine s... stable/apm-server 0.1.0 6.2.4 The server receives data from the Elastic APM agents and ... stable/ark 1.2.1 0.9.1 A Helm chart for ark stable/artifactory 7.3.0 6.1.0 Universal Repository Manager supporting all major packagi... ... stable/weave-cloud 0.2.2 0.2.0 Weave Cloud is a add-on to Kubernetes which provides Cont... stable/weave-scope 0.9.3 1.6.5 A Helm chart for the Weave Scope cluster visualizer. stable/wordpress 2.1.10 4.9.8 Web publishing platform for building blogs and websites. stable/xray 0.4.1 2.3.0 Universal component scan for security and license invento... stable/zeppelin 1.0.1 0.7.2 Web-based notebook that enables data-driven, interactive ... stable/zetcd 0.1.9 0.0.3 CoreOS zetcd Helm chart for Kubernetes 

في حقل keywords الاختيارية في Chart.yaml يحدد المطورون العلامات التي تُستخدم لتبسيط البحث في مستودعات Chart.yaml :

 $ helm search web NAME CHART VERSION APP VERSION DESCRIPTION stable/cerebro 0.3.1 0.8.1 A Helm chart for Cerebro - a web admin tool that replaces... stable/chronograf 0.4.5 1.3 Open-source web application written in Go and React.js th... stable/jasperreports 2.0.4 7.1.0 The JasperReports server can be used as a stand-alone or ... stable/joomla 2.0.9 3.8.12 PHP content management system (CMS) for publishing web co... stable/kubernetes-dashboard 0.7.2 1.8.3 General-purpose web UI for Kubernetes clusters stable/odoo 2.0.7 11.0.20180815 A suite of web based open source business apps. stable/phabricator 2.1.9 2018.34.0 Collection of open source web applications that help soft... stable/redmine 4.1.0 3.4.6 A flexible project management web application. stable/rethinkdb 0.1.4 0.1.0 The open-source database for the realtime web stable/schema-registry-ui 0.1.0 v0.9.4 This is a web tool for the confluentinc/schema-registry i... stable/superset 0.1.2 0.24.0 Apache Superset (incubating) is a modern, enterprise-read... stable/testlink 2.0.3 1.9.17 Web-based test management system that facilitates softwar... stable/tomcat 0.1.0 7 Deploy a basic tomcat application server with sidecar as ... stable/wordpress 2.1.10 4.9.8 Web publishing platform for building blogs and websites. ... $ helm search cms blog NAME CHART VERSION APP VERSION DESCRIPTION stable/drupal 1.1.3 8.5.6 One of the most versatile open source content management ... stable/joomla 2.0.9 3.8.12 PHP content management system (CMS) for publishing web co... stable/wordpress 2.1.10 4.9.8 Web publishing platform for building blogs and websites 

ملاحظة: عند استخدام الأمر helm search ، قد تواجه عملية غير مستقرة للعديد من الفلاتر: يعتمد مدى توفر النتيجة على ترتيب الإشارة وعدد الفلاتر.

بعد تضييق دائرة البحث إلى عدة خيارات ، يمكنك المتابعة إلى تحليل أكثر تفصيلاً للمخططات - باستخدام أمر helm inspect . يعرض محتويات ملفات الرسم البياني Chart.yaml ، README.md . README.md و README.md . يمكن عرض كل قسم على حدة مع الوسيطات المقابلة: chart values readme .

في المستودع الرسمي ، يتم توثيق الرسوم البيانية بشكل جميل وتحتوي على أمثلة الاستخدام ، وبعض الرسوم البيانية لديها تكوينات جاهزة للإنتاج . على سبيل المثال ، يتم توفير readme الجيد بواسطة ثابت / وورد (للحصول على الإخراج في وحدة التحكم ، انظر helm inspect readme stable/wordpress ) .

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

التطبيق الأول


على سبيل المثال ، تم تحديد الرسم البياني الثابت / وورد .

ويستخدم المعلمات الموضحة في ملف values.yaml . values.yaml . يمكنك تجاوز المعلمات في ملف YAML ثم نقل هذا الملف أثناء التثبيت (الخيارات -f ، --values ). بالإضافة إلى ذلك ، يمكن تجاوزها مباشرة في سطر الأوامر (خيارات - --set ، --set-string و --set-file ). جميع الخيارات متاحة لاستخدام عدد تعسفي من المرات. في نفس الوقت ، يكون للتغلب على سطر الأوامر الأسبقية على الملفات ذات المعلمات.

عند تعيين المخطط ، يمكنك تعيين اسم الإصدار مع خيار - --name أو استخدام الاسم العشوائي الذي تم إنشاؤه بواسطة Helm.

قم بتعيين مخطط التكوين للإنتاج ، وتغيير اسم المدونة ، وتعطيل حفظ بيانات WordPress في PersistentVolumeClaim (لمزيد من المعلومات حول التخزين المستمر ، راجع وثائق Kubernetes ) :

 $ curl https://raw.githubusercontent.com/helm/charts/master/stable/wordpress/values-production.yaml --output values-production.yaml $ helm install --name habr --set "wordpressBlogName=Flant's Blog!" --set "persistence.enabled=false" -f values-production.yaml stable/wordpress NAME: habr LAST DEPLOYED: Fri Aug 31 15:17:57 2018 NAMESPACE: default STATUS: DEPLOYED RESOURCES: ==> v1/Secret NAME TYPE DATA AGE habr-mariadb Opaque 2 0s habr-wordpress Opaque 2 0s ==> v1/ConfigMap NAME DATA AGE habr-mariadb-init-scripts 1 0s habr-mariadb 1 0s habr-mariadb-tests 1 0s ==> v1/Service NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE habr-mariadb ClusterIP 10.111.7.232 <none> 3306/TCP 0s habr-wordpress ClusterIP 10.106.129.88 <none> 80/TCP,443/TCP 0s ==> v1beta1/Deployment NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE habr-wordpress 3 3 3 0 0s ==> v1beta1/StatefulSet NAME DESIRED CURRENT AGE habr-mariadb 1 1 0s ==> v1beta1/Ingress NAME HOSTS ADDRESS PORTS AGE wordpress.local-habr wordpress.local 80, 443 0s ==> v1/Pod(related) NAME READY STATUS RESTARTS AGE habr-wordpress-7955b95fd-hh7b9 0/1 ContainerCreating 0 0s habr-wordpress-7955b95fd-tgsxk 0/1 ContainerCreating 0 0s habr-wordpress-7955b95fd-xjz74 0/1 ContainerCreating 0 0s habr-mariadb-0 0/1 ContainerCreating 0 0s NOTES: 1. Get the WordPress URL: You should be able to access your new WordPress installation through https://wordpress.local/admin 2. Login with the following credentials to see your blog echo Username: user echo Password: $(kubectl get secret --namespace default habr-wordpress -o jsonpath="{.data.wordpress-password}" | base64 --decode) 

في حالة العمل مع مجموعة كاملة ، يمكنك اتباع التوصيات من كتلة الملاحظات أعلاه. إذا كان لديك Minikube ، افتح الموقع في متصفح على النحو التالي:

 $ minikube service habr-wordpress Waiting, endpoint for service is not ready yet... Opening kubernetes service default/habr-wordpress in default browser... 

تهانينا ، التطبيق في كتلة!



ظهر مخطط تفصيلي مع WordPress في قائمة جميع إصدارات Helm:

 $ helm list NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE habr 1 Fri Aug 31 15:17:57 2018 DEPLOYED wordpress-2.1.10 4.9.8 default 

الخطوة التالية هي تحديث إصدارنا وتغيير الصورة مع المدونة. على سبيل المثال ، سيتم استخدام علامة أخرى من نفس مستودع Docker ( 4.9.8-ol-7 ):

 $ helm upgrade habr --set "image.tag=4.9.8-ol-7" --set "wordpressBlogName=Flant's Blog!" --set "persistence.enabled=false" -f values-production.yaml stable/wordpress Release "habr" has been upgraded. Happy Helming! LAST DEPLOYED: Fri Aug 31 15:21:08 2018 NAMESPACE: default STATUS: DEPLOYED RESOURCES: ==> v1/Service NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE habr-mariadb ClusterIP 10.111.7.232 <none> 3306/TCP 3m habr-wordpress ClusterIP 10.106.129.88 <none> 80/TCP,443/TCP 3m ==> v1beta1/Deployment NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE habr-wordpress 3 4 2 0 3m ==> v1beta1/StatefulSet NAME DESIRED CURRENT AGE habr-mariadb 1 1 3m ==> v1beta1/Ingress NAME HOSTS ADDRESS PORTS AGE wordpress.local-habr wordpress.local 80, 443 3m ==> v1/Pod(related) NAME READY STATUS RESTARTS AGE habr-wordpress-66f4fd6b74-gqwhh 0/1 Pending 0 0s habr-wordpress-66f4fd6b74-mf6vj 0/1 Pending 0 0s habr-wordpress-7955b95fd-hh7b9 1/1 Running 2 3m habr-wordpress-7955b95fd-tgsxk 1/1 Running 2 3m habr-wordpress-7955b95fd-xjz74 0/1 Terminating 2 3m habr-mariadb-0 1/1 Running 0 3m ==> v1/Secret NAME TYPE DATA AGE habr-mariadb Opaque 2 3m habr-wordpress Opaque 2 3m ==> v1/ConfigMap NAME DATA AGE habr-mariadb-init-scripts 1 3m habr-mariadb 1 3m habr-mariadb-tests 1 3m NOTES: 1. Get the WordPress URL: You should be able to access your new WordPress installation through https://wordpress.local/admin 2. Login with the following credentials to see your blog echo Username: user echo Password: $(kubectl get secret --namespace default habr-wordpress -o jsonpath="{.data.wordpress-password}" | base64 --decode) 

يرجى ملاحظة أنه عند تحديث Tiller يقارن المخطط المستلم مع المعلمات مع آخر حفظ المحفوظة وينفذ الطلبات المقابلة في Kubernetes API ، ولا تؤخذ الحالة الحالية لموارد الإصدار في الاعتبار . من المهم فهم هذه الميزة وعدم ارتكاب الأخطاء:

  • لا يختلف التحديث عن التثبيت: يرسل عميل Helm مخطط Tiller مع المعلمات ، لذلك يجب أن تكون حذرًا وتذكر تحديد المعلمات والملفات بالمعلمات التي تم تعيينها أثناء التثبيت (أو أثناء التحديث السابق) والتي لا يجب تجاهلها. في المثال أعلاه ، هذا --set "wordpressBlogName=Flant's Blog!" --set "persistence.enabled=false" -f values-production.yaml --set "wordpressBlogName=Flant's Blog!" --set "persistence.enabled=false" -f values-production.yaml .
  • يجب تقديم التطبيقات التي يتم طرحها باستخدام Helm فقط باستخدام Helm: لن تأخذ Helm التغييرات اليدوية التي تم إجراؤها باستخدام kubectl في الاعتبار وقد تؤدي إلى عواقب لا رجعة فيها.

ومن هنا الاستنتاج المنطقي: يجب أن تكون العملية مؤتمتة ، ولا يجب إجراء التغييرات إلا من خلال الالتزام بمستودع Git ، وتغيير ملفات التخطيط وملف تكوين CI.

يمكن دائمًا التحقق من حالة مكونات إصدار التطبيق في نظام المجموعة على النحو التالي:

 $ helm status habr LAST DEPLOYED: Fri Aug 31 15:21:08 2018 NAMESPACE: default STATUS: DEPLOYED RESOURCES: ==> v1/Secret NAME TYPE DATA AGE habr-mariadb Opaque 2 4m habr-wordpress Opaque 2 4m ==> v1/ConfigMap NAME DATA AGE habr-mariadb-init-scripts 1 4m habr-mariadb 1 4m habr-mariadb-tests 1 4m ==> v1/Service NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE habr-mariadb ClusterIP 10.111.7.232 <none> 3306/TCP 4m habr-wordpress ClusterIP 10.106.129.88 <none> 80/TCP,443/TCP 4m ==> v1beta1/Deployment NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE habr-wordpress 3 4 2 3 4m ==> v1beta1/StatefulSet NAME DESIRED CURRENT AGE habr-mariadb 1 1 4m ==> v1beta1/Ingress NAME HOSTS ADDRESS PORTS AGE wordpress.local-habr wordpress.local 80, 443 4m ==> v1/Pod(related) NAME READY STATUS RESTARTS AGE habr-wordpress-66f4fd6b74-gqwhh 0/1 Pending 0 1m habr-wordpress-66f4fd6b74-mf6vj 1/1 Running 0 1m habr-wordpress-7955b95fd-hh7b9 1/1 Running 3 4m habr-wordpress-7955b95fd-tgsxk 1/1 Running 3 4m habr-mariadb-0 1/1 Running 1 4m NOTES: 1. Get the WordPress URL: You should be able to access your new WordPress installation through https://wordpress.local/admin 2. Login with the following credentials to see your blog echo Username: user echo Password: $(kubectl get secret --namespace default habr-wordpress -o jsonpath="{.data.wordpress-password}" | base64 --decode) 

يتيح لك Helm التراجع إلى مراجعة إصدار محددة . يوجد حاليًا تنقيحتان:

 $ helm history habr REVISION UPDATED STATUS CHART DESCRIPTION 1 Fri Aug 31 15:17:57 2018 SUPERSEDED wordpress-2.1.10 Install complete 2 Fri Aug 31 15:21:08 2018 DEPLOYED wordpress-2.1.10 Upgrade complete 

استرجاع التطبيق إلى حالته الأصلية:

 $ helm rollback habr 1 Rollback was a success! Happy Helming! 

الآن تم تجديد سجل المراجعة بسجل واحد:

 $ helm history habr REVISION UPDATED STATUS CHART DESCRIPTION 1 Fri Aug 31 15:17:57 2018 SUPERSEDED wordpress-2.1.10 Install complete 2 Fri Aug 31 15:21:08 2018 SUPERSEDED wordpress-2.1.10 Upgrade complete 3 Fri Aug 31 15:25:06 2018 DEPLOYED wordpress-2.1.10 Rollback to 1 

المقالة على وشك الانتهاء ولم يعد الإصدار مطلوبًا؟

 $ helm delete habr release "habr" deleted 

هل تم حذفه حقًا؟ ..

يزيل الأمر موارد Kubernetes المرتبطة بالإصدار ، وليس الإصدار نفسه . تظل جميع المعلومات حول الإصدار متاحة ، بما في ذلك تاريخها:

 $ helm list --all NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE habr 3 Fri Aug 31 15:25:06 2018 DELETED wordpress-2.1.10 4.9.8 default 

 $ helm history habr REVISION UPDATED STATUS CHART DESCRIPTION 1 Fri Aug 31 15:17:57 2018 SUPERSEDED wordpress-2.1.10 Install complete 2 Fri Aug 31 15:21:08 2018 SUPERSEDED wordpress-2.1.10 Upgrade complete 3 Fri Aug 31 15:25:06 2018 DELETED wordpress-2.1.10 Deletion complete 

ملاحظة : كما هو مخطط ، يمكن إرجاع الإصدار البعيد إلى الإصدارات السابقة ، ولكن في الإصدارات الأخيرة لا تعمل هذه الميزة - راجع المشكلة رقم 3722 للحصول على التفاصيل.

لإزالة الإصدار بالكامل ، استخدم الخيار --purge :

 $ helm delete --purge habr release "habr" deleted 

تلخيص


تتحدث هذه المقالة عن البنية الأساسية لـ Helm 2 ومكوناته ووظائفها ، بالإضافة إلى الأساسيات الأساسية والرسوم البيانية والإصدارات ومستودعات الرسوم البيانية. لقد قمنا بتثبيت Helm في مجموعة Kubernetes واكتسبنا فهمًا لدورة حياة الإصدار والأوامر الأساسية للعمل معها.

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

ملاحظة


Source: https://habr.com/ru/post/ar420437/


All Articles