Kubernetes مدیریت کانتینرها مثل یک حرفهای!
کوبرنتیز چیست ؟ معرفی Kubernetes به زبان ساده فرادرس مجله
کانتینرها مثل جعبههای کوچکی هستند که برنامههای نرمافزاری را در خود نگه میدارند. کوبرنتیس این جعبهها را مدیریت و آنها را به صورت خودکار در سرورهای مختلف توزیع میکند. برای پاسخ دادن به نیازهای در حال تغییر کسب و کار و تیم برنامه نویس که بتواند سریع برنامه ها و سرویس های جدید را ایجاد و منتشر کند. پیادهسازی مبتنی بر ابر باعث افزایش سرعت در پیادهسازی، بهینهسازی و اصلاح برنامه ها می گردد. از طرفی اپلیکیشن های تولیدی بزرگ، تعدای کانتینر ایجاد می کنند که باید روی تعدای سرور اجرا شوند.
اصلیترین تفاوت داکر و کوبرنتیز میتواند مدیریت بهتر و گستردهتر کوبرنتیز و امکان بازسازی و اجرای کانتینر جدید توسط آن باشد. توزیع بار کاری، شبکه کانتینر، تخصیص فضای ذخیرهسازی و اسکیلبندی خودکار چه در سطح فضای عمومی و چه در پلتفرمهای ابری عمومی توسط پلتفرم کوبرنتیز کنترل خواهد شد. همانطور که پیشتر نیز بیان کردیم، کوبرنتیز سیستمی برای هماهنگی کانتینرها است که روی داکر ساخته شده است. این پلتفرم، در اصل ابزاری برای تعامل با کانتینرهای داکر و مدیریت موارد مختلف در سطح سازمانی محسوب میشود. «داکر دسکتاپ» برای ویندوز را بهسادگی میتوانیم از «+» دانلود و نصب کنیم. «صفحه داده» (Data Plane) کوبرنتیز، در بر گیرنده گرههای درون خوشه است.
هرچند داکر یک سیستم سازماندهی کانتینر به نام Docker Swarm دارد، اما تعداد قابل توجهی از افراد به جای استفاده از این سیستم، از ترکیب Docker و Kubernetes استفاده میکنند. پس به طور دقیق باید بگوییم که داکر و کوبرنتیز رقیب نیستند و مکمل هم هستند؛ این در حالی است که kubernetes رقیب یکی از زیر مجموعههای داکر یعنی Docker Swarm است. با این پلتفرم، دستورهای مشابه در تمام انواع زیرساختها، کاربردی یکسان خواهند داشت! کوبرنتیز بهصورت on-site در دیتاسنتر خودتان، در ابر عمومی و در محیطهای ابری هیبرید (چه در بخش خصوصی و چه در بخش عمومی) اجرا میشود. با توجه به رشد روزافزون فناوریهایی همچون محاسبات لبه (Edge Computing) و یادگیری ماشین (Machine Learning)، استفاده از Kubernetes در آینده نیز احتمالاً گسترش خواهد یافت. همچنین با پیشرفت روشهای اتوماسیون و انعطافپذیری در محیطهای ابری، کوبرنتیس میتواند نقش مهمی در ادامه راه تکامل داشته باشد.
برای مثال، اگر چند اپلیکیشن را در یک فضا قرار دهیم، باید نامهای متفاوتی داشته باشند؛ اما با قراردادن هرکدام در یک Namespace جداگانه، میتوانیم اپهایی با نام یکسان را در فضاهای متفاوت داشته باشیم. این کنترلر مشخص میکند که چه تعداد کپی مشابه از یک پاد باید در کلاستر اجرا شوند. Etcd مؤلفه ذخیره مقادیر مهم با قابلیت دسترسی درخورتوجه است که بین گرههای مختلف توزیع میشود. وظیفه این مؤلفه ذخیره اطلاعات پیکربندی است و تنها ازطریق API سرور دردسترس قرار دارد؛ چراکه ممکن است حاوی دادههای حساس باشد. کوبرنتیز یک دسته از بلاکهای ساخته شده (Primitive) تعریف میکند که جمعاً مکانیزمهایی را جهت توسعه، نگهداری و مقیاسکردن اپلیکیشنها بر اساس پردازنده (CPU)، حافظه(RAM)[۴] یا معیارهای دلخواه[۵] ارائه میکند. پاد به معنای غلاف یا پوسته است و در واقع فضایی است که چند کانتینر برای اجرای برنامه کاربردی خاص در آن قرار دارند.
وقتی آپدیت جدیدی برای اپلیکیشن عرضه میکنید، پلتفرم متنباز داستان آن را روی کانتینرها اعمال میکند و اگر مشکلی در کار باشد، داونگرید به نسخۀ پیشین را (تا زمان رفع مشکل) انجام خواهد داد. با ابرسرورها میتوانید سرور با سیستمعامل دلخواه خود را در چند دقیقه انتخاب و نصب نموده و آزادانه منابع سرور خود را کاهش و افزایش دهید. پراکسی سرویس کوبرنتیس بهطورخودکار درخواستها را به پاد مدنظر ارسال میکند. این مؤلفه حتی اگر پاد جایگزین یا جابهجا شده باشد، آن را پیدا میکند. قابلیتهای این دو ابزار تا حدودی متفاوت است؛ اما درمجموع، داکر ازنظر امکانات یک رده پایینتر از Kubernetes قرار دارد. بسیاری Kubernetes را بهدلیل ویژگی ماژولار و انعطافپذیرتری بیشتر و سازگاری بیشتر با نیازهای سرویسدهندههای وب ترجیح میدهند.
ابرهای ترکیبی یا اصطلاحاً Hybrid، از ترکیب ابرهای عمومی، خصوصی و دیتاسنترهای قرارگرفته در محل درست میشوند و در نهایت، یک زیرساخت IT واحد، منعطف و مقرونبهصرفه را به وجود میآورند. به این ماشینها که موتور محرک کلاسترها به حساب میآیند، Node میگویند و جلوتر بیشتر دربارۀ آنها صحبت خواهیم کرد. اگر دوست دارید اطلاعات بیشتری راجعبه این پلتفرم داشته باشید، مقالۀ “داکر (Docker) چیست و چه کاربردی دارد؟” را بخوانید. آموزش نصب کلاسترینگ کوبرنیتیس Kubernetes 1.10 با Kubeadm در لینوکس Ubuntu را در مقاله زیر بخوانید. Kubernetes دارای Policy یا خطمشیهایی میباشد که تضمین میکنند Podها به استانداردهای رفتاری خاصی پایبند هستند. به عنوان مثال، خطمشیها میتوانند مانع از استفاده بیش از حد Podها از CPU، RAM و یا فضای ذخیرهسازی شوند.
کوبرنیتر بهوسیله توزیع Workload-ها در میان گرههای متعدد، «دسترسیپذیری» (Availability) و «مقیاسپذیری» (Scalability) بالایی را فراهم میکند. کوبرنتیز همچنین مواردی نظیر «خود سازندگی» (Self-Healing)، «بهروزرسانیهای چرخشی» (Rolling Updates) و «مقیاسدهی افقی» را نیز در بر میگیرد. کوبرنتیس بهطور مداوم وضعیت سلامت کانتینرها را بررسی کرده و کانتینرهای خراب را دوباره راهاندازی و کانتینرهای غیرقابل پاسخ را حذف میکند. ماشینهای کاری که کلاسترها را تشکیل میدهند؛ به معنای دقیقتر به هر یک از سرورهایی که در خوشه کوبرنتیس شرکت میکنند، نود گفته میشود. کوبرنتیز دستورات داخلی ای دارد که برای رسیدگی به کارهای سنگینی است که در مدیریت اپلیکیشن ها انجام می شود و به شما این امکان را می دهد که عملیات روزانه را اتوماتیک کنید.
اکثر استقرارهای کارآمد Kubernetes روی زیرساختهای مجازی معمولی اجرا و تعداد فزایندهای نیز روی سرورهای فیزیکی ساده پیاده میشوند. کوبرنتیس بهعنوان ابزار مدیریت استقرار و چرخه عمر اپهای کانتینری کاربرد دارد و ابزارهای جداگانهای نیز برای مدیریت منابع زیرساخت بهکار میروند. وقتی Kubernetes یک پاد را برای گره زمانبندی میکند، سرویس Kubelet در آن گره فرمان راهاندازی کانتینرهای خاصی را به داکر میدهد. سپس، Kubelet بهصورت پیوسته وضعیت آن کانتینرها را از داکر دریافت و در سطح کنترل جمعآوری میکند. داکر کانتینرها را به درون نود هدایت میکند و آنها را شروع و خاتمه میدهد. بدینترتیب، استفاده از کوبرنتیز با داکر بخشی از وظایف ادمین را به سیستم محول میکند.
افزون بر این، kube-Controller-Manager، کنترلگرهایی برای مدیریت ذخیرهسازی، شبکه و غیره را نیز در بر میگیرد. این کامپوننت با همراهی طیف وسیعی از کنترلگرها، استقرار کوبرنتیز را قویتر و مدیریت آن را سادهتر میسازد. لازم است بدانیم که این معماری بر پایه چندین مؤلفه اصلی استوار است که هر کدام از آنها نقشی کلیدی در عملکرد کلی سیستم ایفا میکنند. کوبرنتیز همچنین، استقرارهای شکست خورده را بهطور خودکار باز میگرداند - به اصطلاح Roll back میکند - و از این طریق اطمینان میدهد که اپلیکشین ما هیچگاه در حالت ناپایدار قرار نمیگیرد. بهطور مثال، فرض کنید اپلیکیشنی در اختیار داریم که میبایست «مستقر» (دیپلوی | Deploy) شود.
از این رو انتخاب میان آنها یا استفاده همزمان از هر دو، به نیازهای پروژه و اهداف تیم بستگی داشته باشد. برای درک بهتر این تفاوتها و نحوه تعامل این دو فناوری، لازم است جنبههای مختلف آنها را با جزئیات بیشتری بررسی کنیم. برای مثال، زمانی که تعداد کانتینرها افزایش یابد، مدیریت آنها دشوار میشود. کوبرنتیز از ابزارهای مدرن و جدیدی است که برای ساده سازی پروسه دیپلوی، مدیریت و بروزرسانی اپلیکیشن ها توسعه داده شده است. توسعه دهندگان با استفاده از این ابزار هم می توانند در هزینه ها صرفه جویی کنند و هم این که با امنیت کامل، برنامه خود روی هر سیستمی که می خواهند اجرا کنند. CI/CD یک روش برای خودکار سازی پروسه دیپلوی، اجرا و تست اپلیکیشن ها در محیط های تولید است.
توسعهدهندگان میتوانند با استفاده از الگوهای از پیش تعریف شده، فایلهای تنظیمات را ساخته و یک برنامه را در محیطهای development , stage , QA test , canary , production و … برچسبزنی و پیادهسازی کنند. حالا که تعریف کوبرنتیز را درک کردیم، قبل از آشنایی با نحوه کار آن باید اجزای کوبرنتیز را بشناسیم. هر نوازنده یک ابزار موسیقی خاص مینوازد و همه آنها باید با هم هماهنگ باشند تا یک سمفونی زیبا را اجرا کنند. کوبرنتیس هم دقیقا همین کار را برای برنامههای نرمافزاری انجام میدهد. این ابزار قدرتمند، به شما کمک میکند تا هزاران برنامه را به صورت خودکار و مقیاسپذیر مدیریت کنید. به زبان فنیتر، کوبرنتیس یک پلتفرم متنباز برای مدیریت خوشههای کانتینری است.
این فناوری بهویژه در محیطهای توزیعشده و سیستمهای بزرگ کاربرد دارد. Kubernetes میتواند بهصورت خودکار فرآیندهایی مانند استقرار، مقیاسپذیری و توزیع بار را انجام دهد. برای مثال، اگر یکی از کانتینرها دچار مشکل شود، Kubernetes میتواند بهصورت خودکار آن را جایگزین کرده و سیستم را پایدار نگه دارد. سپس باید یک ران تایم کانتینر (Container Runtime) مانند داکر انجین یا همان پلتفرم داکر را برای اجرای کانتینرها انتخاب کنید. بعد از نصب داکر و استقرار کانتینرها، میتوانید کوبرنتیز را با کمک دو ابزاری که معرفی کردیم یعنی minikube یا kubeadm نصب کنید. یک بخش اساسی از kubernetes که به شما کمک میکند تا از سایر بخشها استفاده کنید، dashboard است.
میتوانیم آن را درون کانتینری، بستهبندی و روی سروری دارای موتور داکر - یا سایر موتورهای کانتینر - اجرا کنیم. ما اپلیکیشن را بهوسیله Dockerfile، درون یک کانتینر بستهبندی میکنیم و آن را روی پورتی قرار میدهیم تا از دنیای بیرون قابل دسترسی باشد. با راهاندازی مجدد خودکار کانتینرهای خراب یا برنامهریزی مجدد آنها روی گرههای سالم، دسترسیپذیری بالا را تضمین میکند. Deployment از مواردی است که کاربر بهشکل مستقیم می تواند کوبرنتیزرا اجرای برنامه ها ایجاد و مدیریت کند و از Pod و Replication Controller استفاده میکنند ولی سختی کار با آنها را از کاربر پنهان می کند. Docker و Kubernetes دو فناوری در حوزه کانتینرها هستند که نقشها و کاربردهای آنها متفاوت است.
برای مشاوره با متخصصان این شرکت میتوانید با شماره ۶۱۰۶۴-۰۲۱ تماس بگیرید یا از طریق ارسال تیکت اقدام کنید. همچنین، اکوسیستم گستردهای مانند Docker Hub باعث میشود بتوانید بهراحتی به تصاویر آماده از نرمافزارها و سرویسها دسترسی داشته باشید. با این ویژگی بدون نیاز به ساخت همه چیز از صفر، به سرعت پروژههای خود را پیش ببرید. علاقه ای که به یادگیری مطالب جدید دارم باعث شد که انگیزم برای فعالیت در حوزه تولیدمحتوا بیشتر شود. تمام تلاشم این است که با درک کامل موضوع، محتوایی ساده و کامل تهیه کنم که برای همه علاقمندان مفید و کاربردی باشد.
Kubernetes کانتینرها را با هدف مدیریت و جستجوی آسان آنها در واحدهایی مشخص سازماندهی میکند. محبوبیت نرمافزار کوبرنتیز با توجه به استقبال گسترده سازمانها و شرکتها از فناوری کانتینرسازی، به صورت قابل توجهی افزایش یافته است. این پلتفرم ابتدا توسط گوگل طراحی شد و امروزه توسط بنیاد رایانش ابری بومی (Cloud Native Computing Foundation) توسعه داده میشود. توسعهدهندگان همچنین با استفاده از دستورات داخلی Kubernetes میتوانند برنامههای کانتینری را مقیاسبندی، مدیریت، ویرایش و پیادهسازی کنند. این پلتفرم با زبان برنامهنویسی Go نوشته شده و در سال ۲۰۱۴ به صورت متنباز در اختیار کاربران قرار گرفت. کوبرنتیز ۱۵ سال است که توسط گوگل مورد استفاده قرار میگیرد و جوامع متنباز مختلفی نیز از سرتاسر دنیا در توسعه آن مشارکت دارند.
مجموعهای از کنترلرهای پیشفرض تعریفشده در پلتفرم که در کنار هم، یک لوپ کنترلی را برای ارتباط گرفتن با API Server تشکیل میدهند و وضعیت مشترک بین کلاسترها را بررسی میکنند. در کوبرنتیز، etcd مشخصاً موظف به مدیریت فرایند پیکربندی دادهها و متادادهها و وضعیت آنها است. API Server در کوبرنتیز، برای مدیریت، ساخت و پیکربندی کلاسترها به کار گرفته میشود. به بیان بهتر، این API جایی است که کاربر باید دستورات خود را در آن وارد کند. تا اینجا توضیح دادیم که کلاستر کوبرنتیز چیست؛ برای اینکه طرز کار کلی پلتفرم را بهتر درک کنید، لازم است وارد کلاستر شویم و نگاهی دقیقتر بیندازیم به بخشهای تشکیلدهندۀ کلاستر. در ظاهر، چنین موجودیتی همان عملکرد ماشین مجازی را ارائه میکند؛ منتهی تفاوتهای بارزی وجود دارد.
Kubernetes یک سیستم متنباز برای مدیریت و ارکستراسیون کانتینرها است که بهطور گسترده در دنیای فناوری اطلاعات استفاده میشود. این پلتفرم توسط گوگل توسعه یافته و به توسعهدهندگان و تیمهای عملیاتی این امکان را میدهد که برنامههای کانتینری خود را بهصورت مقیاسپذیر، قابل اطمینان و خودکار مدیریت کنند. با Kubernetes، میتوان بهراحتی خدمات مختلف را در چندین سرور توزیع کرد و از بارگذاری متوازن و مدیریت مقیاسپذیری بهرهمند شد. این شیوه عملکرد، نیاز به سازماندهی کانتینرها یا همان Container Orchestration دارد. هدف از ارکستراسیون کانتینرها، مدیریت چرخه عمر کانتینرها در محیطهای عملیاتی بزرگ و پویا است.
در ادامه، برخی از ملزومات سختافزاری و نرمافزاری که باید مورد توجه قرار گیرد را بیان کردهایم. دلایل متعددی برای آموختن کوبرنتیز وجود دارد که برخی از آنها را در ادامه آوردهایم. کوبرنتیس برای مدیریت اطلاعات حساس مانند پسوردها، توکنها، مجوزهای SSH و دیگر اطلاعات امنیتی استفاده میشود. جفتهای مقداری که برای فیلتر کردن، سازماندهی و انجام عملیات گروهی روی مجموعهای از منابع به کار میروند. برای آشنایی با انواع مجازی سازی مطالعه مقاله فرآیند مجازی سازی چیست را پیشنهاد میکنیم.
کاربرد اصلی کوبرنتیس پیادهسازی و مدیریت آسان برنامههای کانتینر شده است. اگر بهدنبال بهینهسازی فرایند توسعه اپ برای ابر باشید، این ابزار پلتفرم قدرتمندی را برای زمانبندی و اجرای کانتینرها در کلاسترهای ماشین مجازی یا فیزیکی دراختیارتان میگذارد. وقتی یک برنامه جدید در کلاستر کوبرنیتز راهاندازی میشود، به سیستم مشخص میشود که چه تعداد پاد برای اجرای آن مورد نیاز است و از چه منابعی استفاده خواهد کرد. کوبرنیتز این پادها را به نودهای مختلف توزیع میکند و اطمینان میدهد که هر کدام در صورت خرابی، به سرعت جایگزین شود. همچنین سرویسهای کوبرنیتز امکان دسترسی کاربران خارجی به برنامههای داخل کلاستر را فراهم میکنند. Kubernetes یک پلتفرم متنباز برای مدیریت، ارکستراسیون و استقرار کانتینرهاست.
کوبرنتیز قابلیت مدیریت و سامان دهی لازم برای پیاده سازی کانتینرها در مقیاس بالا را برای ما فراهم می کند. با استفاده از کوبرنتیز می توان از سرویس های اضافه مانند Load Balance و Health Check نیز بهره مند شد. به بیان سادهتر، این ابزار به شما کمک میکند برنامههایی که در کانتینرها (مثل Docker) اجرا میشوند را بهصورت خودکار مدیریت کنید. Kubernetes پلتفرمی متنباز و توسعهپذیر و پرتابل برای پیادهسازی و مدیریت برنامههای کانتینری است. این پلتفرم در سال ۲۰۱۴ منتشر شده و حاصل تجربه ۱۵ساله متخصصان گوگل درزمینه پردازش و اجرای اپ و سرویس در مقیاس بسیار بزرگ است.
ساختمان کوبرنتیز دارای بلوکهایی به نام خوشه (Cluster) میباشد که هر خوشه نیز خود از دو بخش واحد کنترل (Control Plane) و گرهها (ماشینهای محاسباتی) تشکیل میشود. خوشه کوبرنتیز در مجموع باعث بهبود عملکرد و سرعت پردازش برنامههای کانتینری و در کل شبکه میشود. هر گره (Node) یک ماشینی فیزیکی یا مجازی است که Podها را اجرا میکند و واحد کنترل نیز وظیفه مدیریت و حفظ وضعیت خوشهها را برعهده دارد و باعث خودکارسازی بسیاری از فرآیندها میشود. به عنوان مثال واحد کنترل میتواند بر چگونگی اجرای برنامههای کانتینری نظارت کند. واحد کنترل Kubernetes در واقع دستورات (Commands) را از مدیر سیستم (Sysadmin) یا متخصص DevOps دریافت و آنها را به گرههای مشخصی منتقل میکند. کوبرنتیز برای انجام وظایف خود نیاز به یک سیستمعامل (مانند لینوکس) دارد و با Podهای در حال اجرا نیز تعامل میکند.
برنامه نویسی پایتون برای اندروید