ProHoster > وبلاگ > اداره > نحوه اتصال خوشه های Kubernetes در مراکز داده مختلف
نحوه اتصال خوشه های Kubernetes در مراکز داده مختلف
به سری شروع سریع Kubernetes خوش آمدید. این یک ستون منظم با جالب ترین سوالاتی است که به صورت آنلاین و در آموزش های خود دریافت می کنیم. پاسخ کارشناس کوبرنتیس
کارشناس امروز دانیل پولنچیک (دانیله پولنسیچ). دانیل به عنوان یک مربی و توسعه دهنده نرم افزار در Learnk8s.
اغلب، زیرساخت ها در مناطق مختلف، به ویژه در محیط های کنترل شده، تکثیر و توزیع می شوند.
اگر یک منطقه در دسترس نباشد، ترافیک به منطقه دیگر هدایت می شود تا از وقفه جلوگیری شود.
با Kubernetes، می توانید از یک استراتژی مشابه استفاده کنید و بارهای کاری را در مناطق مختلف توزیع کنید.
شما می توانید یک یا چند کلاستر در هر تیم، منطقه، محیط یا ترکیبی از اینها داشته باشید.
خوشه های شما را می توان در چندین ابر و در محل میزبانی کرد.
اما چگونه می توان زیرساخت را برای چنین گسترش جغرافیایی برنامه ریزی کرد؟
آیا نیاز به ایجاد یک خوشه بزرگ برای چندین محیط ابری از طریق یک شبکه دارید؟
یا خوشه های کوچک زیادی دارید و راهی برای کنترل و همگام سازی آنها پیدا می کنید؟
یک خوشه رهبری
ایجاد یک خوشه بر روی یک شبکه چندان آسان نیست.
تصور کنید تصادف کرده اید، اتصال بین بخش های خوشه ای از بین رفته است.
اگر یک سرور اصلی داشته باشید، نیمی از منابع قادر به دریافت دستورات جدید نخواهند بود زیرا قادر به تماس با استاد نیستند.
و در عین حال شما جدول های مسیریابی قدیمی دارید (kube-proxy نمیتوان موارد جدید را دانلود کرد) و هیچ غلاف اضافی (kubelet نمیتواند برای بهروزرسانیها درخواست کند).
حتی بدتر از آن، اگر Kubernetes نتواند یک گره را ببیند، آن را به عنوان یتیم علامت گذاری می کند و غلاف های از دست رفته را در گره های موجود توزیع می کند.
در نتیجه، شما دو برابر بیشتر غلاف دارید.
اگر در هر منطقه یک سرور اصلی بسازید، با الگوریتم اجماع در پایگاه داده etcd مشکلاتی وجود خواهد داشت. (تقریبا ویرایش - در واقع پایگاه داده etcd نباید بر روی سرورهای اصلی قرار داشته باشد. می توان آن را روی یک گروه جداگانه از سرورها در همان منطقه اجرا کرد. با این حال، با دریافت همزمان نقطه شکست یک خوشه. اما به سرعت.)
etcd استفاده می کند الگوریتم raftبرای توافق بر روی یک مقدار قبل از نوشتن آن روی دیسک.
به این معنا که اکثر موارد باید قبل از اینکه حالت در etcd نوشته شود به اجماع برسند.
اگر تأخیر بین نمونههای etcd بالا برود، همانطور که در مورد سه نمونه etcd در مناطق مختلف اتفاق میافتد، زمان زیادی طول میکشد تا روی یک مقدار توافق شود و آن را روی دیسک بنویسید.
این موضوع در کنترلرهای Kubernetes نیز منعکس شده است.
مدیر کنترلر برای اطلاع از تغییر و نوشتن پاسخ در پایگاه داده به زمان بیشتری نیاز دارد.
و از آنجایی که کنترل کننده یک نیست، بلکه چندین است، یک واکنش زنجیره ای به دست می آید و کل خوشه بسیار آهسته شروع به کار می کند.
برای اولین بار، سعی کردیم مجموعه ای از خوشه ها را به عنوان یک شی واحد با استفاده از ابزار federation kube مدیریت کنیم.
شروع خوب بود، اما در نهایت، فدراسیون کوبه محبوب نشد، زیرا از همه منابع پشتیبانی نمی کرد.
به عنوان مثال، از منابع و خدمات فدرال پشتیبانی می کند، اما نه از StatefulSets.
همچنین پیکربندی فدراسیون به صورت حاشیه نویسی تصویب شد و انعطاف پذیر نبود.
تصور کنید چگونه می توانید با استفاده از یک حاشیه نویسی، تقسیم کپی ها را برای هر خوشه در یک فدراسیون توصیف کنید.
معلوم شد که یک آشفتگی کامل است.
SIG-cluster پس از kubefed v1 کار بسیار خوبی انجام داد و تصمیم گرفت از زاویه ای متفاوت به مشکل نزدیک شود.
به جای حاشیه نویسی، آنها تصمیم گرفتند یک کنترلر را منتشر کنند که روی خوشه ها نصب شده است. می توان آن را با استفاده از تعاریف منابع سفارشی (تعریف منابع سفارشی، CRD) پیکربندی کرد.
برای هر منبعی که فدرال می شود، یک تعریف CRD سفارشی در سه بخش دارید:
یک تعریف استاندارد از یک منبع، مانند استقرار؛
بخش placement، جایی که شما نحوه توزیع منبع در فدراسیون را تعریف می کنید.
بخش override، جایی که برای یک منبع خاص می توانید وزن و پارامترهای مربوط به قرارگیری را لغو کنید.
در اینجا نمونه ای از یک تحویل همراه با بخش های قرار دادن و نادیده گرفته شده است.
همانطور که می بینید، عرضه به دو دسته تقسیم می شود: cluster1 и cluster2.
خوشه اول سه ماکت را ارائه می دهد و خوشه دوم دارای ارزش 5 است.
اگر به کنترل بیشتری بر روی تعداد کپی ها نیاز دارید، kubefed2 یک شی ReplicaSchedulingPreference جدید را ارائه می دهد که در آن replica ها می توانند وزن شوند:
اما به جای ابداع روشی جدید برای تعامل با خوشه و گنجاندن منابع در تعاریف سفارشی، زمانبندی چند خوشهای به چرخه عمر استاندارد Kubernetes تزریق میشود و همه تماسهایی را که پادها را ایجاد میکنند، قطع میکند.
هر غلاف ایجاد شده بلافاصله با یک ساختگی جایگزین می شود.
پاد اصلی چرخه زمانبندی دیگری را طی می کند که در آن پس از نظرسنجی از کل فدراسیون، تصمیم میزبانی گرفته می شود.
در نهایت، غلاف به خوشه هدف تحویل داده می شود.
در نتیجه، یک غلاف اضافی دارید که هیچ کاری انجام نمی دهد، فقط فضا را اشغال می کند.
مزیت این است که برای ترکیب منابع نیازی به نوشتن منابع جدید ندارید.
هر منبعی که یک pod ایجاد می کند به طور خودکار آماده فدرال شدن است.
این جالب است، زیرا شما به طور ناگهانی منابع در چندین منطقه توزیع شده است، و شما متوجه نشدید. با این حال، این بسیار خطرناک است، زیرا در اینجا همه چیز بر جادو استوار است.
اما در حالی که Shipper عمدتاً در تلاش است تا اثرات محمولهها را کاهش دهد، زمانبندی چند خوشهای عمومیتر است و شاید برای کارهای دستهای مناسبتر باشد.
مکانیسم تحویل تدریجی پیشرفته ندارد.
اطلاعات بیشتر در مورد زمانبندی چند خوشهای را میتوانید در اینجا بیابید صفحه مخزن رسمی.
اگر میخواهید درباره برنامهریزی چند خوشهای در عمل مطالعه کنید، Admiralty این مطلب را دارد مورد استفاده جالب با آرگو - گردش کار، رویدادها، CI و CD Kubernetes.
سایر ابزارها و راهکارها
اتصال و مدیریت چندین خوشه یک کار پیچیده است و هیچ راه حلی برای همه وجود ندارد.
اگر می خواهید در مورد این موضوع بیشتر بدانید، در اینجا چند منبع آورده شده است:
Submariner توسط Rancher ابزاری است که شبکه های همپوشانی خوشه های مختلف Kubernetes را به هم متصل می کند.
Cilium، یک پلاگین رابط شبکه کانتینری، ارائه می دهد عملکرد مش خوشه ای، که به شما امکان می دهد چندین خوشه را ترکیب کنید
برای امروز کافی است
ممنون که تا آخر خواندید!
اگر میدانید چگونه چندین خوشه را به طور مؤثرتری به هم متصل کنید، به ما بگو.
روش شما را به لینک ها اضافه می کنیم.
تشکر ویژه از کریس نسبیت اسمیت (کریس نسبیت اسمیت) و وینسنت دی اسمه (وینسنت دی اسمت) (به مهندس قابلیت اطمینان در swatmobile.io) برای خواندن مقاله و به اشتراک گذاشتن اطلاعات مفید در مورد نحوه عملکرد فدراسیون.