این آموزش به شما نشان میدهد چگونه یک برنامه نمونه را روی کوبرنتیز با استفاده از minikube اجرا کنید. این آموزش یک ایمیج کانتینری ارائه میدهد که از NGINX برای بازگرداندن تمامی درخواستها استفاده میکند.
این آموزش فرض میکند که شما قبلا minikube را راهاندازی کردهاید.
برای دستورالعمل نصب، مرحله ۱ در صفحه minikube start را ببینید.
همچنین باید kubectl را نصب کنید.
برای دستورالعمل نصب، صفحه Install tools را ببینید.
minikube start
داشبورد کوبرنتیز را باز کنید. دو روش برای انجام این کار وجود دارد:
یک ترمینال جدید باز کنید و دستور زیر را اجرا کنید:
# Start a new terminal, and leave this running.
minikube dashboard
اکنون به ترمینالی که minikube start را اجرا کرده بودید برگردید.
دستور dashboard افزونه داشبورد را فعال میکند و یک پراکسی باز کرده و داشبورد را در مرورگر پیشفرض شما نمایش میدهد.
در داشبورد میتوانید منابعی مثل Deployment و Service ایجاد کنید.
برای اینکه بدون باز شدن خودکار مرورگر و فقط آدرس داشبورد را دریافت کنید، تب "کپی و جایگذاری URL" را ببینید.
به طور پیشفرض، داشبورد فقط از داخل شبکه داخلی کوبرنتیز قابل دسترسی است.
دستور dashboard یک پراکسی موقت برای دسترسی از بیرون ایجاد میکند.
برای متوقف کردن پراکسی، کلید Ctrl+C را بزنید.
پس از خروج، داشبورد همچنان روی کلاستر اجرا میشود و فقط پراکسی قطع میشود.
در صورت نیاز میتوانید دوباره دستور dashboard را اجرا کنید.
اگر نمیخواهید minikube مرورگر را باز کند، زیر دستور dashboard از فلگ --url استفاده کنید.
minikube یک آدرس URL نمایش میدهد که شما میتوانید در مرورگر دلخواه باز کنید.
یک ترمینال جدید باز کنید و اجرا کنید:
# یک ترمینال جدید راهاندازی کنید و این را در حال اجرا رها کنید..
minikube dashboard --url
حالا میتوانید از این URL استفاده کنید و به ترمینالی که minikube start را اجرا کرده بودید برگردید.
یک 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 دریافت کردهاید، جایگزین کنید.):
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
به طور پیشفرض، Pod فقط از طریق آدرس IP داخلی خود در داخل کلاستر کوبرنتیز قابل دسترسی است.
برای اینکه کانتینر hello-node از خارج از شبکه مجازی کوبرنتیز قابل دسترسی باشد، باید Pod را به عنوان یک Service کوبرنتیز expose کنید.
/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 را پوشش داد. اکنون آماده استقرار برنامهها هستید.