نحوه نصب نرم افزار روی خوشه های Kubernetes با مدیریت بسته Helm 3

مقدمه

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
  • هنگامی که به خوشه صحیح متصل شدید، برای شروع نصب Helm به مرحله 1 ادامه دهید.

مرحله 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 را روی دستگاه خود نصب کرده اید. اکنون با مخازن نمودار و نحوه استفاده از آنها آشنا خواهید شد.

مرحله 2 – راه اندازی مخازن نمودار

نمودارهای هلم در مخازن نمودار ذخیره می شوند که میزبانی آن برای هر کسی امکان پذیر است. به طور پیش فرض، Helm 3 با هیچ مخزن از قبل پیکربندی نشده است. نسخه‌های قبلی Helm شامل یک مخزن نمودار مرکزی بود. با این حال، طراحی Helm 3 عمدا به توسعه‌دهندگان نمودار تبدیل شد که مخزن خود را مدیریت می‌کردند و اجازه آزادی بیشتر و انتشار سریع‌تر را می‌داد. این بدان معنی است که برای هر نموداری که می خواهید استفاده کنید، باید مطمئن شوید که مخزن میزبانی را به نصب Helm خود اضافه کرده اید.

برای کمک به یافتن مخزن مناسب، می‌توانید از ArtifactHub.io، یک وب‌سایت منبع باز که توسط CNCF مدیریت می‌شود و نمودارهای Helm و مخازن آن‌ها را فهرست‌بندی می‌کند، استفاده کنید. همچنین نمودارهای محبوب و مفیدی را که سایر پروژه‌های CNCF استفاده می‌کنند ردیابی می‌کند، بنابراین با مخزن پایداری که نسخه‌های قبلی Helm از آن کار می‌کردند متفاوت است. برای پروژه های رایج، مانند ورودی های Nginx یا ابزارهای نظارت، یک منبع عالی است.

می توانید نموداری را که می خواهید نصب کنید از طریق صفحه اصلی جستجو کنید. جستجوی nginx تمام نمودارهای نمایه شده مربوط به آن را نشان می دهد.


شما نسخه انجمن تحت مدیریت تیم Kubernetes را نصب خواهید کرد. ingress-nginx را جستجو کنید تا آن را در نتایج خود پیدا کنید. برای دسترسی به صفحه آن را انتخاب کنید.


هر نمودار باید دارای توضیحاتی باشد که جزئیات کار را به همراه دستوراتی برای اضافه کردن مخزن آن به نصب و نصب نمودار داشته باشد. در غیر این صورت، همچنان می توانید با فشار دادن دکمه INSTALL در سمت راست صفحه، دستورات لازم را دریافت کنید.


برای کپی کردن آن می توانید روی دکمه آبی رنگ کنار دستور کلیک کنید. برای دستور اول این کار را انجام دهید و آن را اجرا کنید:

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 – نصب نمودار هلم

در بخش قبل، مخزن نمودار 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 همچنین اطلاعات رایج، مانند وضعیت انتشار و فضای نامی که در آن مستقر شده است را فهرست می کند. بخش NOTES بین نمودارها متفاوت است و معمولاً حاوی راهنمایی برای شروع سریع است یا در مورد برخی از مشکلات رایج هنگام استفاده از منابع نمودار هشدار می دهد. در اینجا، اشاره می کند که Load Balancer در حال ایجاد است و ممکن است تکمیل آن مدتی طول بکشد.

برای بررسی نمودارهای مستقر شده، از فهرست فرمان استفاده کنید:

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 هر تغییری، از جمله بازگشت، را به عنوان یک تجدید نظر جدید در یک نسخه می داند. با بررسی تعداد پادهای مستقر شده با اجرای:

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 – (اختیاری) ایجاد نمودارهای سفارشی

در این مرحله اختیاری، نحوه ایجاد یک نمودار سفارشی، محل قرار دادن تعاریف منابع و نحوه بسته بندی آن برای توزیع بیشتر را خواهید آموخت.

شما یک نمودار جدید به نام نمونه-نمودار ایجاد خواهید کرد. برای ایجاد آن دستور زیر را اجرا کنید:

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 پس از استقرار در 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 می تواند به شما در یافتن آنها کمک کند. شما همچنین یک نمودار سفارشی جدید ایجاد کرده‌اید و در مورد بازبینی‌های انتشار و نحوه برگشت در صورت لزوم یاد گرفته‌اید.

[تعداد: 1   میانگین: 5/5]
دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

شاید دوست داشته باشید