برای راهاندازی یک کلاستر کوبرنتیز، چندین گزینه با توجه به نیازهای محیط توسعه یا تولید وجود داره:
minikube start
میتونی خیلی سریع یه کلاستر رو بیاری بالا.علارغم استفاده از minikube داخل کتاب من از kind استفاده میکنم، هیچ تفاوتی نداره و از هرکدوم که راحت تر هستین میتونین استفاده کنین.
دریافت یه دید کلی از کلاستر کوبرنتیز
برای به دست آوردن یه دید کلی از کلاستر کوبرنتیز خود، میتونین با استفاده از ابزار kubectl اطلاعات کاملی در مورد نودها و وضعیت کلاستر به دست آورید. هر نود در کلاستر دارای یه کانتینر ران تایم هست که طبق این کتاب اینجا از داکر استفاده شده، Kubelet و kube-proxy است که برای اجرای کانتینرها و مسیریابی درخواستها بین آنها استفاده میشوند. ارتباط با کلاستر از طریق ابزار kubectl انجام میشود که درخواستهای REST را به سرور API کوبرنتیز ارسال میکند. این سرور روی نود master اجرا شده و مدیریت کلاستر را انجام میدهد.
برای بررسی وضعیت کلاستر کوبرنتیز خود و مشاهده نودها، میتوانید از دستور kubectl استفاده کنید. با دستور زیر، لیست تمامی نودهای موجود در کلاستر را مشاهده خواهید کرد:
$ kubectl get nodes
این دستور اطلاعات اولیه در مورد نودها مانند نام، وضعیت، مدت زمان فعالیت، و نسخه کوبرنتیز را نمایش میدهد. با استفاده از این روش، مطمئن میشوید که کلاستر به درستی راهاندازی شده و تمامی نودها آماده کار هستند.
به دست آوردن اطلاعات بیشتر از یک object
برای مشاهده جزئیات بیشتری از یک object توی کلاستر کوبرنتیز، میتوانیم از دستور kubectl describe استفاده کنیم. این دستور اطلاعات کاملی از object مورد نظر مثل وضعیت نود، منابع پردازشی، حافظه، اطلاعات سیستم و کانتینرهای در حال اجرا را نمایش میدهد. برای مثال:
$ kubectl describe node kind-control-plane
استفاده از alias
برای راحتتر کردن استفاده از دستورات کوبرنتیز، میتوانید یک alias برای دستور kubectl
تنظیم کنید تا به جای تایپ کامل آن، از یک حرف کوتاه مثل k
استفاده کنید. برای ایجاد این alias کافی است خط زیر را به فایل bashrc./~
یا فایل مشابه اضافه کنید:
alias k=kubectl
با این کار، به جای تایپ کامل kubectl
، میتوانید فقط k
بنویسید و دستور مورد نظر را اجرا کنید.
برای اجرای اولین اپلیکیشن خود توی کوبرنتیز، میتونیم از دستور سادهای مانند kubectl run
استفاده کنیم که نیازی به ایجاد فایلهای JSON یا YAML ندارد. برای مثال، اپلیکیشن Node.js که ساخته و در Docker Hub آپلود کردید را به راحتی میتوانید با دستور زیر روی کلاستر خود اجرا کنید:
kubectl run kubia --image=luksa/kubia --port=8080
در این دستور، image--
مشخص میکند که کدام ایمیج را اجرا میکنید و port--
پورتی است که اپلیکیشن گوش میدهد. این دستور یک پاد ایجاد میکند که بعداً به جزئیات آن میپردازیم.
پاد Pods توی کوبرنتیز به عنوان یک گروه از چندین کانتینر عمل میکنه که همواره با هم اجرا میشوند و منابع مشترکی مثل IP، فرآیندها (process)، و hostname دارند. هر Pod مثل یک ماشین منطقی جداگانه با IP و منابع خودش عمل میکند. حتی اگر دو Pod توی یه نود worker قرار داشته باشند، از دید همدیگر بهعنوان ماشینهای مجزا عمل میکنند. کانتینرهای درون یک Pod میتوانند فرآیندهای یک برنامه اصلی و فرآیندهای جانبی باشند که با هم هماهنگ عمل میکنند.
توی کوبرنتیز، شما نمیتونین کانتینرها را بهصورت مستقیم فهرست کنید، اما میتوانید لیست Pods را مشاهده کنید. با اجرای دستور kubectl get pods
، وضعیت Podها را میبینید. هر Pod میتواند در حالت "Pending" باشد که بهمعنی آن است که کانتینر در حال دانلود ایمیج هست. زمانی که ایمیج دانلود و کانتینر اجرا شد، وضعیت به "Running" تغییر میکند. همچنین با استفاده از دستور kubectl describe pod
میتوانید جزئیات بیشتری درباره هر Pod مشاهده کنید.
بررسی اتفاق های که پشت صحنه اتفاق میفته یا یه pod اجرا بشه
وقتی یک کانتینر را در کوبرنتیز اجرا میکنید، چند مرحله پشت صحنه اتفاق میافتد. اول از همه، شما ایمیج کانتینر را ساخته و به Docker Hub ارسال کردید تا بتوانید از آن در کلاستر استفاده کنید. سپس با اجرای دستور kubectl run
، یک Pod ایجاد شد اون رو روی یکی از نودهای کلاستر اختصاص میده. این نود از Docker Hub ایمیج رو دانلود کرده و کانتینر رو اجرا میکنه. Scheduler نیز Pod را به نود مناسب اختصاص میده.
دسترسی به وب اپلیکیشن
برای دسترسی به وب اپلیکیشن که در حال اجرا داخل یک Pod در کلاستر کوبرنتیز هست، باید Pod رو از طریق یک Service از نوع LoadBalancer یا NodePort به بیرون کلاستر در دسترس قرار بدیم. هر Pod یک آدرس IP داخلی دارد که از بیرون کلاستر قابل دسترسی نیست. برای این کار، یک Service نوع LoadBalancer یا NodePort ایجاد میکنیم تا بتونیم با یه آدرس IP عمومی برای دسترسی به Pod میدهد.
با دستور زیر این سرویس را ایجاد میکنید:
$ kubectl expose kubia --type=NodePort --name kubia-http
برای مشاهده لیست سرویسهای موجود در کلاستر کوبرنتیز، میتوانید از دستور زیر استفاده کنید:
$ kubectl get services
این دستور سرویسهای موجود را نمایش میدهد. میبینیم که سرویس kubia ایجاد شده و اون الان با پورت 30230 روی تمام نود ها در دسترس هست.
برای دسترسی به سرویس میتونیم آدرس هر نود رو بزنیم و سرویس در حال اجرا رو ببینیم
این دستور یک درخواست به اپلیکیشن شما توی کلاستر کوبرنتیز ارسال میکند. در مورد نوع سرویس های مختلفی که داریم توی فصل های دیگه صحبت میکنیم الان فقط نیازه بدونین سرویس NodePort میاد یه پورت روی تمام نود ها باز میکنه (توی اینجا پورت 30230)
بررسی اینکه پاد روی کدوم نود در حال اجرا هست
در کوبرنتیز، مهم نیست که پادها روی کدام نود اجرا میشوند، بلکه مهم این است که منابع کافی برای اجرای آنها فراهم شود. تمام پادها از طریق IP اختصاصی خود با یکدیگر ارتباط برقرار میکنند و مستقل از نود میزبان خود به صورت یکسان عمل میکنند.
برای نمایش اطلاعات بیشتر درباره پادها، میتوانید از دستور زیر استفاده کنید که IP و نود میزبان پادها را نشان میدهد:
kubectl get pods -o wide
این گزینه اطلاعات گستردهتری از جمله IP پاد و نود میزبان را نمایش میدهد.
برای بررسی جزئیات بیشتر یک پاد در کوبرنتیز، میتوانید از دستور kubectl describe
استفاده کنید. این دستور اطلاعاتی مانند نود میزبان پاد، زمان شروع پاد، وضعیت آن، IP اختصاصی پاد و رخدادهای مرتبط با آن را نمایش میدهد. به عنوان مثال:
kubectl describe pod kubia-hczji
این دستور نشان میدهد که پاد به کدام نود اختصاص داده شده، چه زمانی راهاندازی شده و چه وضعیت و شرایطی دارد. همچنین اطلاعاتی در مورد کنترلرهای مرتبط با پاد و رخدادهای ثبت شده برای آن ارائه میدهد.
داشبورد کوبرنتیز یک رابط گرافیکی تحت وب است که به کاربران امکان مدیریت و نظارت بر روی کلاستر کوبرنتیز را از طریق یک محیط بصری میدهد. با استفاده از این داشبورد، کاربران میتوانند انواع اشیاء مختلف در کلاستر خود مانند پادها (Pods)، سرویسها (Services)، ReplicationControllers و بسیاری از موارد دیگر را مشاهده، ویرایش، ایجاد یا حذف کنند. این ابزار بیشتر برای کسانی که تمایل دارند به جای خط فرمان از رابطهای گرافیکی استفاده کنند مناسب است.
یکی از مزایای داشبورد کوبرنتیز این است که وضعیت اجزای کلاستر و منابع در حال اجرا را به صورت بصری نمایش میدهد، از جمله وضعیت کانتینرها، لاگهای سیستم، و منابع مصرف شده مانند CPU و حافظه. همچنین کاربران میتوانند با استفاده از داشبورد مستقیماً درخواستهای شبکهای را بررسی کنند یا لاگهای سیستمها را مطالعه کنند تا اشکالزدایی بهتری انجام دهند.
گرچه در بسیاری از پروژهها و منابع آموزشی، مانند کتابها و مستندات کوبرنتیز، بیشتر از ابزار خط فرمان kubectl استفاده میشود، اما داشبورد همیشه گزینهای قدرتمند و ساده برای مدیریت و مشاهده وضعیت کلاستر به شکل بصری است.
امیدوارم این فصل رو به خوبی یاد گرفته باشین و توی ادامه میریم سراغ فصل های بعدی