kubernetes و ارکستراسیون کانتینر – جامعه dev

آشنایی با ارکستراسیون کانتینر
بنابراین ، اجازه می دهیم در مورد ارکستراسیون کانتینر صحبت کنیم. این واقعاً ساخته شده است تا زندگی در هنگام استقرار ، مدیریت ، مقیاس گذاری و اتصال برنامه های کانتینر شده آسانتر شود. می دانید ظروف؟ آنها برنامه های کاربردی را به همراه همه چیز مورد نیاز خود در این بسته های سبک و قابل حمل قرار می دهند. اما از این رو که با بسیاری از آنها سر و کار دارید ، به خصوص در سیستم های توزیع شده ، همه چیز می تواند بسیار مشکل باشد. این جایی که ابزارهای ارکستراسیون در آن بازی می کنند.
احتمالاً از Kubernetes ، Docker Swarm و Red Hat OpenShift شنیده اید. این ابزارها بسیاری از بالابرهای سنگین را برای شما انجام می دهند. آنها به خودکار کردن برنامه ریزی های مربوط به برنامه ریزی آن کانتینرها در خوشه های مختلف کمک می کنند ، و اطمینان حاصل می کنند که همه چیز به راحتی و در دسترس است و در حال حاضر تعداد ظروف را بر اساس آنچه در حال حاضر مورد نیاز است تنظیم می کند. به علاوه ، آنها به ارتباط بین ظروف کمک می کنند ، که اگر مراقب نباشید ، می تواند سردرد باشد. به طور خلاصه ، این ابزارها به توسعه دهندگان یک مکان متمرکز می دهند تا همه چیز را مدیریت کنند. آنها ساده تر کردن عملیات و استفاده از منابع را آسان تر می کنند.
و می دانید چه؟ آنها واقعاً به حفظ امور کمک می کنند ، مهم نیست که برنامه های شما در کجا اجرا شود. به همین دلیل آنها برای مجموعه های ابر بومی و معماری های میکروسرویس بسیار مهم هستند. همه چیز در مورد ساده کردن پیچیدگی در دنیای فناوری سریع است!
برنامه ریزی ظروف
در ارکستراسیون کانتینر ، برنامه ریزی به معنای تصمیم گیری در مورد کدام دستگاه (یا گره ) در یک خوشه باید یک ظرف خاص را اجرا کند. بوها خوشه گروهی از ماشین آلات (فیزیکی یا مجازی) است که به عنوان یک واحد واحد اداره می شوند. این دستگاه ها منابع (پردازنده ، حافظه و غیره) مورد نیاز برای اجرای ظروف را ارائه می دهند.
اینجا که اتوماسیون وارد می شود:
-
تطبیق منابع : ارکستراتور به طور خودکار بهترین گره را در خوشه با منابع کافی (CPU ، حافظه) برای اجرای ظرف پیدا می کند. به عنوان مثال ، اگر یک ظرف به 1 CPU و 2 گیگابایت رم نیاز داشته باشد ، ارکستور گره ای پیدا می کند که می تواند این کار را انجام دهد.
-
تعادل بار : برای جلوگیری از اضافه بار یک گره واحد ، ارکستور ظروف را در چندین گره پخش می کند. این کار استفاده کارآمد از منابع را تضمین می کند و از تنگناها جلوگیری می کند.
-
در دسترس بودن بالا : در صورت عدم موفقیت یک گره ، ارکستور به طور خودکار ظروف را از آن گره بر روی سایر گره های سالم موجود در خوشه تنظیم می کند. این تضمین می کند که خدمات از کار خود ادامه می دهند.
-
مقیاس بندی : هنگامی که به موارد بیشتری از یک کانتینر نیاز دارید (به عنوان مثال ، در حین ترافیک زیاد) ، ارکستور می تواند این ظروف جدید را در سراسر خوشه برنامه ریزی کند و اطمینان حاصل شود که بار کار به طور کارآمد توزیع می شود.
معرفی به Kubernetes
بنابراین ، Kubernetes ، مردم اغلب آن را به طور خلاصه K8S می نامند. این یک سکوی منبع باز است که به ارکستراسیون کانتینر کمک می کند. به عبارت ساده تر ، همه چیز در مورد مدیریت ، استقرار و مقیاس بندی برنامه هایی که در ظروف بسته بندی شده اند. گوگل مغزهای پشت آن بود و اکنون مورد توجه بنیاد محاسبات بومی ابر یا CNCF برای کسانی که می دانند مورد توجه قرار می گرفت. از آنجا که برای اولین بار بیرون آمد ، بسیار تکامل یافته است!
مفاهیم کلیدی
معماری خوشه
-
هواپیمای کنترل
این مانند مغز خوشه است و همه چیز را مدیریت می کند. این انواع تصمیماتی راجع به آنچه در خوشه اتفاق می افتد ، تصمیم می گیرد – مانند زمان برنامه ریزی ظروف ، نحوه مشاهده خرابی ها و مقیاس بندی برنامه ها به سمت بالا یا پایین. حال ، بیایید قسمت های اصلی را که این هواپیمای کنترل را تشکیل می دهند ، تجزیه کنیم.
-
به apisever : از آن به عنوان مرکز مرکزی ، سرور اصلی API فکر کنید. این یکی است که تمام آن درخواست های استراحت را در اختیار شما قرار می دهد ، خواه از مشتری باشد یا کنترل کننده ، شما آن را نامگذاری می کنید. در اصل ، این دروازه است که به همه مؤلفه های دیگر اجازه می دهد با خوشه گپ بزنند.
-
ETCD : این فروشگاه با ارزش کلیدی فوق العاده قابل اعتماد است. این جایی است که داده های حالت خوشه مانند تنظیمات و اسرار نگه داشته می شود. شما واقعاً نمی توانید اهمیت آن را دست کم بگیرید. برای پیگیری آنچه در حال حاضر سیستم به نظر می رسد در مقابل آنچه می خواهیم باشد ضروری است.
-
به برنامه ریزی : این در جستجوی غلافهای جدید است که هنوز به یک گره اختصاص نیافته اند. این تصمیم می گیرد که آنها را بر اساس میزان منابع موجود در کجا قرار دهد.
-
کاله کنترل کننده : این مؤلفه از کنترل کننده هایی که دائماً در حال نظارت بر وضعیت خوشه هستند مراقبت می کند. در صورت نیاز به تغییرات ، مانند مقیاس بندی برنامه ها یا اطمینان از تعداد مناسب غلافها ، قدم می گذارد و این تنظیمات را انجام می دهد.
بنابراین ، بله ، این مهمترین هواپیمای کنترل و عناصر اصلی آن است!
-
گره های
گره های کارگر جایی هستند که برنامه شما اجرا می شود. این گره ها محیط زمان اجرا را برای ظروف شما فراهم می کنند. هر گره شامل: - کلبه : نماینده ای که روی هر گره کارگر کار می کند ، اطمینان حاصل می کند که ظروف در غلافها همانطور که انتظار می رود در حال اجرا هستند. برای حفظ وضعیت مورد نظر با هواپیمای کنترل ارتباط برقرار می کند.
-
به پروکسی : شبکه سازی و تعادل بار را برای غلاف مدیریت می کند. این تضمین می کند که ترافیک به درستی بین خدمات و غلافهای موجود در خوشه مسیریابی شود.
-
زمان اجرا کانتینر : این نرم افزاری است که در واقع ظروف را اجرا می کند (مانند داکر ، کانتینر و غیره). زمان اجرا باعث ایجاد کانتینر ، اجرای و حذف روی گره کارگر می شود.
غلاف
بوها غلاف کوچکترین واحد در Kubernetes است که با آنها کار می کنید. این یک بسته بندی در اطراف یک یا چند کانتینر است که در فضای نام شبکه یکسان به اشتراک می گذارند (به این معنی که آنها می توانند از طریق Localhost با یکدیگر صحبت کنند) و ذخیره سازی.
-
غلافهای تک رنگ : بیشتر اوقات ، غلاف ها حاوی یک ظرف واحد هستند. این زمانی مفید است که می خواهید یک برنامه واحد را اجرا کنید ، اما هنوز از ویژگی های مدیریت Kubernetes مانند مقیاس گذاری ، شبکه سازی و تعادل بار بهره مند می شوید.
-
غلافهای چند کانتینر : کمتر رایج است ، اما گاهی اوقات برای اجزای کاربردی کاملاً همراه استفاده می شود. به عنوان مثال ، یک عامل ورود به سیستم در کنار یک سرور وب در یک غلاف واحد کار می کند تا بتواند به راحتی سیاههها به اشتراک گذاشته شود.
-
غلافها زودگذر هستند ، به این معنی که آنها برای همیشه دوام ندارند. Kubernetes به طور خودکار غلافهای شکست خورده را جایگزین می کند تا اطمینان حاصل شود که تعداد مورد نظر ماکت ها حفظ شده است.
مدیریت اعلامیه
یکی از ویژگی های اصلی Kubernetes این است که از a استفاده می کند رویکرد اعلانی برای مدیریت وضعیت سیستم. به جای گفتن Kubernetes چگونه کاری را انجام دهد (ضروری) ، شما توصیف می کنید حالت دلخواه (به عنوان مثال ، “من می خواهم 3 ماکت از این سرویس در حال اجرا باشند”) در پرونده های پیکربندی (که معمولاً در YAML نوشته شده است).
Kubernetes سپس برای حفظ این حالت کار می کند و اطمینان حاصل می کند که سیستم همانطور که شما آن را تعریف کرده اید باقی می ماند. اگر چیزی تغییر کند یا شکست بخورد ، Kubernetes به طور خودکار آن را اصلاح می کند تا با حالت مورد نظر مطابقت داشته باشد.
مثال: استقرار ممکن است به این شکل باشد:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-app-container
image: my-app:v1
ports:
- containerPort: 8080
مقیاس بندی
Kubernetes این کار را آسان می کند برنامه های کاربردی به صورت افقی (با اضافه کردن موارد بیشتر از یک سرویس) یا به صورت عمودی (با افزایش منابع موجود در یک نمونه واحد).
AutoScaler POD افقی (HPA): این به طور خودکار تعداد ماکت های یک غلاف را بر اساس استفاده از CPU مشاهده شده یا معیارهای سفارشی تنظیم می کند. به عنوان مثال ، اگر یک سرویس تحت بار سنگین باشد ، Kubernetes می تواند تعداد ماکت ها را افزایش دهد یا در صورت کاهش تقاضا ، آن را کاهش دهد.
همچنین می توانید با تغییر تعداد ماکت در پرونده پیکربندی یا استفاده از آن ، به صورت دستی مقیاس بندی کنید kubectl scale
فرمان
مقیاس عمودی کمتر متداول است اما با تنظیم درخواست های CPU/حافظه برای یک غلاف می توان انجام داد.
تعادل بار و کشف خدمات:
-
تعادل بار
Kubernetes داخلی را فراهم می کند بوالانسی برای توزیع ترافیک به غلافهای مختلف. خدمات در Kubernetes به طور معمول از طریق A در معرض خدمت منبع ، که دسترسی به مجموعه ای از غلاف را خلاصه می کند و تعادل بار را در سراسر آنها فراهم می کند. به عنوان مثال ، اگر چندین غلاف دارید که یک سرور وب را اجرا می کنند ، این سرویس اطمینان می دهد که ترافیک دریافتی به طور مساوی در غلافهای موجود پخش می شود.
-
کشف خدماتی
Kubernetes نیز پشتیبانی می کند کشف خدماتی ، به طوری که برنامه ها می توانند بدون نیاز به دانستن آدرس IP خاص هر غلاف ، با یکدیگر پیدا و ارتباط برقرار کنند. هر سرویس یک نام DNS منحصر به فرد دریافت می کند ، و Kubernetes به طور خودکار غلافهای مناسب را به این سرویس اختصاص می دهد.
مثال: خدماتی به نام my-service
در دسترس خواهد بود my-service.default.svc.cluster.local
بشر
خود داری
Kubernetes به اطمینان از اطمینان کمک می کند در دسترس بودن بالا با مدیریت غلاف و ظروف از طریق مکانیسم های خود درمانی:
-
اگر a غلاف شکست می خورد (به عنوان مثال ، خرابی) ، Kubernetes به طور خودکار مجدداً این برای اطمینان از حفظ وضعیت مورد نظر است.
-
اگر a گره شکست می خورد ، Kubernetes غلاف هایی را که روی گره شکست خورده به گره های سالم در خوشه اجرا می شدند ، دوباره تنظیم می کنند.
-
Kubernetes همچنین می تواند به روزرسانی های نورد را با خرابی صفر انجام دهد. هنگامی که نسخه جدیدی از یک برنامه را مستقر می کنید ، Kubernetes می تواند غلاف ها را در دسته های کوچک به روز کند ، و اطمینان حاصل کند که همه غلاف ها به یکباره از بین نمی روند.
مدیریت ذخیره سازی
Kubernetes مدیریت ذخیره سازی را چکیده می کند ، و اتصال حجم ذخیره مداوم به غلاف را آسان تر می کند. شما می توانید از انواع مختلفی از زمینه های ذخیره سازی ، مانند ذخیره سازی شبکه (NAS) ، راه حل های ذخیره سازی مبتنی بر ابر (به عنوان مثال ، AWS EBS) یا سیستم های فایل توزیع شده (به عنوان مثال CEPH) استفاده کنید.
حجم مداوم (PV) وت ادعاهای حجم مداوم (PVC)
-
بوها حجم مداوم یک قطعه ذخیره سازی است که برای استفاده در خوشه تهیه شده است. می توان از آن توسط انواع مختلف سیستم های ذخیره سازی پشتیبانی کرد.
-
بوها ادعای حجم مداوم درخواست ذخیره سازی توسط کاربر یا برنامه است. POD ها می توانند مقادیر خاصی از ذخیره سازی را درخواست کنند ، و Kubernetes به طور خودکار ادعای را به حجم مداوم موجود متصل می کند.
شبکه
Kubernetes خلاصه و مدیریت شبکه کانتینر به روشی که به غلاف اجازه می دهد تا به راحتی با یکدیگر در گره های خوشه ارتباط برقرار کنند. Kubernetes از یک مدل شبکه مسطح استفاده می کند ، به این معنی که هر غلاف می تواند بدون توجه به جایی که در این خوشه در حال اجرا هستند ، با هر غلاف دیگر ارتباط برقرار کنند.
-
خدمات : یک سرویس مجموعه ای از غلاف ها را در معرض شبکه قرار می دهد. خدمات دارای آدرس های IP پایدار و نام DNS هستند ، در حالی که خود غلاف ها می توانند IP های پویا داشته باشند که با گذشت زمان تغییر می کنند.
-
ورود : ورود یک شیء API است که دسترسی خارجی به خدمات را در یک خوشه ، به طور معمول HTTP/HTTPS مدیریت می کند. این ویژگی هایی مانند تعادل بار ، خاتمه SSL و مسیریابی URL را ارائه می دهد.
-
خط مشی شبکه : Kubernetes به شما امکان می دهد تعریف کنید خط مشی شبکه این کنترل که غلاف ها می توانند با یکدیگر ارتباط برقرار کنند. این یک لایه امنیتی را اضافه می کند ، زیرا می توانید ارتباطات را فقط به خدمات خاص یا مؤلفه های موجود در سیستم خود محدود کنید.
وقتی می گوییم غلافهای مختلف در یک خوشه Kubernetes می توانند یکپارچه ارتباط برقرار کنید ، به این واقعیت اشاره می کردند تمام غلافهای موجود در یک خوشه ، صرف نظر از اینکه در یک دستگاه (گره) یا دستگاه های مختلف قرار دارند می توانند با یکدیگر ارتباط برقرار کنند.بشر اینجا چگونه این کار می کند:
گره های خوشه ای و ارتباطات:
-
خوشه : یک خوشه Kubernetes مجموعه ای از است گره این می تواند ماشینهای فیزیکی یا مجازی باشد. این گره ها را می توان در دستگاه های مختلف (حتی مراکز داده های مختلف یا مناطق ابری ، بسته به تنظیم شما) پخش کرد ، اما Kubernetes تضمین می کند که شبکه بین آنها باشد مسطح وت متحدبشر
-
شبکه : هر غلاف در یک خوشه Kubernetes خودش را می گیرد آدرس IP وت ارتباطات غلاف به غلاف بدون هیچ گونه تنظیم خاص در سراسر گره ها مجاز است. این بدان معنی است که یک غلاف که روی یک گره (دستگاه) اجرا می شود می تواند با استفاده از آدرس های IP مربوطه ، روی یک غلاف که روی یک گره دیگر (دستگاه) اجرا می شود ، برسد.
-
Kubernetes از a استفاده می کند CNI (رابط شبکه کانتینر) افزونه برای مدیریت لایه شبکه در میان گره ها. افزونه های مشترک CNI شامل کولیکو با فلانل با بافتن وت مجریبشر این افزونه ها یک پوشش شبکه ایجاد می کنند که امکان برقراری ارتباط یکپارچه بین غلاف ها را فراهم می کند ، حتی اگر در دستگاه های مختلف در خوشه توزیع شوند.
چگونه کار می کند:
-
مدل شبکه مسطح :
Kubernetes مدل شبکه مسطح ، به این معنی که هر غلاف موجود در خوشه می تواند با استفاده از IP های داخلی خود ، بدون در نظر گرفتن دستگاهی که در آن کار می کنند ، با هر غلاف دیگر ارتباط برقرار کنند. به عنوان مثال ، اگر یک غلاف در گره A IP دارد
10.244.0.3
، می تواند مستقیماً با یک غلاف در ارتباط برقرار کند گره ب که IP دارد10.244.0.4
بشر -
ارتباطات غلاف به غلاف :
Kubernetes اطمینان می دهد که غلاف روی گره های مختلف می تواند بدون نیاز به مدیریت مسیریابی IP یا پیکربندی شبکه پیچیده به صورت دستی با یکدیگر صحبت کند. افزونه CNI مسیریابی را انجام می دهد و تضمین می کند که ترافیک شبکه به درستی بین گره ها مسیریابی می شود و ارتباطات یکپارچه را امکان پذیر می کند.
-
انتزاع سرویس :
kubernetes چکیده IP از طریق خدمات ، که نام DNS پایدار و آدرس IP را برای مجموعه ای از غلاف ها فراهم می کند. سرویس دهنده بار سرویس به طور خودکار ترافیک را به سمت غلافهای صحیح ، خواه در یک گره یکسان یا گره های مختلف موجود در خوشه ، هدایت می کند.
در داخل یک خوشه ، ما می توانیم IP های داخلی را به گره های مختلف ارائه دهیم ، مهم نیست که گره ها در کدام کشور یا در کدام قاره وجود داشته باشند ، اما آنها باید در یک خوشه باشند تا یک IP داخلی مشترک داشته باشند. و آنها می توانند با استفاده از همان کنوانسیون IP داخلی ارتباط برقرار کنند. تشخیص و شبکه IP با سطح بالاتر توسط Kubernetes اداره می شود.
غذای اصلی :
-
IP های داخلی مشترک : غلاف ها و گره ها در همان خوشه یک کنوانسیون IP داخلی یکپارچه برای ارتباطات ، صرف نظر از موقعیت فیزیکی دارند.
-
Kubernetes شبکه را کنترل می کند : Kubernetes ، از طریق افزونه های CNI ، پیچیدگی مسیریابی ترافیک بین غلاف ها را در گره ها خلاصه می کند ، بنابراین نیازی به مدیریت دستی آن نیست.
-
خوشه های توزیع شده جغرافیایی : گره ها در یک خوشه می توانند در مناطق مختلف قرار بگیرند ، اما آنها باید یک اتصال شبکه سریع و قابل اعتماد داشته باشند تا به عنوان بخشی از همان خوشه عملکرد مؤثر داشته باشند.
به طور خلاصه:
-
غلافها را می توان در سراسر پخش کرد چندین دستگاه فیزیکی یا مجازی (گره) در خوشه
-
آنها می توانند یکپارچه ارتباط برقرار کنید ، حتی اگر آنها در ماشین های مختلف باشند.
-
Kubernetes این شبکه را با کمک پلاگین های CNI مدیریت می کند ، و اطمینان می دهد که POD ها دارای شبکه های مداوم در گره های موجود در خوشه هستند.
این توانایی اجرای و برقراری ارتباط در دستگاه های مختلف یکی از دلایلی است که Kubernetes بسیار قدرتمند است ، زیرا پیچیدگی مدیریت سیستم های توزیع شده را از بین می برد.