آنچه در این مقاله میخوانید
نحوه استقرار اپلیکیشن در Kubernetes با Helm
۱۸ مرداد ۱۴۰۴
زمانیکه صحبت از استقرار اپلیکیشنها در کوبرنتیز به میان میآید، اولین چیزی که به ذهنمان میرسد، پیچیدگیهای فراوان و مراحل طولانی آن است. مخصوصا وقتی بخواهیم چندین سرویس را همزمان در یک کلاستر راه بیاندازیم، ممکن است با چالشهای زیادی روبهرو شویم. در چنین موقعیتهایی Helm به کمک ما میآید. Helm یک ابزار برای مدیریت پکیجها در Kubernetes است که فرایند دیپلوی اپلیکیشنها را بسیار ساده میکند. بهجای اینکه تمام منابع و تنظیمات را بهصورت دستی پیکربندی کنید، با Helm فقط باید از چارتها(Charts) استفاده کنید، آنها همه موارد را مدیریت و تنظیم میکنند. بنابراین اگر میخواهید فرایند دیپلوی را به حداقل زمان و خطا برسانید، این مقاله از سری آموزشهای کوبرنتیز را از دست ندهید، و تا انتهای این مطلب همراه ما باشید:)
توجه کنید که در این معماری نهایی، چهار سرویس درون کلاستر مستقر خواهند شد؛ kanban-ui (فرانتاند)، kanban-app (بکاند)، postgres (پایگاهداده)، adminer (ابزار GUI برای مدیریت دیتابیس)
پیشنیازها
قبل از شروع آموزش این مقاله، ابزارهای زیر باید روی سیستم شما نصب شده باشد:
- Docker
- Minikube (کلاستر Kubernetes محلی)
- kubectl (ابزار CLI برای Kubernetes)
- Helm

آنچه در این مقاله میخوانید:
- تکرار و پیچیدگی YAMLها
- گام اول: نصب Helm
- گام دوم: ایجاد Helm Chart
- گام سوم: شخصیسازی Chart
- گام چهارم: استقرار اپلیکیشن
- جمعبندی
- سوالات متداول
تکرار و پیچیدگی YAMLها
در روش عادی و بدون Helm برای استقرار اپلیکیشن در کوبرنتیز، با kubectl
، حداقل باید دو فایل YAML برای هر اپلیکیشن بهصورت جداگانه بنویسیم: یکی برای Deployment و یکی برای Service. اگر اپلیکیشن پیچیدهتر باشد مثل Postgres، باید PersistentVolumeClaim و ConfigMap هم اضافه کنیم.
این موضوع باعث میشود در پروژههای حتی ساده، دهها فایل مشابه اما تکراری تولید شود، بنابراین راهحل چیست؟ استفاده از Helm!
نحوه ساخت کلاستر Kubernetes مدیریتشده با Terraform را در مقاله زیر میتوانید مطالعه کنید.
ساخت کلاستر Kubernetes با Terraform
گام اول: نصب Helm
همانطور که در مقدمه گفتیم، Helm یک ابزار مدیریت پکیج در کوبرنتیز است که به استقرار اپلیکیشنهای پیچیده کمک میکند. برای مثال اگر بخواهیم Prometheus را روی یک کلاستر اجرا کنیم، بهسادگی میتوانیم از chart آمادهی آن استفاده کنیم. برای اینکار دستور زیر را اجرا کنید:
$ helm install stable/prometheus
با این دستور، ابزار Helm همه منابع مورد نیاز را ایجاد میکند؛ از Service و Deployment گرفته تا ConfigMap و PersistentVolume؛ بدون نیاز به نوشتن حتی یک خط YAML دستی!
حتما این را بدانید، چارتهایی که در Helm وجود دارند، معمولا تنظیمات پیشفرض دارند، اما میتوانید آنها را با یک فایل YAML نیز تغییر دهید و هنگام نصب این تغییرات را به chart اعمال کنید. نکته مهم این است که، قدرت Helm به چارتهای آماده محدود نمیشود، شما میتوانید چارت اختصاصی خودتان را ایجاد کنید.
گام دوم: ایجاد Helm Chart
برای ایجاد chart، دستور زیر را وارد کنید:
$ helm create example
Creating example
خروجی:

با اجرای دستور بالا، یک فولدر با ساختار اولیه یک چارت ساخته میشود که شامل تمام فایلهای مورد نیاز برای تعریف منابع اپلیکیشن شما در Kubernetes است. فایلهایی مانند:
deployment.yaml
برای تعریف دپلویمنتservice.yaml
برای سرویسدهیvalues.yaml
برای تنظیم مقادیر قابل سفارشیسازی- یک فایل
Chart.yaml
که اطلاعات زیادی درباره چارت شما را نگه میدارد
حالا همه چیز آماده است تا شما مقادیر دلخواه خود را وارد کنید و با چند تغییر ساده، اپلیکیشن خود را استقرار دهید.
در فولدر templates/
، الگوهای Helm وجود دارند که با ترکیب با فایل values.yaml
، مجموعهای از اشیاء Kubernetes را تولید خواهند کرد.
گام سوم: شخصیسازی Chart
در این گام، چارت اختصاصی postgres را ایجاد میکنیم. اما قبل از آن، نصب و پیکربندیهای زیر را حتما انجام دهید:
- نصب داکر
- کلاستر Kubernetes محلی، minikube
- ابزار خط فرمان kubectl
زمانی که این ابزارها را نصب کردید، کلاستر minikube را راهاندازی کرده و پلاگین Ingress را فعال کنید:
$ minikube start
😄 minikube v1.8.1 on Ubuntu 18.04
✨ Automatically selected the docker driver
🔥 Creating Kubernetes in docker container with (CPUs=2) (8 available), Memory=2200MB (7826MB available) ...
🐳 Preparing Kubernetes v1.17.3 on Docker 19.03.2 ...
▪ kubeadm.pod-network-cidr=10.244.0.0/16
❌ Unable to load cached images: loading cached images: stat /home/wojtek/.minikube/cache/images/k8s.gcr.io/kube-proxy_v1.17.3: no such file or directory
🚀 Launching Kubernetes ...
🌟 Enabling addons: default-storageclass, storage-provisioner
⌛ Waiting for cluster to come online ...
🏄 Done! kubectl is now configured to use "minikube"
$ minikube addons enable ingress
🌟 The 'ingress' addon is enabled
پس از آن، نیاز خواهید داشت که فایل hosts خود را ویرایش کنید. مکان آن بسته به سیستمعامل شما متفاوت است.زمانی که آنرا پیدا کردید، خطوط زیر را به آن اضافه کنید:
172.17.0.2 adminer.k8s.com
172.17.0.2 kanban.k8s.com
سپس برای اینکه مطمئن شوید، تنظیمات بهصورت صحیح اعمال شدهاند، باید بررسی کنید که آدرس IP کلاستر minikube بر روی سیستم شما با آدرسی که در بالا آمده، یکسان باشد. برای اینکار دستور زیر را وارد کنید:
$ minikube ip
172.17.0.2
اکنون، میتوانیم اولین چارت Helm را با دستور زیر ایجاد کنیم:
$ helm create postgres
Creating postgres
بهتر است بدانید، به فایلهای تولید شده در فولدر ./templates
نیازی نداریم. بنابراین آنها را حذف کرده و تمام محتوای داخل فایل values.yaml را پاک میکنیم.
حالا میتوانیم تمام فایلهای لازم برای ایجاد چارت postgres را تعریف کنیم. اگر یادتان باشد برای استقرار آن با kubectl
به فایلهای YAML زیر نیاز داشتیم:(

این فایلها شامل تعاریف ConfigMap، Deployment، PersistentVolumeClaim و ClusterIP هستند. تعاریف کامل آنها را میتوان در یک ریپازیتوری پیدا کرد.
ابتدا بیایید یک قالب برای شیء Deployment پایگاه داده postgres ایجاد کنیم. بنابراین داخل فولدر./templates
یک فایل deployment.yaml
ایجاد میکنیم:
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ .Values.postgres.name }}
labels:
app: {{ .Values.postgres.name }}
group: {{ .Values.postgres.group }}
spec:
replicas: {{ .Values.replicaCount }}
selector:
matchLabels:
app: {{ .Values.postgres.name }}
template:
metadata:
labels:
app: {{ .Values.postgres.name }}
group: {{ .Values.postgres.group }}
spec:
volumes:
- name: {{ .Values.postgres.volume.name }}
persistentVolumeClaim:
claimName: {{ .Values.postgres.volume.pvc.name }}
containers:
- name: {{ .Values.postgres.name }}
image: {{ .Values.postgres.container.image }}
ports:
- containerPort: {{ .Values.postgres.container.port }}
envFrom:
- configMapRef:
name: {{ .Values.postgres.config.name }}
volumeMounts:
- name: {{ .Values.postgres.volume.name }}
mountPath: {{ .Values.postgres.volume.mountPath }}
در کد بالا و در نگاه اول ممکن است این بخشهای عجیب را بین دو جفت آکولاد مشاهده کنید، مانند {{ .Values.postgres.name }}
. اینها به زبان قالبسازی Go نوشته شدهاند و به مقداری اشاره دارند که در فایل values.yaml
قرار دارد که در فولدر ریشهی چارت قرار دارد.
برای مثال ذکر شده، Helm سعی میکند آن را مانند زیر با مقداری از فایل values.yaml
مطابقت دهد:
postgres:
name: postgres
مورد دیگر؛ مقداری برای ایمیج پایه Docker، که در image: {{ .Values.postgres.container.image }}
تعریف شده است، از موارد زیر گرفته میشود:
postgres:
name: postgres
container:
image: postgres:9.6-alpine
و همچنین، میتوانیم ساختار داخل این فایل را هر طور که بخواهیم تعریف کنیم. این استقرار دیتابیس، نیاز به ایجاد یک PersistentVolumeClaim دارد تا فضای ذخیرهسازی بر روی دیسک رزرو شود، پس نیاز داریم که یک قالب Helm به نام pvc.yaml
داخل پوشه ./templates
ایجاد کنیم:
apiVersion: v1
kind: {{ .Values.postgres.volume.kind }}
metadata:
name: {{ .Values.postgres.volume.pvc.name }}
spec:
accessModes:
- {{ .Values.postgres.volume.pvc.accessMode }}
resources:
requests:
storage: {{ .Values.postgres.volume.pvc.storage }}
این قالب کوتاهتر است و هیچ مورد جدیدی در آن وجود ندارد.
قالب بعدی که باید ایجاد کنیم، ClusterIP است، که به سایر Podها در داخل کلاستر اجازه میدهد به Pod حاوی postgres دسترسی پیدا کند؛ قالب service.yaml
:
apiVersion: v1
kind: Service
metadata:
name: {{ .Values.postgres.name }}
labels:
group: {{ .Values.postgres.group }}
spec:
type: {{ .Values.postgres.service.type }}
selector:
app: {{ .Values.postgres.name }}
ports:
- port: {{ .Values.postgres.service.port }}
targetPort: {{ .Values.postgres.container.port }}
در نهایت باید قالبی به نام config.yaml
برای ConfigMap
ایجاد کنیم.
این فایل اطلاعات مربوط به دیتابیس ایجاد شده، کاربر و رمزعبور آنرا نگه میدارد.
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ .Values.postgres.config.name }}
labels:
group: {{ .Values.postgres.group }}
data:
{{- range .Values.postgres.config.data }}
{{ .key }}: {{ .value }}
{{- end}}
در این قالب ممکن است با عبارتی مثل {{- range … }}
روبرو شوید که شبیه حلقه for each
در زبانهای برنامهنویسی است؛ یعنی Helm به ازای هر مقدار موجود در یک لیست (که در فایل values.yaml
تعریف شده)، یک بخش از قالب را تولید میکند، مانند زیر:
postgres:
config:
data:
- key: key
value: value
در داخل قالبها فقط مقادیر پیشفرض قرار دارند. اگر بخواهید از مقادیر واقعی یا شخصی سازی شده استفاده کنید، باید هنگام نصب این مجموعه روی کلاستر Kubernetes، آنها را تغییر (override) دهید.
فایل کامل values.yaml
به شکل زیر است:
replicaCount: 1
postgres:
name: postgres
group: db
container:
image: postgres:9.6-alpine
port: 5432
service:
type: ClusterIP
port: 5432
volume:
name: postgres-storage
kind: PersistentVolumeClaim
mountPath: /var/lib/postgresql/data
pvc:
name: postgres-persistent-volume-claim
accessMode: ReadWriteOnce
storage: 4Gi
config:
name: postgres-config
data:
- key: key
value: value
برای تکمیل ساخت اولین Chart، باید برخی از اطلاعات متادیتا(metadata) را در فایل Chart.yaml
ویرایش کنیم، مانند زیر:
apiVersion: v2
name: postgres
description: A Helm chart for PostgreSQL database
type: application
version: 0.1.0
appVersion: 1.16.0
keywords:
- database
- postgres
home: https://github.com/wkrzywiec/k8s-helm-helmfile/tree/master/helm
maintainers:
- name: Wojtek Krzywiec
url: https://github.com/wkrzywiec
بطوریکه در این گام، باید اطلاعاتی مانند نام چارت (name)، نسخه (version)، و سایر توضیحات مربوط به چارت Helm را داخل فایل Chart.yaml
قرار بدهید یا بهروزرسانی کنید تا چارت شما آماده استفاده باشد.
پس از آن، یک فایل جدید به نام kanban-postgres.yaml
بسازید که بایستی شامل مقادیر خاصی باشد. این فایل را بیرون از فولدر چارت postgres
قرار بدهید تا ساختار فولدرها چیزی شبیه به شکل زیر باشد:

داخل این فایل (kanban-postgres.yaml
) مقادیری را قرار دهید که مخصوص همین استقرار هستند. بهطور مثال اطلاعات لاگین دیتابیس Postgres، و باقی مقادیر را پیشفرض نگه میداریم:
postgres:
config:
data:
- key: POSTGRES_DB
value: kanban
- key: POSTGRES_USER
value: kanban
- key: POSTGRES_PASSWORD
value: kanban
برای آشنایی کامل با کوبرنتیز و نحوه کارکرد آن، مقاله زیر را از دست ندهید.
کوبرنتیز چیست؟
گام چهارم: استقرار اپلیکیشن
در این گام، اکنون همه موارد آماده شده، حالا میتوانید دیتابیس Postgres را داخل کلاستر مستقر کنید. در دنیای Helm، این کار را ایجاد یک نسخه (release) جدید میگویند.
$ helm install -f kanban-postgres.yaml postgres ./postgres
NAME: postgres
LAST DEPLOYED: Mon Apr 13 16:13:16 2020
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
$ helm list
NAME NAMESPACE REVISION STATUS CHART APP VERSION
postgres default 1 deployed postgres-0.1.0 1.16.0
$ kubectl get deployments
NAME READY UP-TO-DATE AVAILABLE AGE
postgres 1/1 1 1 2m14s
اکنون دیتابیس Postgres بالا آماده و در حال اجرا است. قبل از ادامه آموزش، نگاهی بیاندازیم به دستور helm install
و بررسی کنیم، هر کدام از بخشهایش چه مفهومی دارند:

تا اینجا یک چارت Helm برای دیتابیس Postgres ایجاد کرده و این Chart برای نصب Postgres در کلاستر کوبرنتیز استفاده شد. در این بخش نشان میدهیم که چطور میتوانیم از یک چارت برای استقرار چندین برنامه استفاده کنیم؛ با این کار میتوانیم سه اپلیکیشن adminer
، kanban-app
و kanban-ui
را با یک چارت واحد مدیریت کنیم و نیازی به ایجاد چارتهای جداگانه برای هر برنامه نداشته باشیم.
برای اینکار دستور زیر را اجرا کنید:
$ helm create app
Creating app
پس از حذف فایلهای غیرضروری از فولدر ./templates
و تمیز کردن فایل values.yaml
، یک فایل deployment.yaml
با محتوای زیر ایجاد کنید:
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ .Values.app.name }}
labels:
app: {{ .Values.app.name }}
group: {{ .Values.app.group }}
spec:
replicas: {{ .Values.app.replicaCount }}
selector:
matchLabels:
app: {{ .Values.app.name }}
template:
metadata:
labels:
app: {{ .Values.app.name }}
group: {{ .Values.app.group }}
spec:
containers:
- name: {{ .Values.app.name }}
image: {{ .Values.app.container.image }}
ports:
- containerPort: {{ .Values.app.container.port }}
envFrom:
{{- range .Values.app.container.config }}
- configMapRef:
name: {{ .name }}
{{- end}}
env:
{{- range .Values.app.container.env}}
- name: {{ .key}}
value: {{ .value}}
{{- end}}
در این بخش، فقط چند جایگزین و دو حلقه range
برای وارد کردن مقادیر از ConfigMap
ها یا مقادیر ساده به کانتینر اپلیکیشن نیاز داریم.
هر سه اپلیکیشن نیاز دارند که اشیاء ClusterIP نیز برای آنها استقرار داده شود؛ مطابق فایل service.yaml
زیر:
apiVersion: v1
kind: Service
metadata:
name: {{ .Values.app.name }}
labels:
group: {{ .Values.app.group }}
spec:
type: {{ .Values.app.service.type }}
selector:
app: {{ .Values.app.name }}
ports:
- port: {{ .Values.app.service.port }}
targetPort: {{ .Values.app.container.port }}
در کد بالا، تمام مقادیر پیشفرضی که در هر دو فایل template وجود دارند، از فایل values.yaml
گرفته میشوند و داخل این فایلهای قالب (قالب Helm) وارد میشوند:
app:
name: app
group: app
replicaCount: 1
container:
image: add-image-here
port: 8080
config: []
env:
- key: key
value: value
service:
type: ClusterIP
port: 8080
برای اتمام کار ساخت چارت اپلیکیشن، باید برخی از متادیتاها را در فایل Chart.yaml
تعریف کنید:
apiVersion: v2
name: app
description: A Helm chart for any application
type: application
version: 0.1.0
appVersion: 1.16.0
keywords:
- app
- java
- javascript
- angular
home: https://github.com/wkrzywiec/k8s-helm-helmfile/tree/master/helm
maintainers:
- name: Wojtek Krzywiec
url: https://github.com/wkrzywiec
سپس، مشابه قبلی، باید مقادیر خاصی را وارد کنید تا تنظیمات پیشفرض را تغییر دهد.
فایل adminer.yaml
به شکل زیر خواهد بود:
app:
name: adminer
group: db
container:
image: adminer:4.7.6-standalone
port: 8080
env:
- key: ADMINER_DESIGN
value: pepa-linha
- key: ADMINER_DEFAULT_SERVER
value: postgres
فایل kanban-app.yaml
:
app:
name: kanban-app
group: backend
container:
image: wkrzywiec/kanban-app:k8s
config:
- name: postgres-config
env:
- key: DB_SERVER
value: postgres
فایل kanban-ui.yaml
:
app:
name: kanban-ui
group: frontend
container:
image: wkrzywiec/kanban-ui:k8s
port: 80
در آخر ساختار نهایی فایلها بهصورت زیر خواهد بود:

اکنون، جهت ایجاد سه نسخه برای هر اپلیکیشن، از دستورات زیر استفاده کنید:
$ helm install -f adminer.yaml adminer ./app
NAME: adminer
LAST DEPLOYED: Mon Apr 13 16:57:17 2020
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
$ helm install -f kanban-app.yaml kanban-app ./app
NAME: kanban-app
LAST DEPLOYED: Mon Apr 13 16:57:36 2020
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
$ helm install -f kanban-ui.yaml kanban-ui ./app
NAME: kanban-ui
LAST DEPLOYED: Mon Apr 13 16:57:54 2020
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
$ helm list
NAME NAMESPACE REVISION STATUS CHART APP VERSION
adminer default 1 deployed app-0.1.0 1.16.0
kanban-app default 1 deployed app-0.1.0 1.16.0
kanban-ui default 1 deployed app-0.1.0 1.16.0
postgres default 1 deployed postgres-0.1.0 1.16.0
$ kubectl get deployments
NAME READY UP-TO-DATE AVAILABLE AGE
adminer 1/1 1 1 112s
kanban-app 1/1 1 1 93s
kanban-ui 1/1 1 1 75s
postgres 1/1 1 1 45m
در این گام نشان دادیم که چگونه میتوان از یک چارت برای استقرار چندین برنامه استفاده کرد، و در آخر یک چارت Ingress Controller ایجاد میکنیم که به کلاستر متصل شود.
برای اینکار دستور زیر را وارد کنید:
$ helm create ingress
Creating ingress
پس از ایجاد یک چارت جدید، تمام فایلها را از فولدر templates حذف کنید و محتوای فایل values.yaml
را خالی کنید. اینبار، قبل از اینکه مستقیم به تعریف تمپلیتها بپردازیم، ابتدا باید به فایل Chart.yaml
توجه کنیم.
apiVersion: v2
name: ingress
description: A Helm chart for Ingress Controller
type: application
version: 0.1.0
appVersion: 1.16.0
keywords:
- ingress
- nginx
- api-gateway
home: https://github.com/wkrzywiec/k8s-helm-helmfile/tree/master/helm
maintainers:
- name: Wojtek Krzywiec
url: https://github.com/wkrzywiec
dependencies:
- name: nginx-ingress
version: 1.36.0
repository: https://charts.helm.sh/stable
در اینجا یک بخش جدید به نام dependencies اضافه شده است. این بخش سرویسهای پشتیبان پیشفرض را ایجاد میکند که قابلیتهای Ingress Controller را فعال میکند.
اما تنها کاری که باید در اینجا انجام دهیم همین نیست. این بخش فقط وابستگیهای این چارت را تعریف میکند و بهطور خودکار آنها را در زمان نصب دانلود نخواهد کرد. برای انجام این کار باید خودمان اقدام کنیم. برای این کار دستور زیر را اجرا کنید:
$ helm dependency update ./ingress/
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "stable" chart repository
Update Complete. ⎈Happy Helming!⎈
Saving 1 charts
Downloading nginx-ingress from repo https://kubernetes-charts.storage.googleapis.com/
Deleting outdated charts
داخل فولدر ingress/charts
یک فایل جدید به نام nginx-ingress-1.36.0.tgz
ظاهر خواهد شد.
حالا میتوانیم یک قالب برای Ingress تعریف کنیم؛ این قالب در فولدر ./templates
قرار خواهد گرفت و نام آن ingress.yaml
خواهد بود:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: {{ .Values.ingress.name }}
annotations:
kubernetes.io/ingress.class: {{ .Values.ingress.annotations.class }}
spec:
rules:
{{- range .Values.ingress.hosts }}
- host: {{ .host | quote }}
http:
paths:
{{- range .paths }}
- path: {{ .path }}
backend:
serviceName: {{ .backend.serviceName }}
servicePort: {{ .backend.servicePort }}
{{- end }}
{{- end }}
بخش جالب در قسمت مشخصات (specification) است. در اینجا دو حلقه تو در تو وجود دارد که توسط آنها، میتوانید چندین هاست و چندین مسیر برای هر هاست تعریف کنید.
همچنین، در اینجا یک فایل پیشفرض values.yaml
داریم:
ingress:
name: ingress-service
replicaCount: 1
annotations:
class: nginx
hosts:
- host: chart-example.local
paths:
- path: /
backend:
serviceName: serviceName
servicePort: 8080
ساختار نهایی فولدرها به صورت زیر خواهد بود:

خارج از چارت Ingress، حالا میتوانیم یک فایل ingress.yaml ایجاد کنیم که تمام قوانین مسیریابی برای کلاستر ما را در برداشته باشد.
ingress:
hosts:
- host: adminer.k8s.com
paths:
- path: /
backend:
serviceName: adminer
servicePort: 8080
- host: kanban.k8s.com
paths:
- path: /api/
backend:
serviceName: kanban-app
servicePort: 8080
- path: /
backend:
serviceName: kanban-ui
servicePort: 80
حالا میتوانیم یک نسخه Helm ایجاد کنیم:
$ helm install -f ingress.yaml ingress ./ingress
NAME: ingress
LAST DEPLOYED: Tue Apr 14 07:22:44 2020
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
$ helm list
NAME NAMESPACE REVISION STATUS CHART APP VERSION
adminer default 1 deployed app-0.1.0 1.16.0
ingress default 1 deployed ingress-0.1.0 1.16.0
kanban-app default 1 deployed app-0.1.0 1.16.0
kanban-ui default 1 deployed app-0.1.0 1.16.0
postgres default 1 deployed postgres-0.1.0 1.16.0
$ kubectl get deployments
NAME READY UP-TO-DATE AVAILABLE
adminer 1/1 1 1
ingress-nginx-ingress-controller 1/1 1 1
ingress-nginx-ingress-default-backend 1/1 1 1
kanban-app 1/1 1 1
kanban-ui 1/1 1 1
postgres
در آخر، هر سه اپلیکیشن روی کلاستر کوبرنتیز دیپلوی شده است.
نصب و راهاندازی Kubernetes روی سرور فیزیکی (بدون مجازیسازی) را در مقاله زیر مطالعه کنید.
نصب Kubernetes روی سرور مجازی
جمعبندی
در این مقاله، نحوه استفاده از Helm برای کاهش کارهای تکراری را آموزش داده و توضیح دادیم که چگونه میتوان از یک قالب(template) واحد برای استقرار چندین اپلیکیشن در یک کلاستر Kubernetes استفاده کرد. امیدواریم این مقاله برای شما مفید بوده باشد.
سوالات متداول
Helm چیست و چرا باید از آن استفاده کنیم؟
Helm یک ابزار مدیریت پکیج برای Kubernetes است که فرایند نصب و مدیریت اپلیکیشنها را ساده میکند. به کمک Helm، میتوان اپلیکیشنها را بهراحتی از طریق چارتها (Charts) نصب کرد، پیکربندی کرد و حتی بهروزرسانی کرد بدون اینکه نیاز به نوشتن فایلهای YAML پیچیده باشد.
چگونه یک Helm Chart بسازم؟
برای ساخت یک Helm Chart ابتدا باید دستور helm create <chart-name>
را اجرا کنید.
آیا میتوانم از چارتهای آماده Helm استفاده کنم؟
بله، Helm مجموعهای از چارتهای آماده برای اپلیکیشنهای مختلف مانند Prometheus، MySQL و بسیاری دیگر دارد که میتوانید به راحتی آنها را نصب کرده و پیکربندی کنید.
چگونه میتوانم مقادیر پیشفرض در فایل values.yaml را تغییر دهم؟
مقادیر پیشفرض را در فایل values.yaml
تغییر دهید.
چطور میتوانم یک چارت را بهروزرسانی کنم؟
برای بهروزرسانی یک چارت، کافی است تغییرات لازم را در فایلهای چارت یا values.yaml
اعمال کنید و سپس از دستور helm upgrade
استفاده کنید.
چه ابزارهایی برای استفاده از Helm نیاز است؟
- Docker برای ساخت و اجرای کانتینرها
- Minikube برای ساخت کلاستر Kubernetes محلی
- kubectl برای ارتباط با Kubernetes
- Helm برای مدیریت چارتها