
چگونه از Minikube برای توسعه و آزمایش محلی Kubernetes استفاده کنیم
Kubernetes یک سیستم متنباز برای ارکستراسیون کانتینرهاست که جهت خودکارسازی استقرار، مقیاسپذیری، و مدیریت نرمافزار طراحی شده است. این سیستم در سطح سازمانی بسیار محبوب شده است زیرا امکان مقیاسپذیری افقی منابع سرور را فراهم میکند. بسیاری از ارائهدهندگان خدمات ابری، از جمله DigitalOcean، راهحلهای Kubernetes مدیریتشدهی خود را ارائه میدهند.
از آنجایی که استقرار Kubernetes معمولاً به چندین سرور نیاز دارد، توسعه و آزمایش پشتهی Kubernetes پیش از استقرار در محیط عملیاتی میتواند بسیار منابعبر باشد. به همین دلیل، توسعهدهندگان Kubernetes پروژهی همراهی به نام minikube را حفظ کردهاند که میتواند با چارچوبی مانند Docker کار کند تا یک خوشهی Kubernetes را روی یک ماشین منفرد شبیهسازی کند.
در این آموزش، minikube را روی یک رایانهی محلی یا سرور راه دور نصب خواهید کرد. همچنین به داشبورد داخلی Kubernetes دسترسی خواهید یافت تا خوشهتان را در یک مرورگر کاوش کنید. پس از راهاندازی خوشه، یک اپلیکیشن آزمایشی را استقرار خواهید داد و بررسی میکنید که چگونه از طریق minikube به آن دسترسی داشته باشید. در بخش پایانی این آموزش، بررسی خواهید کرد که چگونه از Minikube در کنار خوشههای Kubernetes راه دور با استفاده از پروفایلهای پیکربندی استفاده کنید.
اگر بهدنبال یک سرویس میزبانی Kubernetes مدیریتشده هستید، میتوانید سرویس مدیریتشدهی سادهی ما برای رشد را بررسی کنید.
پیشنیازها
برای دنبال کردن این آموزش، به موارد زیر نیاز دارید:
- آشنایی با مفاهیم Kubernetes. لطفاً برای جزئیات بیشتر به مقالهی «مقدمهای بر Kubernetes» مراجعه کنید.
- چارچوب کانتینر Docker نصبشده در محیط Windows، Mac، یا Linux که از آن minikube را اجرا میکنید. اگر در محیط Linux کار نمیکنید، به مستندات Docker برای مراحل نصب مراجعه کنید. اگر از Docker در Linux استفاده میکنید، اطمینان حاصل کنید که آن را طوری پیکربندی کردهاید که بدون دسترسی sudo کار کند.
- مدیر بستهی Homebrew. Homebrew را میتوان روی macOS یا محیطهای Linux نصب کرد. اگر از Windows استفاده میکنید، میتوانید Homebrew را در WSL نصب کنید.
- حداقل ۲ CPU، ۲ گیگابایت حافظه، و ۲۰ گیگابایت فضای دیسک در محیطی که میخواهید Minikube را نصب کنید.
مرحله ۱.نصب و اجرای Minikube
میتوانید minikube را از طریق مدیر بستهی Homebrew نصب کنید:
brew install minikube
خروجی:
==> Installing minikube
==> Pouring minikube--1.25.2.x86_64_linux.bottle.tar.gz
==> Caveats
Bash completion has been installed to:
/home/sammy/.linuxbrew/etc/bash_completion.d
==> Summary
🍺 /home/sammy/.linuxbrew/Cellar/minikube/1.25.2: 9 files, 70.0MB
نکته: شروع کار با minikube در Windows دارای نکاتی است. این ابزار در WSL2 (نسخه فعلی Windows Subsystem for Linux) کار میکند، اما باید طوری پیکربندی شود که از Docker بهجای backend پیشفرض خود استفاده کند. برای این منظور، باید Docker را با پشتیبانی از WSL2 نصب کرده و سپس پس از نصب minikube طبق این مستند، دستور زیر را اجرا کنید:
minikube config set driver docker
برای شروع استفاده از minikube، میتوانید دستور start
را اجرا کنید. این دستور بهطور خودکار یک خوشهی Kubernetes محلی با استفاده از چند کانتینر Docker و نسخهای پایدار از Kubernetes ایجاد میکند:
minikube start
این فرایند کمی زمان میبرد و خروجیای مشابه زیر ایجاد میکند که نشان میدهد kubectl
برای شما پیکربندی شده است.
خروجی:
👍 Starting control plane node minikube in cluster minikube
🚜 Pulling base image ...
💾 Downloading Kubernetes v1.23.1 preload ...
> preloaded-images-k8s-v16-v1...: 504.42 MiB / 504.42 MiB 100.00%
> gcr.io/k8s-minikube/kicbase: 378.98 MiB / 378.98 MiB 100.00%
🔥 Creating docker container (CPUs=2, Memory=1987MB) ...
🐳 Preparing Kubernetes v1.23.1 on Docker 20.10.12 ...
▪ kubelet.housekeeping-interval=5m
▪ Generating certificates and keys ...
▪ Booting up control plane ...
▪ Configuring RBAC rules ...
🔎 Verifying Kubernetes components...
▪ Using image gcr.io/k8s-minikube/storage-provisioner:v5
🌟 Enabled addons: default-storageclass, storage-provisioner
🏄 Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default
نکته: اگر میخواهید minikube را با نسخهای غیر پیشفرض از Kubernetes برای بررسی سازگاری اجرا کنید، میتوانید از گزینهی --kubernetes-version
در دستور start استفاده کنید، مانند:
minikube start --kubernetes-version v1.2.3
نصب minikube از طریق Homebrew همچنین ابزار kubectl
را فراهم میکند، که ابزار اصلی برای مدیریت خوشههای Kubernetes از طریق خط فرمان است. اکنون میتوانید مانند هر خوشهی Kubernetes دیگری از دستور زیر برای فهرست کردن همهی پادهای در حال اجرا در خوشهتان استفاده کنید:
kubectl get pods -A
آرگومان -A
پادهای در حال اجرا در تمام نامفضاها را برمیگرداند.
خروجی:
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-64897985d-ttwl9 1/1 Running 0 46s
kube-system etcd-minikube 1/1 Running 0 57s
kube-system kube-apiserver-minikube 1/1 Running 0 61s
kube-system kube-controller-manager-minikube 1/1 Running 0 57s
kube-system kube-proxy-ddtgd 1/1 Running 0 46s
kube-system kube-scheduler-minikube 1/1 Running 0 57s
kube-system storage-provisioner 1/1 Running 1 (14s ago) 54s
اکنون یک خوشهی Kubernetes بهصورت محلی در حال اجرا دارید که میتوانید با ابزارهای معمول Kubernetes مانند kubectl
با آن کار کنید. در مراحل بعدی این آموزش، یاد خواهید گرفت چگونه از برخی قابلیتهای اضافی minikube برای نظارت و تغییر پیکربندی خوشهی محلی استفاده کنید.
بخش ۲.دسترسی به داشبورد Kubernetes
Minikube بهصورت پیشفرض داشبورد Kubernetes را پیادهسازی میکند. شما میتوانید از داشبورد Kubernetes برای پایش سلامت خوشه یا برای استقرار دستی اپلیکیشنها استفاده کنید. اگر Minikube را بهصورت محلی نصب کردهاید، میتوانید با اجرای دستور زیر به داشبورد دسترسی پیدا کنید:
minikube dashboard
این دستور بهصورت خودکار داشبورد را راهاندازی کرده، یک پورت از داخل خوشه Kubernetes به خارج از آن منتقل (forward) میکند تا بتوانید مستقیماً به آن دسترسی پیدا کنید، و سپس یک مرورگر وب را به سمت آن پورت محلی باز میکند.

فوروارد کردن پورت (port forwarding) ترمینالی که در آن اجرا میشود را تا زمانی که فعال است مسدود خواهد کرد؛ بنابراین احتمالاً ترجیح میدهید آن را در یک پنجره ترمینال جدید اجرا کنید تا بتوانید به کار خود ادامه دهید. برای توقف ایمن چنین فرآیندهایی، میتوانید از ترکیب کلیدهای Ctrl+C
استفاده کنید.
اگر Minikube را روی یک سرور راه دور اجرا میکنید که دسترسی آسانی به مرورگر وب در آن ندارید، میتوانید دستور minikube dashboard
را با گزینهی --url
اجرا کنید. این گزینه فرآیند فوروارد کردن پورت را آغاز کرده و یک URL در اختیار شما قرار میدهد که میتوانید برای دسترسی به داشبورد استفاده کنید، بدون اینکه مرورگر بهصورت مستقیم باز شود:
minikube dashboard --url
خروجی:
🤔 Verifying dashboard health ...
🚀 Launching proxy ...
🤔 Verifying proxy health ...
http://127.0.0.1:34197/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/
به شماره پورتی که توسط این دستور برگردانده میشود توجه داشته باشید، چراکه این شماره در سیستم شما متفاوت خواهد بود.
با این حال، پیکربندی امنیتی پیشفرض Kubernetes اجازه نخواهد داد که این URL روی یک ماشین راه دور قابل دسترسی باشد. شما نیاز دارید که یک تونل SSH برای دسترسی به URL داشبورد ایجاد کنید. برای ساخت تونل از ماشین محلی به سرورتان، دستور ssh
را با گزینهی -L
اجرا کنید. شماره پورتی را که از خروجی فرآیند فوروارد بهدست آوردید به همراه آدرس IP سرور راه دور وارد کنید:
ssh -L 34197:127.0.0.1:34197 sammy@your_server_ip
سپس باید بتوانید در مرورگر به داشبورد در این آدرس دسترسی داشته باشید:
http://127.0.0.1:34197/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/
اکنون که راههای بیشتری برای کار با minikube شبیه به یک خوشهی کامل Kubernetes را مشاهده کردید، در مرحلهی بعد، یک اپلیکیشن نمونه را مستقر کرده و به آن دسترسی خواهید داشت تا بررسی کنید که خوشهی Minikube شما بهدرستی کار میکند.
بخش ۳.استقرار و تست یک اپلیکیشن نمونه
شما میتوانید از دستور kubectl
برای استقرار یک اپلیکیشن آزمایشی در خوشه Minikube خود استفاده کنید. دستور زیر، یک اپلیکیشن نمونه Kubernetes را دانلود و مستقر میکند – در این مثال، اپلیکیشن hello-app گوگل:
kubectl create deployment web --image=gcr.io/google-samples/hello-app:1.0
این دستور، یک دیپلویمنت ایجاد میکند که درون خوشهتان با نام web
شناخته میشود و از یک ایمیج راه دور به نام hello-app
روی gcr.io (رجیستری کانتینر گوگل) استفاده میکند.
در مرحله بعد، دیپلویمنت web
را بهصورت یک سرویس Kubernetes با استفاده از گزینه --type=NodePort
و پورت 8080
در معرض نمایش قرار دهید:
kubectl expose deployment web --type=NodePort --port=8080
اکنون میتوانید با دستور زیر بررسی کنید که سرویس در حال اجراست یا نه:
kubectl get service web
به یاد داشته باشید که NodePort در Kubernetes از پورتهای تصادفی استفاده میکند، بنابراین خروجی شما متفاوت خواهد بود.
خروجی نمونه:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
web NodePort 10.109.254.242 <none> 8080:31534/TCP 10s
اکنون میتوانید با استفاده از minikube یک URL دریافت کنید که از خارج کانتینر قابل دسترسی باشد. این URL به شما اجازه میدهد به سرویس hello-app که روی پورت 8080 داخل خوشه در حال اجراست، دسترسی داشته باشید. اگر minikube را بهصورت محلی اجرا میکنید، نیازی به انجام فوروارد پورت بهصورت دستی نخواهید داشت.
برای دریافت URL اپلیکیشن نمونه، دستور زیر را اجرا کنید:
minikube service web --url
خروجی نمونه:
http://192.168.49.2:31534
اکنون میتوانید سعی کنید به این URL متصل شوید. برای انجام این کار از برنامه خط فرمان curl
استفاده میکنید که ابزار محبوبی برای ارسال انواع درخواستهای وب است. بهطور کلی، اگر میخواهید بررسی کنید که آیا یک اتصال خاص باید در مرورگر کار کند یا نه، ابتدا آن را با curl
تست کنید.
curl http://192.168.49.2:31534
خروجی:
Hello, world!
Version: 1.0.0
Hostname: web-746c8679d4-j92tb
اگر minikube را روی ماشین محلی اجرا میکنید، همچنین میتوانید این URL را در مرورگر باز کنید و باید همان متن ساده را ببینید. اگر روی سرور راه دور هستید، میتوانید دوباره از تونل SSH مانند مرحله دوم استفاده کنید تا این خروجی را در مرورگر مشاهده کنید.
اکنون یک مثال مینیمال از اپلیکیشنی دارید که از طریق minikube مستقر شده است. معمولاً در خوشههای Kubernetes تولیدی (production)، دسترسی دقیقتری برای نقاط دسترسی وب فراهم میشود، اما این موضوع وابسته به قابلیتهای خاص minikube نیست و شما در اینجا اصول اولیه را مشاهده کردید.
در مرحلهی بعدی، از برخی ابزارهای داخلی Minikube برای تغییر مقادیر پیشفرض پیکربندی خوشه خود استفاده خواهید کرد.
بخش ۴.مدیریت منابع و سیستم فایل Minikube
دستور minikube
چندین زیردستور (subcommand) برای کمک به مدیریت خوشه در اختیار شما قرار میدهد. برای مثال، اگر زمانی نیاز داشتید مقدار حافظه (RAM) موجود در خوشهتان را تغییر دهید، میتوانید با استفاده از minikube config
مقدار پیشفرض را تغییر دهید. بهطور پیشفرض، این مقدار بر حسب مگابایت است؛ بنابراین دستور زیر معادل اختصاص دادن ۴ گیگابایت حافظه است:
minikube config set memory 4096
خروجی:
❗ These changes will take effect upon a minikube delete and then a minikube start
خروجی اشاره میکند که برای اعمال این تغییر، باید خوشه را مجدداً مستقر (redeploy) کنید.
نکته: اگرچه خوشههای Kubernetes تولیدی معمولاً هنگام تغییر منابعی مثل حافظه نیاز به مستقرسازی مجدد ندارند، اما نباید انتظار داشته باشید که تغییرات پایدار را مستقیماً داخل یک خوشه در حال اجرا انجام دهید – فقط باید در فایلهای پیکربندی این تغییرات اعمال شود. بنابراین، مستقرسازی مجدد خوشه minikube باید بدون مشکل انجام شود.
برای حذف و راهاندازی مجدد خوشه:
minikube delete
خروجی:
🔥 Deleting "minikube" in docker ...
🔥 Deleting container "minikube" ...
🔥 Removing /home/sammy/.minikube/machines/minikube ...
💀 Removed all traces of the "minikube" cluster.
و سپس:
minikube start
Minikube همچنین این قابلیت را فراهم میکند که بهصورت موقت یک دایرکتوری از سیستم فایل محلی خود را در خوشه سوار (mount) کنید. برای صادر کردن (export) یک دایرکتوری به خوشه، از دستور minikube mount
استفاده کنید.
ساختار این دستور به صورت local_path:minikube_host_path
است. بخش local_path
مسیر دایرکتوری محلی شماست که میخواهید در خوشه سوار شود، و بخش minikube_host_path
محلی در کانتینر یا ماشین مجازی minikube است که میخواهید به فایلها از آنجا دسترسی داشته باشید.
مثال زیر، دایرکتوری خانگی ($HOME
) شما را در مسیر /host
خوشه minikube سوار میکند:
minikube mount $HOME:/host
خروجی:
📁 Mounting host path /home/sammy into VM as /host ...
▪ Mount type:
▪ User ID: docker
▪ Group ID: docker
▪ Version: 9p2000.L
▪ Message Size: 262144
▪ Options: map[]
▪ Bind Address: 192.168.49.1:43605
🚀 Userspace file server: ufs starting
✅ Successfully mounted /home/sammy to /host
📌 NOTE: This process must stay alive for the mount to be accessible ...
این قابلیت زمانی مفید است که بخواهید ورودی یا خروجیهایی مثل لاگها را از خوشه minikube ذخیره کنید.
مشابه فوروارد پورت، این فرآیند بهصورت مسدودکننده (blocking) در ترمینال اجرا میشود تا زمانی که با Ctrl+C آن را متوقف کنید.
در مرحله بعد (و نهایی) از این آموزش، یاد میگیرید که چگونه بهطور مؤثر بین خوشهی محلی minikube و یک خوشهی Kubernetes راه دور سوییچ کنید.
بخش ۵.(اختیاری) کار با چند خوشه Kubernetes
برای اجرای چند خوشهی Kubernetes بهصورت محلی، Minikube از پروفایلهای متعدد استفاده میکند. بهعنوان مثال، اگر بخواهید همزمان با چند نسخهی مختلف از Kubernetes کار کرده و آنها را آزمایش کنید، میتوانید چند خوشهی Kubernetes ایجاد کرده و با استفاده از فلگ --profile
یا -p
بین آنها جابهجا شوید.
اگر قصد دارید مدتی با یک پروفایل خاص کار کنید، دستور minikube profile
به شما این امکان را میدهد که پروفایل پیشفرض مورد نظر خود را تنظیم کنید تا نیازی به مشخصکردن آن با هر دستور با استفاده از --profile
نداشته باشید.
برای شروع Minikube با یک پروفایل جدید، میتوانید از دستور start
با فلگ -p
استفاده کنید:
minikube start -p new-profile
سپس، برای تغییر پروفایل فعال Minikube از دستور زیر استفاده کنید:
minikube profile new-profile
خروجی:
✅ minikube profile was successfully set to new-profile
برای مشاهدهی پروفایل فعلیای که در حال استفاده از آن هستید، میتوانید از دستور get profile
استفاده کنید:
minikube config get profile
خروجی:
new-profile
چه از چند پروفایل استفاده کنید یا نه، Minikube بهصورت خودکار فایلهای پیکربندی را در مسیرهای پیشفرض ایجاد میکند، جایی که kubectl
و سایر ابزارهای Kubernetes میتوانند آنها را بخوانند. برای مثال، اگر دستور زیر را اجرا کنید:
kubectl get nodes
دستور بالا، پیکربندی خوشهی Minikube شما را تحلیل کرده و گره (node) مربوطه را نشان خواهد داد:
خروجی نمونه:
NAME STATUS ROLES AGE VERSION
minikube Ready control-plane,master 3h18m v1.23.1
هنگام اجرای kubectl
، میتوانید مسیر فایل پیکربندی kubeconfig متفاوتی را نسبت به مسیر پیشفرض ~/.kube/config
مشخص کنید. در این حالت، kubectl
از اعتبارنامههای (credentials) خوشهی تعریفشده در آن فایل استفاده خواهد کرد. برای مثال، اگر یک فایل پیکربندی دیگر با نام remote-kubeconfig.yaml
دارید، میتوانید گرههای آن خوشه را با دستور زیر دریافت کنید:
kubectl --kubeconfig=remote-kubeconfig.yaml get nodes
این گرهها، گرههایی هستند که در محیط راه دور اجرا میشوند:
خروجی:
NAME STATUS ROLES AGE VERSION
pool-xr6rvqbox-uha8f Ready <none> 2d2h v1.21.9
pool-xr6rvqbox-uha8m Ready <none> 2d2h v1.21.9
pool-xr6rvqbox-uha8q Ready <none> 2d2h v1.21.9
Kubernetes بهطور کلی طوری طراحی شده است که با یک فایل پیکربندی در هر خوشه کار کند، بهطوری که بتوان آن را هنگام اجرای دستورات به kubectl
و سایر ابزارها داد. اگرچه امکان ترکیب چند فایل پیکربندی وجود دارد، ولی بهترین روش به نحوهی استفادهی شما از Kubernetes بستگی دارد و انجام این کار ضروری نیست. همچنین ممکن است بخواهید استفاده از Krew، مدیر بستهای برای افزونههای kubectl
را بررسی کنید.
نتیجهگیری
در این آموزش، شما Minikube را نصب کردید و داشبورد داخلی Kubernetes را برای نظارت و استقرار اپلیکیشنها پیکربندی نمودید. همچنین برخی از بهترین شیوهها برای کار همزمان با یک نمونهی تستی محلی Minikube و یک نمونهی Kubernetes راه دور را با استفاده از پروفایلهای Minikube و فلگ --kubeconfig
بررسی کردید.
تست و ارزیابی پیکربندیهای Kubernetes با استفاده از Minikube در محیط محلی میتواند کمک بزرگی باشد برای اینکه تشخیص دهید آیا آمادهی استقرار Kubernetes در محیط production هستید یا نه.
در مرحلهی بعد، شاید بخواهید یاد بگیرید که چگونه برخی اپلیکیشنهای مقیاسپذیر را روی Kubernetes مستقر کنید، مانند ArgoCD برای استقرار مستمر (Continuous Deployment) یا TOBS برای نظارت و مشاهدهپذیری (observability).
منبع DigitalOcean