در اینجا به معرفی kubernetes می پردازیم که در واقع Kubernetes یا K8s چیست ؟
به عنوان یک پلتفرم منبع باز و توسعه پذیر است که برای مدیریت containerized workloads و سرویس ها به کار گرفته می شود که نتیجه آن آسانتر شدن پیکر بندی و اتوماسیون هست و از ابزارهای container مختلفی استفاده می کند که می توان به Docker اشاره کرد
kubernetes یک اکو سیستم بزرگ است که به سرعت در حال گسترش است و سرویس ها و خدمات و ابزارهای آنها به طور گسترده در دسترس است.
به طور کلی kubernetes توسط گوگل طراحی شده است اما در حال حاضر Cloud Native Computing Foundation مسئولیت آن را به عهده گرفته است
چرا به Kubernetes نیاز داریم؟
Kubernetes دارای ویژگی هایی است که به دسته های زیر تقیسم بندی می شوند:
a container platform
a microservices platform
a portable cloud platform
این ابزار یک محیط container-centric management را فراهم می کند و می تواند computing، networking،storage را هماهنگ کند .
می تواند به سادگی (Platform as a Service (PaaS و انعطاف پذیری (Infrastructure as a Service (IaaS را داشته باشد و در سراسر زیر ساخت قابلیت portability را فراهم کند.
پلتفرم Kubernetes چگونه است؟
Kubernetes قابلیت های زیادی دارد و همیشه سناریو های زیادی وجود دارد که باعث می شود ویژگی های جدید کشف شوند
Application-specific workflows (گردش کار خاص نرم افزارها) می تواند سرعت توسعه دهنده گان را افزایش دهد به همین دلیل باید از پلتفرم Kubernetes استفاده شود تا اکوسیستمی از component ها و ابزار ها ساخته شود تا بتوان به آسانی نرم افزار را گسترش داد و آن را مدیریت کرد.
برچسب ها به کاربران این امکان را می دهد تا به راحتی منابع خود را سازمان دهی کنند و Annotations کاربران را قادر می سازد تا منابع خود را با اطلاعات سفارشی پیکر بندی کنند که این کار منجر به آسان شدن گردش کار(workflow) می شود.
Kubernetes control plane می تواند یک API در دسترس را برای کاربران و توسعه دهنده گان فراهم کند و کاربران می توانند controller خود را مانند scheduler (زمان بند) به همراه API خود ایجاد کنند. این طراحی با عث می شود که بسیاری از سیستم ها از Kubernetes استفاده کنند
باید بدانیم که Kubernetes یک سیستم (PaaS (Platform as a Service سنتی و همه جانبه نیست و از آنجایی که Kubernetes بیشتر در سطح container است تادر سطح hardware و یک سری از ویژگی های کلی PaaS را عرضه می کند که عبارتند از deployment ,scaling ,load balancing , logging , monitoring .
Kubernetes هیچ محدودیتی در پشتیبانی از نرم افزار ها ندارد و هدف اصلی آن پشتیبانی از انواع مختلف workload( جریان کاری) که شامل : stateless , stateful, data-processing workloads می شود.
این ابزار سرویس هایی را در سطح application مانند موارد زیر فراهم نمی کند:
- middle ware
- data-processing frameworks مانند Spark
- databases مانند mysql
این اجزا می توانند در Kubernetes اجرا شوند و یا می توانند توسط مکانیزم های پرتابل در برنامه های که در Kubernetes اجرا می شوند در دسترس قرار بگیرند مانند Open Service Broker
واژه orchestration عبارت است از یک workflow(گردش کار) مشخص شده که باید به ترتیب اجرا شود برای مثال ابتدا باید A اجرا شود و پس از آن B و سپس C که باید به این نکته توجه داشت که Kubernetes صرفا یک سیستم orchestration نیست بلکه مجموعه ای از فرآیند های کنترلی مستقل است که به طور مداوم حالت فعلی را برای حالت مورد نظر ارائه می دهد و مهم نیست که چگونه گردش کار از A به C را دریافت می کنید و کنترل متمرکز نیز نیاز نیست در نتیجه به آسانی می شود از سیستم استفاده کرد و انعطاف پذیری و قدرت بیشتری را به همراه دارد.
چرا containerها؟
به شکل زیر دقت کنید
با توجه به شکل بالا راه قدیمی برای اجرا برنامه ها بر روی host استفاده از operating-system package manager بود این روش در اجرای نرم افزار و پیکر بندی آن و کتابخانه ها ناکارآمد بود. راه جدید اجرای container ها بر اساس مجازی سازی در سطح operating-system می باشد تا مجازی سازی در سطح سخت افزار و این container ها از یک دیگر و host جدا هستند و نمی توانند فرآیند های یک دیگر را مشاهده کنند و فایل سیستمهای خود را دارند همچنین می توان استفاده از منابع محاسباتی را برای آنها محدود کرد. بعضی از مزایای container در زیر آمده است
ایجاد و استقرار برنامه های پرکاربرد (Agile application creation and deployment)
اشاره به سهولت در ایجاد container image نسبت به استفاده از VM image دارد
توسعه مستمر، یکپارچگی (Continuous development, integration, and deployment)
به صورت مکرر و قابل اعتماد container image را ایجاد می کند
Dev and Ops separation of concerns
اشاره به ایجاد application container image در زمان ساخت و انتشار (build/release time) نسبت به زمان توسعه(deployment time) دارد که در نتیجه می تواند به جدایی application از زیر ساخت منجر شود
سازگاری با محیط در طول توسعه، آزمایش و تولید(Environmental consistency across development, testing, and production)
قابلیت توزیع سیستم عامل و ابر به صورت پرتابل (Cloud and OS distribution portability)
که در هر جایی مانند Ubuntu, RHEL, CoreOS, on-prem, Google Kubernetes Engine اجرا می شود
جداسازی منابع (Resource isolation)
به کار گیری منابع(Resource utilization)
اشاره به راندمان بالا در استفاده از منابع دارد
منبع:
https://kubernetes.io/docs/concepts/overview/what-is-kubernetes/