سلام Minikube
این آموزش به شما نشان میدهد چگونه یک برنامه نمونه را روی کوبرنتیز با استفاده از minikube اجرا کنید. این آموزش یک ایمیج کانتینری ارائه میدهد که از NGINX برای بازگرداندن تمامی درخواستها استفاده میکند.
Objectives
- استقرار یک برنامه نمونه روی minikube
- اجرای برنامه
- مشاهده لاگهای برنامه
Before you begin
این آموزش فرض میکند که شما قبلا minikube را راهاندازی کردهاید.
برای دستورالعمل نصب، مرحله ۱ در صفحه minikube start را ببینید.
Note:
فقط دستورهای مرحله ۱، را برای نصب اجرا کنید. مراحل دیگر در همین صفحه توضیح داده شدهاند.همچنین باید kubectl را نصب کنید.
برای دستورالعمل نصب، صفحه Install tools را ببینید.
ساخت یک کلاستر minikube
minikube start
باز کردن داشبورد
داشبورد کوبرنتیز را باز کنید. دو روش برای انجام این کار وجود دارد:
یک ترمینال جدید باز کنید و دستور زیر را اجرا کنید:
# Start a new terminal, and leave this running.
minikube dashboard
اکنون به ترمینالی که minikube start را اجرا کرده بودید برگردید.
Note:
دستور dashboard افزونه داشبورد را فعال میکند و یک پراکسی باز کرده و داشبورد را در مرورگر پیشفرض شما نمایش میدهد.
در داشبورد میتوانید منابعی مثل Deployment و Service ایجاد کنید.
برای اینکه بدون باز شدن خودکار مرورگر و فقط آدرس داشبورد را دریافت کنید، تب "کپی و جایگذاری URL" را ببینید.
به طور پیشفرض، داشبورد فقط از داخل شبکه داخلی کوبرنتیز قابل دسترسی است.
دستور dashboard یک پراکسی موقت برای دسترسی از بیرون ایجاد میکند.
برای متوقف کردن پراکسی، کلید Ctrl+C را بزنید.
پس از خروج، داشبورد همچنان روی کلاستر اجرا میشود و فقط پراکسی قطع میشود.
در صورت نیاز میتوانید دوباره دستور dashboard را اجرا کنید.
اگر نمیخواهید minikube مرورگر را باز کند، زیر دستور dashboard از فلگ --url استفاده کنید.
minikube یک آدرس URL نمایش میدهد که شما میتوانید در مرورگر دلخواه باز کنید.
یک ترمینال جدید باز کنید و اجرا کنید:
# یک ترمینال جدید راهاندازی کنید و این را در حال اجرا رها کنید..
minikube dashboard --url
حالا میتوانید از این URL استفاده کنید و به ترمینالی که minikube start را اجرا کرده بودید برگردید.
ساخت Deployment
یک Pod گروهی از یک یا چند کانتینر است که برای مدیریت و شبکهسازی به هم مرتبط هستند. پاد این آموزش فقط یک کانتینر دارد. Deployment وضعیت سلامت پاد را بررسی کرده و اگر خراب شود، آن را مجدداً اجرا میکند. Deployment روش پیشنهادی برای ساخت و مقیاسدهی پادهاست.
-
از دستور
kubectl createبرای ایجاد یک Deployment که یک پاد را مدیریت میکند، استفاده کنید. پاد یک کانتینر را بر اساس Docker image ارائه شده اجرا میکند.:# یک image آزمایشی که شامل یک وب سرور است را اجرا کنید kubectl create deployment hello-node --image=registry.k8s.io/e2e-test-images/agnhost:2.39 -- /agnhost netexec --http-port=8080 -
مشاهده Deployment:
kubectl get deploymentsخروجی مشابه موارد زیر است:
NAME READY UP-TO-DATE AVAILABLE AGE hello-node 1/1 1 1 1m(ممکن است کمی زمان ببرد تا پاد آماده شود. اگر
0/1دیدید، چند ثانیه بعد دوباره امتحان کنید.) -
مشاهده Pod:
kubectl get podsخروجی مشابه موارد زیر است:
NAME READY STATUS RESTARTS AGE hello-node-5f76cf6ccf-br9b5 1/1 Running 0 1m -
مشاهده رویدادهای کلاستر:
kubectl get events -
مشاهده پیکربندی
kubectl:kubectl config view -
مشاهده لاگ کانتینر داخل پاد (نام پاد را با نامی که از
kubectl get podsدریافت کردهاید، جایگزین کنید.):Note:
نامhello-node-5f76cf6ccf-br9b5را با خروجی دستورkubectl get podsجایگزین کنید.kubectl logs hello-node-5f76cf6ccf-br9b5خروجی مشابه موارد زیر است:
I0911 09:19:26.677397 1 log.go:195] Started HTTP server on port 8080 I0911 09:19:26.677586 1 log.go:195] Started UDP server on port 8081
ساخت Service
به طور پیشفرض، Pod فقط از طریق آدرس IP داخلی خود در داخل کلاستر کوبرنتیز قابل دسترسی است.
برای اینکه کانتینر hello-node از خارج از شبکه مجازی کوبرنتیز قابل دسترسی باشد، باید Pod را به عنوان یک Service کوبرنتیز expose کنید.
Warning:
کانتینر agnhost یک اندپوینت/shell دارد که برای اشکالزدایی(debuggin) مفید است، اما expose کردن آن در اینترنت عمومی خطرناک است.
این را روی یک کلاستر متصل به اینترنت یا یک کلاستر عملیاتی اجرا نکنید.-
با استفاده از دستور
kubectl expose، پاد را در اینترنت عمومی expose کنید:kubectl expose deployment hello-node --type=LoadBalancer --port=8080
--type=LoadBalancer نشان میدهد که شما میخواهید سرویس خود را در خارج از کلاستر expose کنید.
کد برنامه درون image آزمایشی فقط به پورت TCP 8080 گوش میدهد. اگر از kubectl expose برای expose کردن پورت دیگری استفاده میکردید، کلاینتها نمیتوانستند به آن پورت دیگر متصل شوند.
-
مشاهده Service که ایجاد کردهاید:
kubectl get servicesخروجی مشابه موارد زیر است:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE hello-node LoadBalancer 10.108.144.78 <pending> 8080:30369/TCP 21s kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 23m
در ارائهدهندگان ابری که از متعادلکنندههای بار(Load Balancers) پشتیبانی میکنند، یک آدرس IP خارجی برای دسترسی به سرویس فراهم میشود. در minikube، نوع LoadBalancer سرویس را از طریق دستور minikube service قابل دسترسی میکند.
-
دستور زیر را اجرا کنید:
minikube service hello-nodeاین دستور مرورگر را باز میکند و پاسخ برنامه را نمایش میدهد.
فعالسازی افزونهها
ابزار minikube شامل مجموعهای از افزونههای داخلی است که میتوانند در محیط محلی کوبرنتیز فعال، غیرفعال و باز شوند.
-
افزونههای پشتیبانیشدهی فعلی را فهرست کنید:
minikube addons listخروجی مشابه موارد زیر است:
addon-manager: enabled dashboard: enabled default-storageclass: enabled efk: disabled freshpod: disabled gvisor: disabled helm-tiller: disabled ingress: disabled ingress-dns: disabled logviewer: disabled metrics-server: disabled nvidia-driver-installer: disabled nvidia-gpu-device-plugin: disabled registry: disabled registry-creds: disabled storage-provisioner: enabled storage-provisioner-gluster: disabled -
یک افزونه، مثلاً
metrics-serverرا فعال کنید:minikube addons enable metrics-serverخروجی مشابه موارد زیر است:
The 'metrics-server' addon is enabled -
مشاهده پاد و سرویسی که با نصب آن افزونه ایجاد کردهاید:
kubectl get pod,svc -n kube-systemخروجی مشابه موارد زیر است:
NAME READY STATUS RESTARTS AGE pod/coredns-5644d7b6d9-mh9ll 1/1 Running 0 34m pod/coredns-5644d7b6d9-pqd2t 1/1 Running 0 34m pod/metrics-server-67fb648c5 1/1 Running 0 26s pod/etcd-minikube 1/1 Running 0 34m pod/influxdb-grafana-b29w8 2/2 Running 0 26s pod/kube-addon-manager-minikube 1/1 Running 0 34m pod/kube-apiserver-minikube 1/1 Running 0 34m pod/kube-controller-manager-minikube 1/1 Running 0 34m pod/kube-proxy-rnlps 1/1 Running 0 34m pod/kube-scheduler-minikube 1/1 Running 0 34m pod/storage-provisioner 1/1 Running 0 34m NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/metrics-server ClusterIP 10.96.241.45 <none> 80/TCP 26s service/kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP 34m service/monitoring-grafana NodePort 10.99.24.54 <none> 80:30002/TCP 26s service/monitoring-influxdb ClusterIP 10.111.169.94 <none> 8083/TCP,8086/TCP 26s -
خروجی
metrics-serverرا بررسی کنید:kubectl top podsاگر پیام زیر را مشاهده کردید، صبر کنید و دوباره امتحان کنید:
error: Metrics API not available -
غیرفعال کردن
metrics-server:minikube addons disable metrics-serverخروجی مشابه این است:
metrics-server was successfully disabled
پاکسازی
اکنون میتوانید منابعی را که در کلاستر خود ایجاد کردهاید، پاک کنید:
kubectl delete service hello-node
kubectl delete deployment hello-node
توقف کلاستر minikube:
minikube stop
در صورت تمایل، ماشین مجازی Minikube را حذف کنید:
# Optional
minikube delete
اگر میخواهید دوباره از minikube برای کسب اطلاعات بیشتر در مورد کوبرنتیز استفاده کنید، نیازی به حذف آن ندارید.
نتیجهگیری
این صفحه جنبههای اساسی برای راهاندازی و اجرای یک کلاستر minikube را پوشش داد. اکنون آماده استقرار برنامهها هستید.
What's next
- آموزش استقرار اولین برنامه روی کوبرنتیز با kubectl
- درباره Deployment objects بیشتر بدانید.
- درباره استقرار برنامهها بیشتر بدانید.
- درباره Service objects بیشتر بدانید.