Kubernetes (همچنین به عنوان k8s یا “kube” شناخته میشود) یک پلتفرم ارکستراسیون کانتینر منبع باز است که بسیاری از فرآیندهای دستی موجود در استقرار، مدیریت و مقیاسبندی برنامههای کانتینری را خودکار میکند.
خوشه های Kubernetes چیست؟
میتوانید گروههایی از میزبانهایی را که دارای کانتینرهای ®Linux هستند، دستهبندی کنید، و Kubernetes به شما کمک میکند تا به راحتی و کارآمد آن خوشهها را مدیریت کنید.
خوشه های Kubernetes می توانند میزبان ها را در سراسر ابرهای داخلی، عمومی، خصوصی یا ترکیبی توزیع کنند. به همین دلیل،Kubernetes یک پلت فرم ایدهآل برای میزبانی برنامههای بومی ابری است که نیاز به مقیاسبندی سریع دارند، مانند جریان دادههای بلادرنگ از طریق آپاچی کافکا.
چه کسانی در توسعه Kubernetes مشارکت می کنند؟
Kubernetes در ابتدا توسط مهندسان گوگل توسعه و طراحی شد. گوگل یکی از اولین مشارکت کنندگان در فناوری کانتینر لینوکس بود و به طور عمومی در مورد اینکه چگونه همه چیز در گوگل در کانتینر اجرا می شود صحبت کرده است. (این فناوری پشت صحنه سرویس های ابری گوگل است.)
گوگل بیش از 2 میلیارد کانتینر در هفته مستقر می کند که همگی توسط پلتفرم داخلی خود Borg پشتیبانی می شوند. بورگ نسخه مورد استفاده پیش از ایجاد Kubernetes بود، و درسهایی که از توسعه Borg در طول سالها آموختهایم، تأثیر اصلی پشت صحنه بسیاری از فناوری Kubernetes شد.
واقعیت جالب: 7 پره در لوگوی Kubernetes به نام اصلی پروژه، “Project Seven of Nine” اشاره دارد.
Red Hat یکی از اولین شرکتهایی بود که حتی قبل از راهاندازی با Google در Kubernetes کار کرد و به دومین شرکت پیشرو در پروژه بالادستی Kubernetes تبدیل شد. گوگل در سال 2015 پروژه Kubernetes را به بنیاد محاسبات بومی ابری تازه تاسیس (CNCF) اهدا کرد.
با Kubernetes چه کاری می توانید انجام دهید؟
مزیت اصلی استفاده از Kubernetes در محیط خود، به ویژه اگر برنامهنویس، برنامه را برای فضای ابری بهینهسازی میکنید، این است که به شما پلتفرمی را میدهد تا کانتینرها را روی خوشههایی از ماشینهای فیزیکی یا مجازی (VM) زمانبندی و اجرا کنید.
به طور گسترده تر، به شما کمک می کند تا به طور کامل یک زیرساخت مبتنی بر کانتینر را در محیط های تولید پیاده سازی کنید و به آن تکیه کنید. و از آنجایی که Kubernetes تماماً در مورد اتوماسیون وظایف عملیاتی است، میتوانید بسیاری از همان کارهایی را که دیگر پلتفرمهای برنامه یا سیستمهای مدیریتی به شما اجازه میدهند، انجام دهید، اما برای کانتینرهای خود.
توسعه دهندگان همچنین می توانند با استفاده از الگوهای Kubernetes، اپلیکیشن های بومی ابری را با Kubernetes به عنوان یک پلتفرم زمان اجرا ایجاد کنند. الگوها ابزارهایی هستند که یک توسعهدهنده Kubernetes برای ساخت برنامهها و سرویسهای مبتنی بر کانتینر به آن نیاز دارد.
با Kubernetes می توانید:
- کانتینرها را در چندین میزبان هماهنگ کنید.
- برای به حداکثر رساندن منابع مورد نیاز برای اجرای برنامه های سازمانی خود از سخت افزار بهتر استفاده کنید.
- استقرار و به روز رسانی برنامه ها را کنترل و خودکار کنید.
- برای اجرای برنامه های حالت دار، فضای ذخیره سازی را نصب کنید و اضافه کنید.
- سریعا مقیاس برنامه های کاربردی کانتینری و منابع آنها را افزایش دهید.
- بهطور اعلامی (Declarative) سرویسها را مدیریت کنید، که تضمین میکند برنامههای مستقر شده همیشه همانطور که میخواهید اجرا شوند، اجرا میشوند.
- برنامههای خود را با قرار دادن خودکار، راهاندازی خودکار، تکثیر خودکار و مقیاسبندی خودکار، بررسی کنید و خودتان را بهبود دهید.
با این حال،Kubernetes برای ارائه کامل این خدمات هماهنگ به پروژه های دیگر متکی است. با اضافه شدن سایر پروژه های منبع باز، می توانید به طور کامل به قدرت Kubernetes پی ببرید. این قطعات ضروری عبارتند از (در بین بقیه):
- رجیستری، از طریق پروژه هایی مانند Docker Registry.
- شبکه سازی، از طریق پروژه هایی مانند OpenvSwitch و مسیریابی هوشمند لبه.
- تله متری، از طریق پروژه هایی مانند Kibana، Hawkular و Elastic
- امنیت، از طریق پروژه هایی مانند LDAP، SELinux، RBAC، و OAUTH با لایه های چند اجاره ای (multitenancy layers).
- اتوماسیون، با اضافه شدن کتاب های راهنمای Ansible برای نصب و مدیریت چرخه عمر خوشه.
- خدمات، از طریق کاتالوگ غنی از الگوهای برنامه های محبوب.
یاد بگیرید به زبان Kubernetes صحبت کنید
همانطور که در مورد اکثر فناوری ها وجود دارد، زبان مخصوص Kubernetes می تواند به عنوان مانعی برای ورود عمل کند. بیایید برخی از اصطلاحات رایج تر را برای کمک به درک بهتر Kubernetes تجزیه و تحلیل کنیم.
صفحه کنترل (Control plane): مجموعه ای از فرآیندهایی که گره های Kubernetes را کنترل می کنند. این جایی است که همه تخصیص وظایف سرچشمه می گیرند.
گره ها (Nodes): این ماشین ها وظایف درخواستی تعیین شده توسط صفحه کنترل را انجام می دهند.
غلاف (Pod): گروهی از یک یا چند کانتینر که در یک گره منفرد مستقر شده اند. همه کانتینرها در یک pod یک آدرس IP، IPC، نام میزبان و سایر منابع را به اشتراک می گذارند. Pod ها خلاصه ای از شبکه و فضای ذخیره سازی از کانتینر موجود ایجاد می کنند. این به شما امکان می دهد کانتینرها را راحت تر در اطراف خوشه جابجا کنید.
Replication controller: این کنترلر کنترل می کند که چند نسخه یکسان از یک پاد باید در جایی روی خوشه اجرا شود.
سرویس: این کار تعاریف کاری را از غلاف ها (Pod ها) جداسازی می کند. پراکسیهای سرویس Kubernetes بهطور خودکار درخواستهای سرویس را به غلاف درست ارسال میکنند. مهم نیست که کجا در کلاستر حرکت میکند یا حتی اگر جایگزین شده باشد.
Kubelet: این سرویس بر روی گره ها اجرا می شود، مانیفست های کانتینر را می خواند و اطمینان می دهد که کانتینرهای تعریف شده راه اندازی و اجرا می شوند.
Kubectl: ابزار پیکربندی خط فرمان برای Kubernetes
Kubernetes چگونه کار می کند؟
استقرار Kubernetes در حال کار، خوشه نامیده می شود. شما می توانید یک خوشه Kubernetes را به صورت دو بخش مجسم کنید: صفحه کنترل و ماشین های محاسباتی یا گره ها.
هر گره، محیط ®Linux خودش است و می تواند یک ماشین فیزیکی یا مجازی باشد. هر گره غلاف هایی را اجرا می کند که از کانتینرها تشکیل شده اند.
صفحه کنترل مسئول حفظ وضعیت مطلوب خوشه است، مانند اینکه کدام برنامه ها در حال اجرا هستند و از کدام تصاویر کانتینری استفاده می کنند. ماشین های محاسباتی در واقع برنامه ها و بارهای کاری را اجرا می کنند.
Kubernetes در بالای یک سیستم عامل اجرا می شود (مثلاً ®Red Hat® Enterprise Linux) و با غلاف کانتینرهایی که روی گره ها اجرا می شوند تعامل دارد.
صفحه کنترل Kubernetes دستورات را از یک مدیر (یا تیم DevOps) می گیرد و آن دستورالعمل ها را به ماشین های محاسباتی منتقل می کند.
این انتقال با سرویس های متعددی کار می کند تا به طور خودکار تصمیم بگیرد که کدام گره برای این کار مناسب تر است. سپس منابع را تخصیص می دهد و غلاف ها را در آن گره برای انجام کار درخواستی اختصاص می دهد.
حالت مطلوب یک خوشه Kubernetes مشخص میکند که کدام برنامهها یا بارهای کاری دیگر باید اجرا شوند، همراه با تصاویری که استفاده میکنند، کدام منابع باید در دسترس آنها قرار گیرند، و سایر جزئیات پیکربندی.
از نقطه نظر زیرساخت، تغییر کمی در نحوه مدیریت کانتینرها وجود دارد. کنترل شما بر روی کانتینرها فقط در سطح بالاتری اتفاق میافتد و بدون نیاز به مدیریت ریز هر کانتینر یا گره جداگانه، کنترل بهتری به شما میدهد.
کار شما شامل پیکربندی Kubernetes و تعریف گره ها، غلاف ها و کانتینرهای درون آنها است. Kubernetes هماهنگی کانتینرها را انجام می دهد.
اینکه کجا Kubernetes را اجرا کنید به شما بستگی دارد. این می تواند در سرورهای سخت افزاری خالی، ماشین های مجازی، ارائه دهندگان ابر عمومی، ابرهای خصوصی و محیط های ابری ترکیبی باشد. یکی از مزایای کلیدی Kubernetes این است که روی بسیاری از انواع زیرساخت کار می کند.
در مورد Docker چطور؟
Docker را می توان به عنوان یک کانتینر زمان اجرا که Kubernetes آن را هماهنگ و مدیریت می کند، استفاده کرد. هنگامی که Kubernetes یک pod را برای یک گره برنامه ریزی می کند، kubelet در آن گره به Docker دستور می دهد تا کانتینرهای مشخص شده را راه اندازی کند.
سپس Kubelet به طور مداوم وضعیت آن کانتینرها را از Docker جمع آوری می کند و آن اطلاعات را در صفحه کنترل جمع می کند. داکر کانتینرها را روی آن گره می کشد (Pull) و آن کانتینرها را شروع و متوقف می کند.
تفاوت هنگام استفاده از Kubernetes با Docker این است که در داکر، یک سیستم خودکار از Docker نیاز است که آن کارها را انجام دهد به جای اینکه سرپرست این کار را به صورت دستی در همه گرهها برای همه کانتینرها انجام دهد (در صورتیکه Kubernetes، این خودکارسازی مدیریت کانتینرها را انجام می دهد).
زیرساخت بومی Kubernetes چیست؟
امروزه، اکثر استقرارهای داخلی Kubernetes بر روی زیرساخت مجازی موجود اجرا میشوند، با تعداد رو به رشدی از استقرار در سرورهای کاملا سخت افزاری. این یک تحول طبیعی در مراکز داده است. Kubernetes به عنوان ابزار استقرار و مدیریت چرخه حیات برای برنامه های کاربردی کانتینری عمل می کند و ابزارهای جداگانه برای مدیریت منابع زیرساخت استفاده می شود.
اما اگر دیتاسنتر را از ابتدا برای پشتیبانی از کانتینرها از جمله لایه زیرساخت طراحی کرده باشید، چه؟
شما مستقیماً با سرورهای کاملا سخت افزاری و فضای ذخیرهسازی نرمافزاری شروع میکنید که توسط Kubernetes مستقر و مدیریت میشوند تا به زیرساختها همان مزایای خودنصب، مقیاسپذیری و خودترمیمی را بدهند که کانتینرها از آن بهره میبرند. این چشم انداز زیرساخت بومی Kubernetes است.
مزایای زیرساخت بومی Kubernetes چیست؟
- چابکی ابر عمومی و سادگی در محل برای کاهش اصطکاک بین توسعه دهندگان و عملیات IT
- کارایی هزینه با حذف نیاز به لایه hypervisor مجزا برای اجرای ماشین های مجازی
- انعطافپذیری توسعهدهنده برای استقرار کانتینرها، برنامههای بدون سرور و ماشینهای مجازی از Kubernetes، مقیاسبندی برنامهها و زیرساختها
- توسعهپذیری ابری ترکیبی با Kubernetes به عنوان لایه مشترک در فضای داخلی و ابرهای عمومی
Red Hat چگونه زیرساخت های بومی Kubernetes را به واقعیت تبدیل می کند؟
Kubernetes میتواند به شما در ارائه و مدیریت برنامههای کانتینری، قدیمی و بومی ابری و همچنین برنامههایی که در میکروسرویسها بازسازی میشوند، کمک کند.
برای پاسخگویی به نیازهای در حال تغییر کسب و کار، تیم توسعه شما باید بتواند به سرعت برنامه ها و خدمات جدید بسازد. توسعه Cloud-Native با میکروسرویسها در کانتینرها شروع میشود که توسعه سریعتر را امکانپذیر میکند و تغییر و بهینهسازی برنامههای کاربردی موجود را آسانتر میکند.
توسعه برنامه با Kubernetes
برنامه های تولیدی چندین کانتینر را در بر می گیرند و آن کانتینرها باید در چندین میزبان سرور مستقر شوند. Kubernetes به شما قابلیت های هماهنگی و مدیریتی لازم برای استقرار کانتینرها، در مقیاس، برای این حجم های کاری را می دهد.
ارکستراسیون Kubernetes به شما امکان میدهد سرویسهای کاربردی ایجاد کنید که چندین کانتینر را در بر میگیرد، آن کانتینرها را در یک خوشه زمانبندی میکند، آن کانتینرها را مقیاسبندی میکند و سلامت آن کانتینرها را در طول زمان مدیریت میکند. با Kubernetes می توانید گام های موثری در جهت امنیت IT بهتر بردارید.
Kubernetes همچنین نیاز به ادغام با شبکه، ذخیره سازی، امنیت، تله متری و سایر خدمات برای ارائه زیرساخت کانتینری جامع، دارد.
هنگامی که Kubernetes را به یک محیط تولید و برنامه های متعدد مقیاس می دهید، واضح است که برای ارائه خدمات فردی به چندین کانتینر با همدیگر نیاز دارید.
کانتینرهای لینوکس به برنامههای مبتنی بر میکروسرویس شما یک واحد استقرار برنامه ایدهآل و یک محیط اجرای مستقل میدهند. و میکروسرویسها در کانتینرها، سازماندهی خدمات از جمله ذخیرهسازی، شبکه و امنیت را آسانتر میکنند.
این به طور قابل توجهی تعداد کانتینرهای موجود در محیط شما را چند برابر می کند و با جمع شدن آن کانتینرها، پیچیدگی آن نیز افزایش می یابد.
Kubernetes بسیاری از مشکلات رایج مربوط به تکثیر کانتینرها را با مرتب کردن کانتینرها با هم به صورت “غلاف” برطرف می کند. پادها (غلاف ها) لایهای از انتزاع را به کانتینرهای گروهبندیشده اضافه میکنند، که به شما کمک میکند بارهای کاری را برنامهریزی کنید و خدمات لازم (مانند شبکه و ذخیرهسازی) را برای آن کانتینرها ارائه دهید.
سایر بخشهای Kubernetes به شما کمک میکنند تا بارها را در این غلافها متعادل کنید و اطمینان حاصل کنید که تعداد مناسبی از کانتینرها برای پشتیبانی از بار کاری شما در حال اجرا است.
با اجرای درست Kubernetes و با کمک سایر پروژه های منبع باز مانند Open vSwitch، OAuth و SELinux می توانید تمام بخش های زیرساخت کانتینر خود را هماهنگ کنید.
نمونه استفاده: ایجاد یک پلتفرم ابری برای ارائه خدمات بانکی نوآورانه
امارات NBD، یکی از بزرگترین بانکهای امارات متحده عربی، برای نوآوری دیجیتال به پایهای انعطافپذیر و مقیاسپذیر نیاز داشت. بانک با تامین کند و محیط پیچیده IT دست و پنجه نرم می کرد. راه اندازی یک سرور ممکن است 2 ماه طول بکشد، در حالی که ایجاد تغییرات در برنامه های بزرگ و یکپارچه بیش از 6 ماه طول کشید.
با استفاده از Red Hat OpenShift Container Platform برای هماهنگی، یکپارچه سازی و مدیریت کانتینر، بانک Sahab را ایجاد کرد، اولین ابر خصوصی که توسط یک بانک در خاورمیانه اجرا می شود. سحاب برنامهها، سیستمها و سایر منابع را برای توسعه سرتاسر – از تهیه تا تولید – از طریق یک مدل به عنوان سرویس فراهم میکند.
امارات NBD با پلتفرم جدید خود همکاری بین تیم های داخلی و شرکای خود را با استفاده از رابط های برنامه نویسی برنامه (API) و میکروسرویس ها بهبود بخشید. و با اتخاذ شیوههای توسعه چابک و DevOps، بانک چرخههای راهاندازی و بهروزرسانی برنامهها را کاهش داد.
از یک رویکرد DevOps با Kubernetes حمایت کنید
توسعه کاربردهای مدرن نیازمند فرآیندهای متفاوتی نسبت به رویکردهای گذشته است. DevOps نحوه انتقال یک ایده از توسعه به استقرار را سرعت می بخشد.
DevOps در هسته خود به خودکارسازی وظایف عملیاتی معمول و استانداردسازی محیطها در طول چرخه عمر برنامه متکی است. کانتینرها از یک محیط یکپارچه برای توسعه، تحویل و اتوماسیون پشتیبانی میکنند و جابجایی برنامهها را بین محیطهای توسعه، آزمایش و تولید آسانتر میکنند.
نتیجه اصلی اجرای DevOps یک خط لوله پیوسته و استقرار پیوسته (CI/CD) است. CI/CD به شما کمک میکند برنامهها را مرتباً به مشتریان تحویل دهید و کیفیت نرمافزار را با کمترین دخالت انسانی تأیید کنید.
مدیریت چرخه حیات کانتینرها با Kubernetes در کنار رویکرد DevOps به همسوسازی توسعه نرمافزار و عملیات فناوری اطلاعات برای پشتیبانی از خط لوله CI/CD کمک میکند.
با پلتفرمهای مناسب، هم در داخل و هم در خارج از کانتینر، میتوانید به بهترین وجه از تغییرات فرهنگ و فرآیندی که پیادهسازی کردهاید استفاده کنید.
استفاده از Kubernetes در تولید
Kubernetes منبع باز است و به این ترتیب، یک ساختار پشتیبانی رسمی در اطراف آن فناوری وجود ندارد. حداقل ساختاری که به کسب و کار خود اعتماد کنید.
اگر در حین اجرای تولید Kubernetes با اجرای خود مشکل داشتید، احتمالاً ناامید خواهید شد. و مشتریان شما نیز ناامید خواهند بود.
Kubernetes را مانند یک موتور ماشین در نظر بگیرید. یک موتور میتواند به تنهایی کار کند، اما زمانی که به یک گیربکس، محورها و چرخها متصل شود، بخشی از یک خودروی کاربردی میشود. فقط نصب Kubernetes برای داشتن یک پلتفرم در حد تولید کافی نیست.
Kubernetes برای اینکه کاملاً کاربردی شود به اجزای اضافی نیاز دارد. شما باید احراز هویت، شبکه، امنیت، نظارت، مدیریت گزارشها و ابزارهای دیگر را اضافه کنید.
اینجاست که Red Hat OpenShift وارد می شود. حال این ماشین کامل است.
Red Hat OpenShift همان Kubernetes است، با اهداف تجاری (و نه رایگان). OpenShift شامل تمام تکه های اضافی فناوری است که Kubernetes را برای کارکردهای تجاری، قدرتمند و قابل دوام می کند، از جمله رجیستری، شبکه، تله متری، امنیت، اتوماسیون و خدمات.
Red Hat OpenShift شامل Kubernetes به عنوان یکی از اجزای اصلی پلتفرم است و یک قابلیت Kubernetes تایید شده توسط موسسه CNCF است.
با Red Hat OpenShift Container Platform، توسعهدهندگان شما میتوانند برنامههای کانتینری جدید بسازند، آنها را میزبانی کنند و با مقیاسپذیری، کنترل و هماهنگسازی در فضای ابری مستقر کنند که میتواند یک ایده خوب را به سرعت و به آسانی به کسب وکار جدید تبدیل کند.
ترجمه: ابوالفضل محمدی جو
منبع:
https://www.redhat.com/en/topics/containers/what-is-kubernetes
پی نوشت مترجم:
سیستم عامل لینوکس دارای توزیع های متفاوتی است که یکی از این لینوکس ها که برای کاربردهای DevOps مناسب تر از بقیه است، Red Hat Linux است که بر خلاف سایر توزیع های رایگان لینوکس، دارای نسخه پولی است. مقاله فوق توسط وبسایت رسمی Red Hat Linux نوشته شده است و گاها به قابلیت های این توزیع لینوکس اشاره هایی دارد و مسلما Kubernetes در سایر سیستم عامل ها و پلتفرم های ابری نیز قابل اجرا و پیاده سازی است.