کوبرنتیز چیست؟ – معرفی Kubernetes به زبان ساده
«کوبِرنِتیز»، سیستم اوپن سورسی است که مدیریت و «هماهنگسازی» (Orchestrating) اپلیکیشنهای کانتینریشده را در میان خوشهای از گرهها انجام میدهد. این سیستم توسط گوگل طراحی شده است و به منظور مدیریت و برنامهریزی کانتینرها در مقیاس واقعی مورد استفاده قرار میگیرد. با توجه به اینکه کوبرنتیز را، هم بهصورت «در محل» (on-Premises) و هم در محیط ابری میتوان پیادهسازی کرد، انتخاب محبوبی برای نوسازی و مُدرنیزه کردن زیرساخت IT محسوب میشود. در این مطلب از مجله فرادرس، تا حد امکان بهطور جامع و به زبان ساده توضیح میدهیم که کوبرنتیز چیست و نحوه کار آن چگونه است. همچنین مزایایی که بهکارگیری این سیستم برایمان بهدنبال دارد را بیان میکنیم.
«کوبِرنِتیز» (Kubernetes) که تلفظ دیگر آن «کیوبِرنیتیز» است، با نام «K8s» (با تلفظ کِیتس) نیز شناخته میشود. فلسفه این نامگذاری کوتاه، وجود ۸ حرف بین حرف اول و آخر واژه «Kubernetes» است. خیلی از شرکتهای بزرگ همچون گوگل و اسپاتیفای برای مدیریت اپلیکشنهای کانتینری خود از سیستم کوبرنتیز استفاده میکنند. این سیستم، افزون بر فراهم کردن سطح بالاتری از «خودکارسازی» و «قابلیت اطمینان» (Reliability) نسبت به ماشینهای مجازی مرسوم، به ما کمک میکند تا کانتینرهای بزرگ خود را در میزبانهای متعددی مدیریت کنیم. از مزایای متنوعی که کوبرنتیز نسبت به مدلهای مرسوم استقرار اپلیکیشن دارد، میتوان به «انعطافپذیری» (Flexibility) و «مقیاسپذیری» (Scalability) بیشتر، استفاده بهتر از منابع و بهبود ویژگی «تحمل نقص» (Fault Tolerance) آن اشاره کرد.
دلایل متعددی برای آموختن کوبرنتیز وجود دارد که برخی از آنها را در ادامه آوردهایم.
- مقیاسدهی آسان اپلیکیشنها
- ویژگی خود بهبودی (یا خود ترمیمی)
- قابلحمل بودن
- اتوماسیون (یا خودکارسازی)
- سودمند بودن برای اجرای میکروسرویسها و سیستمهای توزیعشده
بهطور مثال، فرض کنید اپلیکیشنی در اختیار داریم که میبایست «مستقر» (دیپلوی | Deploy) شود. میتوانیم آن را درون کانتینری، بستهبندی و روی سروری دارای موتور داکر - یا سایر موتورهای کانتینر - اجرا کنیم. ما اپلیکیشن را بهوسیله Dockerfile، درون یک کانتینر بستهبندی میکنیم و آن را روی پورتی قرار میدهیم تا از دنیای بیرون قابل دسترسی باشد.
ایرادی که از سناریوی بالا میتوان گرفت این است که به دلیل اجرا شدن روی تنها یک سرور، در صورت بروز مشکل، اجرای اپلیکیشن با شکست مواجه میشود. برای حل این مسئله، گوگل پلتفرم «کوبرنتیز» را برای مقیاسدهی اپلیکیشنها معرفی کرد. لازم به ذکر است که «K8s» در حال حاضر توسط «موسسه محاسبات بومی ابری» نگهداری میشود.
کوبرنتیز چیست ؟
به زبان ساده میتوان گفت که «کوبرنتیز»، پلتفرمی اوپن سورس برای هماهنگسازی کانتینرها است که عملیات استقرار، مدیریت و مقیاسدهی اپلیکیشنها را بهصورت خودکار انجام میدهد.
به بیان دیگر، کوبرنتیز، پلتفرمی کانتینر-محور برای مدیریت منابع «ابری» (Cloud) و ایجاد برنامههای «قابل توسعه» (Scalable) بهشمار میرود. این محیط بهطور گستردهای بهعنوان رایجترین پلتفرم برای اتوماسیون (خودکارسازی)، «پیادهسازی» (Deploying) و توسعه کل زیرساخت ابری قلمداد میشود. کوبرنتیز روی تمامی سیستم عاملهای اصلی قابل اجرا است و پرکاربردترین ابزار ابری اوپن سورس محسوب میشود.
کوبرنتیز میتواند در موارد زیادی ما را یاری دهد که در زیر به برخی از آنها اشاره میکنیم.
- کل زیرساخت ما را مقیاسپذیر کند.
- روی سلامت هر یک از سرویسها نظارت داشته باشد.
- بهعنوان متوازنکننده بار عمل کند.
- «نصب و پیادهسازی» (Deployments) را بهصورت خودکار انجام دهد.
ما میتوانیم Pod-ها (کانتینرهای داکر) و سرویسهایمان را روی ابر راهاندازی کنیم و این کار بهوسیله نصب و پیکربندی تعداد گره مدنظر (خوشهها) انجام میشود.
کوبرنتیز در واقع یک پلتفرم «ساماندهی کانتینر» یا به اصطلاح «Container Orchestration» بهشمار میرود. این پلتفرم به ما کمک میکند تا اپلیکیشنها را در مقیاس لازم (و بهطور معمول بزرگ) مدیریت و «مستقر» (Deploy) کنیم. بهکارگیری این سیستم به توسعهدهندگان اجازه میدهد تا بهجای صرف زمان برای نگهداشت زیرساخت، روی کدهای اپلیکشن خود متمرکز شوند و بدین ترتیب طراحی آن بهگونهای است که مدیریت چرخه عمر - یا چرخه تولید و ایجاد محصول - را تسهیل میکند.
از ویژگیهایی که کوبرنتیز برایمان فراهم میکند میتوان به موارد زیر اشاره کرد.
- «خود بهبودی» (Self-Healing)
- «مقیاسدهی خودکار» (Automatic Scaling)
- توازن بار (Load Balancing)
ویژگی Self-Healing در کوبرنتیز چیست ؟
این ویژگی، نقش مهمی را در مفهوم کوبرنتیز ایفا میکند. کانتینرهایی که در فرایند اجرا به مشکل بر میخورند، بهوسیله کوبرنتیز بهطور خودکار دوباره راهاندازی میشوند. همچنین کانتینرهایی را که به بررسی صحت - تعریف شده توسط کاربر - پاسخ نمیدهند، بهطور خودکار از کار متوقف میکند.
این خصوصیت، کوبرنتیز را به راهکاری مطلوب و ایدهآل برای استقرارهایی با مقیاس بزرگ تبدیل میکند. کوبرنتیز همچنین توسعهپذیری بسیار بالایی دارد که به کاربران امکان دهد تا قابلیتهای جدیدی را بر حسب نیاز اضافه کنند. افزون بر این، «کوبرنتیز» اوپن سورس است و پشتیبانی جامعه بزرگی از توسعهدهندگان را بههمراه دارد. به همین دلیل، به پلتفرم پرکاربرد و همه فن حریفی تبدیل شده است.
مفاهیم کوبرنتیز چیست ؟
در این قسمت میخواهیم با برخی از مفاهیم اصلی در کوبرنتیز، نظیر Pod-ها، «گرهها» (Nodes)، «سرویسها» (Services) و «استقرارها» (Deployments) آشنا شویم.
Pod در کوبرنتیز چیست ؟
Pod، کوچکترین و سادهترین واحد پایهایِ اپلیکیشن در کوبرنتیز است. این شی، پردازشهای در حال اجرا روی خوشه را نشان میدهد.
Pod-ها در واقع، واحد پایهای «استقرارِ» (Deployment) کوبرنتیز بهشمار میروند. هنگامیکه سرویس یا استقراری ایجاد میشود، کوبرنتیز بهصورت خودکار یک Pod با کانتینر درونی میسازد. Pod بیانگر گروهی از یک یا چندین کانتینر - همچون کانتینرهای داکر - است که منابع ذخیرهسازی و شبکه مشترک دارند. Pod-های کوبرنتیز در حقیقت، اپلیکیشنها را میزبانی میکنند.
Node در کوبرنتیز چیست ؟
گره یا نود به زبان ساده، میزبانی است که میتواند ماشینهای فیزیکی یا مجازی را اجرا کند. «گرهها» (Nodes) در حقیقت، ماشینهایی - نظیر ماشین مجازی یا سرور فیزیکی - هستند که Pod-ها روی آن مستقر شدهاند. گرهها همچنین منابع شبکه و ذخیرهسازی مرتبط به هم دارند. این مؤلفهها در کوبرنتیز برای اجرای Pod-ها و عرضه منابع مورد نیاز آنها بهکار میروند. هر گره میتواند حداقل ۲ سرویس آورده شده در ادامه را اجرا کند.
- «زمان اجرای کانتینر» (Container Runtime)
- Kubelet
سرویس در کوبرنتیز چیست ؟
«سرویس» برای آشکارسازی اپلیکیشنهای در حال اجرا در کوبرنتیز، به دنیای بیرون آن بهکار میرود. یک «سرویس» مجموعهای منطقی از Pod-ها و سیاستی برای دسترسی به آنها را تعریف میکند. سرویسها بهوسیله پروتکلهای گوناگونی مانند آنچه در ادامه آورده شده، میتوانند آشکار شوند.
- ClusterIP
- TCP
- UDP
- NodePort
- LoadBalancer
- HTTP
استقرار در کوبرنتیز چیست ؟
«استقرارها» (Deployments)، به منظور مدیریت چرخه عمر اپلیکیشنها در کوبرنتیز بهکار میروند. استقرار (یا نصب) بیانگر وضعیتی دلخواه (مطلوب) برای یک اپلیکیشن - همچون نسخهای مشخص از یک Image یا یک پیکربندی خاص - است. استقرارها میتوانند به منظور بهروزرسانی اپلیکیشنها، بازگرداندن تغییرات و همچنین کم یا زیاد کردن اندازه (مقیاس) اپلیکیشنها مورد استفاده قرار گیرند.
Namespace در کوبرنتیز چیست ؟
به خوشههای مجازی گوناگونی که بهوسیله کوبرنتیز پشتیبانی میشود، «فضای نام» (Namespace) میگویند. از این طریق است که منابع خوشه بین ۲ یا چند کاربر تقسیم میشود.
ویژگی های کوبرنتیز چیست ؟
از ویژگیهای پلتفرم کوبرنتیز میتوان به موارد فهرست شده در ادامه اشاره کرد.
- «ساخت و از بین بردن کانتینرها» (Create and Destroy Container)
- «زیرساخت با ارتقا خودکار» (Auto Scalable Infrastructure)
- «توسعه افقی» (Horizontal Scaling)
- «متوازنکننده بار» (Load Balancers)
- «زنده و در دسترس بودن» (Liveness and Readiness)
- «زیرساخت بهشدت قابل پیشبینی» (Highly Predictable Infrastructure)
- «سیستم نصب و ذخیرهسازی برای اجرای اپلیکیشنها» (Mounts and Storage System to run Applications)
- «بهکارگیری مؤثر منابع» (Efficient Resource Usage)
- مدیریت خودکار امنیت، شبکه و مؤلفههای آن
هر کدام از این ویژگیها را در ادامه بهطور کامل توضیح میدهیم.
ایجاد و حذف کانتینرها در کوبرنتیز چیست ؟
ایجاد خودکار منابع بر اساس فایلهای پیکربندیِ YAML، یکی از مزایای بیشمار بهکارگیری کوبرنتیز محسوب میشود. این ویژگی، مدیران را از ایجاد دستی منابعی همچون Pod-ها رها کرده و بدینترتیب تا حد زیادی در زمان، صرفهجویی میشود.
همچنین میتوان ادعا کرد که بهدلیل مدیریت ساخت تمامی منابع توسط خود کوبرنتیز، ریسک خطای انسانی کاهش مییابد. افزون بر این، عملیات «تکثیر» (Replicate) در میان سرورهای متعدد را تسهیل میکند چون تنها چیزی که برای این کار نیاز دارد یک فایل پیکربندی YAML معتبر است. به همین خاطر کوبرنتیز میتواند فرایند مدیریت استقرار سرور را تا حد زیادی ساده سازد.
ارتقا خودکار زیرساخت در کوبرنتیز چیست ؟
مقیاسدهی خودکار، هنگام مدیریت استقرار در سطوح وسیع، ویژگی اصلی کوبرنتیز محسوب میشود. کوبرنتیز با مقیاسدهی خودکار، بر مبنای عواملی نظیر بهکارگیری CPU، میزان استفاده از حافظه و ترافیک شبکه، میتواند منابع لازم برای اجرای بدون مشکل اپلیکیشنها را فراهم کند.
این ویژگی، افزون بر حذف نیاز به تعاملات (مداخلات) دستی، به این امر کمک میکند تا مطمئن شویم که اپلیکیشنها توانایی مدیریت صحیح جهشهای ناگهانی ترافیکی را دارند. بنابراین میتوان گفت که مقیاسپذیری خودکار، مؤلفه بسیار مهمی در استقرارهای کوبرنتیز بهشمار میرود.
مقیاس دهی افقی در کوبرنتیز چیست ؟
توسعه افقی بهعنوان یکی از ویژگیهای کوبرنتیز، این امکان را برای کاربران فراهم میکند تا تعداد «گرههای» (Nodes) موجود در «خوشه» (Cluster) را کم یا زیاد کنند و این کار با اضافه یا حذف کردن «کپیها» (Replicas) از استقرار، صورت میگیرد. کنترلگر استقرار مطمئن میشود که تعداد Replica-ها منطبق با تعداد مورد نظر است.
متوازن کننده بار در کوبرنتیز چیست ؟
این ویژگیِ کوبرنتیز، Workloadها - یا همان اپلیکیشنهایی که روی کوبرنتیز اجرا میشوند - را در میان گرههای متعدد در یک خوشه، توزیع میکند. بدینترتیب اطمینان میدهد که هیچ گرهای دچار «سربار» (Overloaded) نمیشود و Workload بهطرز یکنواختی توزیع شده است. با بهکارگیری «متوازنکننده بار» (Load Balancer) میتوانیم کارایی خوشه کوبرنتیز خود را بهبود دهیم و احتمال از کار افتادگی آن را کم کنیم.
زنده و آماده بودن در کوبرنتیز چیست ؟
این ۲ ویژگی مهم از کوبرنتیز به ما کمک میکنند تا مطمئن شویم که اپلیکیشنمان همانطور که تعیین شده، اجرا میشود. بررسیکننده «زنده بودن» (Liveness) برای تعیین فعال بودن اپلیکیشن بهکار میرود و در صورتی که برنامه از کار افتاده باشد آن را بهطور مجدد راهاندازی میکند. بررسیکننده «آماده بودن» (Readiness) نیز از سویی دیگر برای تشخیص آمادگی اپلیکیشن در دریافت ترافیک، مورد استفاده قرار میگیرد.
هر ۲ ویژگی Liveness و Readiness را میتوان برای بهکارگیری روشهای گوناگون بررسیِ سلامت، تنظیم کرد. افزون بر این، بررسیکنندههای مذکور میتوانند برای اجرا در بازههای زمانی منظم پیکربندی شوند و هنگام بروز ناکامی در بررسی سلامت اپلیکشین، به ما هشدار دهند.
کوبرنتیز همچنین، استقرارهای شکست خورده را بهطور خودکار باز میگرداند - به اصطلاح Roll back میکند - و از این طریق اطمینان میدهد که اپلیکشین ما هیچگاه در حالت ناپایدار قرار نمیگیرد.
سیستم نصب و ذخیره سازی برای اجرای اپلیکیشنها در کوبرنتیز چیست ؟
کوبرنتیز با فراهم کردن سیستم نصب و ذخیرهسازی میتواند برای اجرای اپلیکیشنها، مورد استفاده قرار گیرد. هدف طراحی این سیستم عرضه روشی برای دسترسی اپلیکیشنها به دادههای ذخیره شده در سرور راه دور، بدون احتیاج به ایجاد رونوشتی از دادهها روی سیستم محلی است.
سیستم نصب و ذخیرهسازی همچنین برای مواقعی مفید است که یک اپلیکیشن به خواندن و نوشتن دادهها در مکانی اشتراکی نظیر پایگاه داده نیاز دارد. با استفاده از این سیستم، توسعهدهندگان میتوانند از ایجاد و نگهداشت زیرساخت ذخیرهسازی خود صرفنظر و بهجای آن با تکیه بر کوبرنتیز، راهکار ذخیرهسازی مطمئن و مقیاسپذیری را فراهم کنند.
استفاده مؤثر و کارآمد از منابع در کوبرنتیز چیست ؟
استفاده مفید از منابع، یکی از خصوصیات کلیدی کوبرنتیز بهشمار میرود. این پلتفرم با استفاده از برنامهریزی هوشمند، اطمینان میدهد که Pod-ها تنها روی گرههایی اجرا میشوند که منابع مورد نیازش را در اختیار دارند. از این طریق، تضمین میکند که منابع تا حد امکان بهصورت مؤثر و کارآمدی بهکار گرفته میشوند و هیچ گرهای دچاد سربار نمیشود.
کوبرنتیز افزون بر این میتواند در پاسخ به تغییرات تقاضا، بهطور پویا مقیاس Pod-ها را کم یا زیاد کند. بدین ترتیب اطمینان حاصل میکنیم که Pod-ها همیشه در سطح بهینهای اجرا میشوند و منابعی هدر نمیرود. در نتیجه میتوان گفت که کوبرنتیز سطح بالایی از بهرهوری را در مواجهه با بهکارگیری منابع، فراهم میکند.
مدیریت خودکار امنیت، شبکه و مؤلفه های آن در کوبرنتیز چیست ؟
همانطور که گفتیم، کوبرنتیز یک سیستم ساماندهی کانتینر است که مدیریت امنیت، شبکه و مؤلفههای شبکه را خودکارسازی میکند. همچنین به کاربران امکان میدهد تا اپلیکیشنهای کانتینری خود را درون محیطی خوشهای «مستقر» (Deploy) و مدیریت کنند.
کوبرنیتر بهوسیله توزیع Workload-ها در میان گرههای متعدد، «دسترسیپذیری» (Availability) و «مقیاسپذیری» (Scalability) بالایی را فراهم میکند. کوبرنتیز همچنین مواردی نظیر «خود سازندگی» (Self-Healing)، «بهروزرسانیهای چرخشی» (Rolling Updates) و «مقیاسدهی افقی» را نیز در بر میگیرد.
معماری کوبرنتیز چیست ؟
در این قسمت میخواهیم معماری کوبرنتیز را مورد بررسی قرار دهیم. لازم است بدانیم که این معماری بر پایه چندین مؤلفه اصلی استوار است که هر کدام از آنها نقشی کلیدی در عملکرد کلی سیستم ایفا میکنند.
معماری کوبرنتیز در حقیقت برگرفته از معماری کلاینت-سرور است که ۲ کامپوننت اصلی زیر را در بر میگیرد.
- گره Master (واحد کنترل | Control Plane)
- گره Slave (گره کارگر)
گره Master در معماری کوبرنتیز، به منظور مدیریت وضعیتهای یک خوشه بهکار میرود و بهطور کلی نقطه ورودی برای تمامی انواع وظایف (تسکهای) مدیریتی محسوب میشود. در خوشه کوبرنتیز، بیش از یک گره Master برای بررسی قدرت تحمل نقص وجود دارد.
واحد کنترل کوبرنتیز یا گره Master حاوی ۴ کامپوننت مختلف است که در ادامه فهرست کردهایم.
- API Server
- «برنامهریز» (Scheduler)
- «مدیر کنترلگر» (Controller Manager)
- ETCD
گره کارگر یا «Slave»، دستگاهی فیزیکی است که اپلیکیشنها را بهوسیله Pod-ها اجرا میکند. این گره تمامی سرویسهای اساسی را در بر میگیرد که به کاربر امکان تخصیص منابع به کانتینرهای برنامهریزی شده را میدهد. اسامی کامپوننتهای گوناگون موجود در گره کارگر را در ادامه آوردهایم.
- Kubelet
- Kube-Proxy
- Pod-ها
هر Pod در این معماری، ترکیبی از یک یا چند کانتینر است که بهطور منطقی با همدیگر روی گرهها اجرا میشوند. یک گره کارگر، بهسادگی میتواند چندین Pod را اجرا کند.
در ادامه، سایر مؤلفهها را ابتدا فهرست کرده و سپس هر کدام را توضیح دادهایم.
- «واحد کنترل» (Control Plane)
- «صفحه داده» (Data Plane)
- Kube-APIserver
- Etcd
- Kube-Controller-Manager
- Kube-Scheduler
- Kubelet
- Kube-Proxy
- Kubectl Client
- Container Runtime
Control Plane
«واحد کنترل» (Control Plane)، مسئولیت مدیریت خوشه را بر عهده دارد و شامل کامپوننتهای متعددی است که هرکدام نقش خاصی در مدیریت کلی خوشه ایفا میکنند. از مهمترینِ این کامپوننتها میتوان به موارد زیر اشاره کرد.
- پایگاه داده Etcd
- سرور API
- «برنامهریز» (Scheduler)
- مدیر کنترلگر
پایگاه داده Etcd، وضعیت خوشه - که اطلاعاتی در مورد Podها و سرویسها است - را ذخیره میکند. سرور API با ارائه «RESTful API» میتواند برای مدیریت خوشه مورد استفاده قرار گیرد. «برنامهریز»، در واقع برنامهریزی Pod-ها روی گرهها را انجام میدهد. «مدیر کنترلگر»، کنترلگر «رونوشت» (Replication) و «حسابهای سرویس» را مدیریت میکند.
Data Plane
«صفحه داده» (Data Plane) کوبرنتیز، در بر گیرنده گرههای درون خوشه است. هر گره با اجرای یک پاد، Kubelet-ها را اجرا میکند. Pod-ها نیز گروهی از کانتینرها هستند که «فضای نامِ» (Namespace) شبکه و فضای ذخیرهسازی را به اشتراک میگذارند. گرهها همچنین با اجرای سرویس پروکسی، توازنِ بار و «کشف سرویس» (Service Discovery) را برای Pod-ها را فراهم میکنند.
Kube-APIserver
Kube-APIserver، نقطهای مرکزی برای تمامی فراخوانیهای API-های کوبرنتیز محسوب میشود. این کامپوننت، عهدهدار اعتبارسنجی دادهها، «مجوز» (Authorization) و کنترل دسترسی است و همچنین فایل مانیفست را درون Etcd ذخیره میکند. Kube-APIserver، رابطی برای تکمیل پیکربندی با مقادیر پیشفرض عرضه میکند و اطمینان میدهد که تمامی تنظیمات، پیش از ذخیره در Etcd بهدرستی تنظیم شدهاند.
Etcd
کامپوننت Etcd در معماری کوبرنتیز، فضای ذخیرهسازی توزیع شده و با دسترسیپذیری بالا برای دادههای «کلید مقدار» است که برای ذخیرهسازی پیکربندی و تنظیمات خوشه بهکار میرود. این کامپوننت، مِتا دیتا و هر ۲ وضعیت «مطلوب» و «کنونی» را برای هریک از منابع نگه میدارد. بهطور کلی، هر شی یا منبع ساختهشده، در Etcd نیز ذخیره میشود.
Kube-Controller-Manager
این کامپوننت، وظیفه اجرای کنترلگرهای گوناگونی را بر عهده دارد که وضعیت خوشه کوبرنتیز را مدیریت میکنند. کامپوننتهای کنترلگر، وضعیت اشتراکی خوشه را بهواسطه APIserver، نظارت و تغییراتی را اعمال میکنند تا مطمئن شوند که وضعیت مطلوب (مورد نظر) در وضعیت کنونی منعکس میشود.
Kube-Controller-Manager با کنترلگرهای متعددی همراه است که هر یک عهدهدار کار (تسک) خاصی است. بهطور مثال، کنترلگر Replication مطمئن میشود که تعداد مشخصی از Pod-ها تمام مدت در حال اجرا هستند یا کنترلگر Service، توازن بار و Service Discovery را برای سرویسهای کوبرنتیز فراهم میکند.
افزون بر این، kube-Controller-Manager، کنترلگرهایی برای مدیریت ذخیرهسازی، شبکه و غیره را نیز در بر میگیرد. این کامپوننت با همراهی طیف وسیعی از کنترلگرها، استقرار کوبرنتیز را قویتر و مدیریت آن را سادهتر میسازد.
Kube-Scheduler
Kube-Scheduler وظیفه دارد تا Pod-های روی گرهها در خوشه را برنامهریزی کند. همچنین از عوامل گوناگونی - مانند منابع موجود و بهکارگیری گره - استفاده میکند تا تعیین کند که کدام گره برای اجرای Pod مورد نظر، بهترین انتخاب است .
Kubelet
Kubelet بهعنوان عاملی که روی گرههای خوشه اجرا میشود، مسئول بررسی این است که تمامی Pod-های اختصاص داده شده به یک گره، در حال اجرا و همچنین سلامت باشند. این عامل همچنین ارتباط با گره Master کوبرنتیز را مدیریت میکند و وضعیت گره و Pod-هایش را گزارش میدهد.
Kube-Proxy
Kube-Proxy، عاملی است که روی گرههای خوشه اجرا میشود و مسئولیت مسیریابی ترافیک بین سرویسها و Pod-ها را بر عهده دارد.
کلاینت Kubectl
کلاینت Kubectl به منظور تعامل با سرور API کوبرنتیز برای دستکاری منابع موجود در خوشه کوبرنتیز بهکار میرود. این مؤلفه برای ایجاد، بهروزرسانی، حذف و دیدن منابع درون خوشه کوبرنتیز نیز استفاده شود.
کلاینت Kubectl همچنین برای پیکربندی خوشه کوبرنتیز - مواردی مانند راهاندازی، شبکهسازی، RBAC و سایر تنظیمات در سطح خوشه - میتواند بهکار برده شود. افزون بر این، Kubectl Client میتواند به منظور دیباگ و خطایابی مسائل در خوشه کوبرنتیز برای اتصال به سرور API کوبرنتیز نیز مورد استفاده قرار گیرد.
ابزار خطِ فرمان Kubectl با استفاده از API کوبرنتیز با خوشه کوبرنتیز تعامل دارد. Kubectl بهطور پیشفرض سعی میکند تا با استفاده از اعتبارنامه مبتنی بر جواز که توسط Admin عرضه شده است به سرور API متصل شود.
از سوی دیگر، Kubectl میتواند برای استفاده از توکنهای «حامل» یا «نام کاربری و رمز عبور» به منظور هویتسنجی، تنظیم شود. پس از اینکه Kubectl تصدیق شد، به منظور دستکاری منابع موجود در خوشه کوبرنتیز، درخواستهایی را به سرور API میفرستد.
Container Runtime
«زمان اجرای کانتینر» در واقع نرمافزاری است که کانتینرها را روی «میزبان» (Host) داده شده اجرا میکند. کوبرنتیز از Runtime-های گوناگونی نظیر Docker ،Rkt و CRI-O پشتیبانی میکند.
مؤلفههای اصلی موجود در سیستم کوبرنتیز با همکاری یکدیگر، اپلیکیشنهای کانتینری را در میان خوشهای از گرهها ساماندهی و هماهنگ میکند. در ادامه، خلاصهای از عملکرد این مؤلفهها را آوردهایم.
- واحد کنترل، چندین کامپوننت نظیر سرور API، برنامهریز و مدیر کنترلگر را در بر میگیرد.
- سرور API بهعنوان مهمترین کامپوننت در واحد کنترل کوبرنتیز محسوب میشود و مسئولیت نمایان ساختن API کوبرنتیز را بر عهده دارد.
- «برنامهریز» نیز، Pod-های روی گرههای موجود در خوشه را برنامهریزی میکند.
- مدیر کنترلگر، «سرویسی» (Daemon) است که کنترلگرهای متعددی - مثل «کنترلگر رونوشت» (Replication controller) - را درون خود جای داده است و وضعیت سیستم را رصد کرده و تغییرات لازم را به منظور حصول اطمینان از نگهداشت وضعیت مطلوب اِعمال میکند.
افزون بر کامپوننتهای واحد کنترل، تعدادی کامپوننت گره کارگر - نظیر Kubelet و KubeProxy - نیز وجود دارد که در ادامه آوردهایم.
- Kubelet مسئول این است که از اجرای کانتینرها روی یک گره اطمینان حاصل کند و به سرور API گزارش دهد.
- Kube-Proxy نیز، شبکهسازی و توازن بار برای سرویسهای روی گره را عهدهدار است. تمامی این کامپوننتها به منظور ارائه پلتفرم هماهنگسازی برای اپلیکیشنهای کانتینری، با یکدیگر همکاری میکنند.
Container یا Container-Runtime
Kubernetes Container یا Container-Runtime - معروف به زمان اجرای کانتینر - سیستمی است که برای خودکارسازی استقرار، مقیاسدهی و مدیریت اپلیکیشنهای کانتینری مورد استفاده قرار میگیرد. این سیستم روش سادهای را برای مدیریت و نظارت کانتینرهایمان فراهم میکند که باعث میشود گزینه ایدهالی برای اجرای Workload-های عملیاتی در فضای ابری باشد.
Kubernetes Container یا Container-Runtime بر مبنای داکر است ولی چندین ویژگی دیگر را نیز در بر میگیرد که باعث مناسبتر شدن آن برای اجرای Workload-های عملیاتی میشود. این قابلیتها، مواردی نظیر «پشتیبانی از کانتینرهای متعدد در هر میزبان»، «راهاندازی دوباره خودکار» و «خودبهبودی» (Self-Healing) را شامل میشود.
کوبرنتیز همچنین تعدادی ابزار برای نظارت و مدیریت کانتینرها - مثل Kubelet و Kubectl - را در اختیارمان قرار میدهد. این ابزارها رصد کانتینرها را ساده میسازد و مطمئن میشود که بهدرستی و بدون مشکل اجرا میشوند.
نحوه نصب کوبرنتیز روی ویندوز
در این قسمت با نحوه نصب و راهاندازی پلتفرم کوبرنتیز و داشبورد گرافیکی مبتنی بر وب آن - که اجازه پایش و مدیریت موارد مختلفی را میدهد - روی سیستم عامل ویندوز آشنا میشویم و مراحل آن را با هم مرور میکنیم.
در ادامه، برخی از ملزومات سختافزاری و نرمافزاری که باید مورد توجه قرار گیرد را بیان کردهایم.
پیش نیازهای سخت افزاری کوبرنتیز چیست ؟
- گره Master، نیازمند حداقل ۲ گیگابایت حافظه است.
- گره Worker، ظرفیت ۷۰۰ مگابایتی حافظه را نیاز داد.
پیش نیازهای نرم افزاری کوبرنتیز چیست ؟
- Hype-V
- داکر دسکتاپ
- MAC address یکتا
- UUID یکتا برای هر گره
همچنین لازم است تا مطمئن شویم که اتصالات کاملی بین تمامی دستگاههای موجود در خوشه وجود دارد.
مراحل نصب
در ادامه، مراحل نصب کوبرنتیز را با هم مرور میکنیم.
گام ۱ نصب و تنظیم Hyper-V
همانطور که میدانیم، سیستم عامل ویندوز، نرمافزار مجازیسازی خود بهنام Hyper-V را دارد که نمونه پیشرفتهتری از VirtualBox است. Hyper-V به ما امکان میدهد تا «ماشینهای مجازی» (VMs) خود را بهوسیله خطِ فرمان یا ابزار رایگان GUI مایکروسافت، مدیریت کنیم. فعالسازی Hyper-V ساده است اما پیش از آن میبایست مطمئن شویم که کامپیوترمان الزامات زیر را بر آورده میسازد.
- سیستم عامل ما ویندوز ۱۰ (یکی از نسخههای Enterprise ،Pro یا Education) باشد.
- حداقل ۴ گیگابایت حافظه RAM و پردازندهای با پشتیبانی از مجازیسازی داشته باشیم (بررسی کنیم که این مورد در تنظیمات BIOS هم فعال باشد).
ویژگیهایی نظیر Hyper-V - که ممکن است هنگام نصب ویندوز، فعال نشده باشند - را میتوانیم فعالسازی یا غیر فعال کنیم. لازم به ذکر است که برخی از این ویژگیها برای دانلود کامپوننتهای اضافی از طریق آپدیت ویندوز، نیازمند دسترسی به اینترنت هستند. به منظور فعالسازی Hyper-V روی سیستم خود، طبق مراحل آورده شده پیش میرویم.
وارد Control Panel میشویم و گزینه Programs را انتخاب میکنیم.
سپس در قسمت Programs and Features، گزینه Turn Windows Features On or Off را انتخاب میکنیم.
موارد Hyper-V و Windows Hypervisor Platform را علامت زده و در آخر OK میکنیم.
دانلود و نصب ویژگیها ممکن است دقایقی به طول بینجامد و در حین آن ویندوز، نیازمند راهاندازی دوباره (یا Restart) باشد.
برای اطمینان از نصب موفقیتآمیز Hyper-V روی سیستم، دستور آورده شده در ادامه را در پاورشل (در حالت Administrator) اجرا میکنیم.
Get-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V
هنگامیکه state : Enabled را در پاسخ به اجرای دستور بالا در پاورشل مشاهده کردیم، به سراغ ادامه مراحل میرویم.
گام ۲ دانلود داکر برای ویندوز و نصب آن
همانطور که پیشتر نیز بیان کردیم، کوبرنتیز سیستمی برای هماهنگی کانتینرها است که روی داکر ساخته شده است. این پلتفرم، در اصل ابزاری برای تعامل با کانتینرهای داکر و مدیریت موارد مختلف در سطح سازمانی محسوب میشود. کاربران ویندوز میتوانند از داکر دسکتاپ استفاده کنند. «داکر دسکتاپ» برای ویندوز را بهسادگی میتوانیم از «+» دانلود و نصب کنیم.
داکر دسکتاپ برای ویندوز، نسخهای از داکر است که برای ویندوز ۱۰ بهینهسازی شده است. این نسخه یک اپلیکیشن ویندوزی است که نصب و راهاندازی، ارسال و اجرای برنامههای «داکریشده» (Dockerized) را ساده میکند. استفاده از این برنامه سریعترین و مطمئنترین روش برای توسعه برنامههای داکر روی ویندوز بهشمار میرود. به این دلیل که از شبکه و مجازیسازی Hyper-V ویندوزی استفاده میکند. داکر دسکتاپ برای ویندوز میتواند کانتینرهای داکر را روی ویندوز و همچنین لینوکس اجرا کند.
برای نصب داکر دسکتاپ میبایست طبق مراحل زیر پیش برویم.
- برای اجرای نصبکننده، روی فایل Docker for Windows Installer دابلکلیک میکنیم.
- پس از تکمیل فرایند نصب، داکر بهطور خودکار اجرا میشود. پس از اجرای داکر، از طریق ترمینال میتوانیم به آن دسترسی داشته باشیم (آیکن نهنگِ داکر در ناحیه اعلان ویندوز نیز قابل مشاهده است).
- میتوانیم دستورات داکر را در ترمینال خطِ فرمان - مثل پاورشل - آزمایش کنیم.
- با اجرای دستور Docker Version، نسخه داکر را بررسی میکنیم.
- اجرای Docker Run Hello-World نیز میتواند توانایی داکر در دریافت و اجرای ایمیجها را تصدیق کند.
تا هنگامیکه برنامه داکر دسکتاپ برای ویندوز در حال اجرا است، میتوانیم بهوسیله هر ترمینالی به آن دسترسی داشته باشیم. آیکن نهنگ داکر در نوار وظیفه ویندوز دارای دکمه تنظیمی است که با رابط کاربری میتوان به آن دسترسی داشت.
گام ۳ نحوه نصب کوبرنتیز روی ویندوز ۱۰
داکر در بر گیرنده رابط گرافیکی است که به ما امکان تغییر برخی از تنظیمات یا نصب و فعالسازی کوبرنتیز را میدهد. برای نصب کوبرنتیز، کافی است تا دستورالعملهایی که در ادامه آورده شده را دنبال کنیم.
روی آیکن داکر در Tray (کنار ساعت ویندوز) راستکلیک و Properties را انتخاب میکنیم.
سپس گزینه Settings را از منوی کشویی انتخاب میکنیم.
Kubernetes را از پنل سمت چپ انتخاب میکنیم و سپس گزینه Enable Kubernetes را علامت (تیک) میزنیم. در نهایت روی دکمه Apply کلیک میکنیم.
داکر، وابستگیها و بستههای اضافی را در طول این فرایند، نصب خواهد کرد. این عمل با توجه به کارایی سیستم و سرعت اینترنت، دقایقی بهطول میانجامد و در نهایت پیام «Installation Complete» روی صفحه نشان داده میشود. بعد از اینکه کوبرنتیز نصب شد، برای اطمینان از کارکرد صحیح همه چیز، میتوانیم از برنامه داکر استفاده کنیم.
در این هنگام، اگر هر ۲ سرویس داکر و کوبرنتیز با موفقیت و بدون خطا اجرا شوند آیکن آنها در پایین و سمت چپ پنجره بهرنگ سبز در میآید.
گام ۴ نحوه نصب داشبورد کوبرنتیز چیست ؟
«داشبورد کوبرنتیز» در واقع، رابط کاربری رسمی و مبتنی بر وبی است که برای مدیریت منابع کوبرنتیز بهکار میرود. این داشبود بهصورت پیشفرض راهاندازی نمیشود. اپلیکیشنهای کوبرنتیز را میتوان بهوسیله ابزار رابط خطِ فرمان «Kubectl» به آسانی راهاندازی کرد. از این طریق به ما امکان میدهد تا با فضای ابری خود تعامل داشته باشیم و Pod-ها، گرهها و خوشههای خود را مدیریت کنیم. همچنین میتوانیم منابع کوبرنتیز را با ارسال آرگومان apply و بهدنبال آن فایل پیکربندی YAML خود، بهآسانی ایجاد یا بهروزرسانی کنیم.
با استفاده از دستورات زیر داشبورد کوبرنتیز را فعال و پیادهسازی میکنیم. ابتدا فایل پیکربندی YAML را از «+» دریافت میکنیم و سپس دستور زیر برای راهاندازی آن بهکار میبریم.
. kubectl apply -f .\recommended.yaml
برای اطمینان از اینکه داشبود کوبرنتیز فعال و در حال اجرا است، دستور زیر را اجرا میکنیم.
kubectl.exe get -f .\recommended.yaml.txt
نتیجه این دستور، فهرستی شبیه به تصویر زیر خواهد بود.
گام ۵ نحوه دسترسی به داشبورد کوبرنتیز چیست ؟
دسترسی به داشبورد بهوسیله توکنها، با ۲ روش امکانپذیر است.
- با استفاده از توکن پیشفرض که حین نصب کوبرنتیز ساخته شده است.
- ایجاد «کاربران»، اعطای مجوز (دسترسی) به آنها و سپس دریافت توکن ساخته شده (روش امنتر).
ما روش اول را بهدلیل سادگی بهکار میبریم. برای این منظور، دستور زیر را در پاورشل (و نه CMD) اجرا میکنیم.
((kubectl -n kube-system describe secret default | Select-String "token:") -split " +")[1]
توکن تولید شده را کپی و دستور زیر را اجرا میکنیم.
kubectl proxy.
لینک نمایش داده شده را در مرورگر خود باز میکنیم.
http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/
توکن را انتخاب و توکن ایجاد شده را الصاق میکنیم. سپس وارد میشویم (Sign In).
اگر تمامی موارد بهطور صحیح راهاندازی شده باشد، میتوانیم داشبورد و منابع ابری خود را مشاهده کنیم. از این طریق میتوانیم تقریباً تمامیکارهای دشوار را انجام دهیم بدون اینکه هر بار نیاز به رابط خطِ فرمان داشته باشیم. البته این امکان وجود دارد که هر از گاهی ناچار به استفاده از خطِ فرمان باشیم ولی اگر Docker و Kubernetes را خوب درک نکرده باشیم یا اینکه زمان کافی برای مدیریت ابر خود نداریم، بهتر است از برخی ارائهدهندگان PaaS کمک بگیریم که بهطور قطعی، هزینه بیشتری را برایمان بهدنبال خواهد داشت.
سوالات متداول
در این قسمت برخی از پرسشهای متداول در مورد سیستم کوبرنتیز را بیان کرده و به آنها پاسخ دادهایم.
معنای واژه کوبرنتیز چیست ؟
نام Kubernetes، از کهنواژهای یونانی به معنای سکاندار - یا هدایتگر کشتی (بهعنوان مثال کشتی حاوی کانتینرها) - گرفته شده است. سکان موجود در لوگوی کوبرنتیز بیانگر همین قضیه است و برای نکوداشت نام اولیه آن یعنی «پروژه ۷»، ۷ وجه یا پَره دارد.
مهارت های لازم برای یادگیری کوبرنتیز چیست ؟
از مهارتهای مورد نیاز برای یادگیری کوبرنتیز میتوان به مبانی لینوکس و دستورات آن و همچنین آشنایی نسبی با فناوریهای Runtime کانتینر (اجرا کننده کانتینر) - نظیر داکر - اشاره کرد.
سریع ترین روش برای یادگیری کوبرنتیز چیست ؟
اولین موردی که میبایست انجام دهیم، فهمیدن مبانی و اصول اولیه است. برای این کار میتوانیم با کوبرنتیز و معماری آن شروع کنیم. در این میان با اصطلاحات گوناگونی رو به رو میشویم که میبایست بدون رد شدن از آن، خوب یاد گرفته شوند، چون اینها عناصر سازنده هستند. افزون بر این، میبایست به تمرین عملی با Kubectl بپردازیم. بدین ترتیب علاوه بر مباحث تئوری، با نحوه بهکار بستن آنها نیز آشنا میشویم.
کامپوننت های اصلی معماری کوبرنتیز چیست ؟
در معماری کوبرنتیز با ۲ کامپوننت اصلی - یعنی گره Master (یا واحد کنترل) و گره کارگر - رو به رو هستیم. گره Master خود شامل ۴ کامپوننت بهنامهای سرور API، برنامهریز، مدیر کنترلگر، Etcd و مدیر کنترلگر ابر (اختیاری) است. گره کارگر نیز ۳ مؤلفه Kubelet، Kube-Proxy و Runtime کانتینر را در بر میگیرد.
مفاهیم کوبرنتیز چیست ؟
در حین یادگیری کوبرنتیز، با اصطلاحات جدید و گوناگونی - همچون Pod-ها، سرویسها، فضاهای نام، استقرار و غیره - رو به رو خواهیم شد که بهعنوان عناصر سازنده کوبرنتیز و مفاهیم آن، در نظر گرفته میشوند.
مانیفست در کوبرنتیز چیست ؟
مانیفست به بیان ساده، جزئیات شی API کوبرنتیز در قالب JSON یا YAML را در بر میگیرد. مانیفست در واقع، مشخصکننده وضعیت مطلوب شی است که کوبرنتیز، هنگامیکه مانیفست را اِعمال کردیم، آن را حفظ میکند.
Workload در کوبرنتیز چیست ؟
Workload، اپلیکیشنی است که روی کوبرنتیز اجرا میشود. فارغ از اینکه Workload ما کامپوننتی واحد باشد یا چندگانه - که با هم کار میکنند - در کوبرنتیز آن را درون مجموعهای از Pod-ها اجرا میکنیم. لازم به ذکر است که Pod در کوبرنتیز، بیانگر مجموعهای از کانتینرهای در حال اجرا روی خوشه است.
فرق داکر با کوبرنتیز چیست ؟
داکر، موتور اجرای کانتینر یا «زمان اجرای کانتینر» (Container Runtime) است، در حالیکه کوبرنتیز، پلتفرمی برای اجرا و مدیریت کانتینرهایی از Container Runtimes-های متعدد بهشمار میرود.
جمعبندی
در این مطلب از مجله فرادرس، تا حد امکان بهطور کامل توضیح دادیم که کوبرنتیز چیست و چه کاربردی دارد. گفتیم که کوبرنتیز ابزار «هماهنگسازی» اوپن سورسی است که با آن، اپلیکیشنهای «کانتریشده» (Containerized) را مدیریت میکنند. همچنین معماری «کلاینت - سرور» کوبرنتیز و اجزای سازنده آن را نیز مورد بررسی قرار دادیم.