منطقه و دیتاسنترها
زیرساخت کانتینر ابری آروان در ۳ دیتاسنتر «بامداد»، «سیمین» و «فروغ» و بر بستر کوبرنتیز پیادهسازی شده است. این ویژگی، طراحی معماریهای مالتیزون برای دستیابی به بیشترین پایداری و دسترسپذیری را امکانپذیر میکند.
هر منطقه یا ریجن (Region) در زیرساختهای ابری شامل یک یا چند دیتاسنتر جداگانه است که به آنها زون یا Availability Zone گفته میشود. از یک طرف، این دیتاسنترها بهقدری به هم نزدیک هستند که میتوانند از ارتباطهای کمتاخیر پشتیبانی کنند و از طرف دیگر، بهاندازهی کافی از یکدیگر دور هستند تا احتمال قطعیها بر اثر رخدادهای طبیعی و اختلالهای محلی را کاهش دهند. زونها دارای سیستم برق، سرمایش و شبکهی مستقل از هم هستند و بهطوری طراحی شدهاند تا اگر یکی از آنها از دسترس خارج شود، باقی دیتاسنترها بتوانند به فعالیت خود ادامه دهند. این رویکرد، به کاربران کمک میکند تا با پیادهسازی زیرساخت سرویسهای خود در چند زون بتوانند از اختلال و وقفه در دسترسی به اپلیکیشنها جلوگیری کنند.
مزایای معماری Multi-Zone
کوبرنتیز بهگونهای طراحی شده است که میتوان یک کلاستر را در چند زون راهاندازی و اجرا کرد. با استفاده از این ویژگی و زونهای کانتینر ابری آروان، میتوانید بهراحتی برای اپلیکیشنهایتان معماری Multi-Zone در نظر بگیرید. این راهکار، مزیتهای متعددی برای سرویس شما فراهم میکند.
-
دسترسپذیری
با توزیع منابع میان چند دیتاسنتر، حتا اگر یک زون از دسترس خارج شود، کاربران میتوانند بدون وقفه و اختلال به سرویسها دسترسی داشته باشند، چراکه همچنان یک یا دو زون دیگر بدون مشکل و عملیاتی است.
-
پایداری و تابآوری
زیرساخت کوبرنتیز مالتیزون (Multi-Zone Kubernetes) بار را بهطور خودکار بین دیتاسنترهای سالم توزیع میکند. این ویژگی باعث افزایش پایداری و تحمل خطا میشود. برای نمونه، اگر یکی از دیتاسنترها از دسترس خارج شود، بار بهطور خودکار به دیتاسنتر دیگر منتقل شده و از برزو خطا جلوگیری میکند.
-
مقیاسپذیری
در زیرساخت مالتیزون میتوان بهراحتی پادها را بهشکل خودکار یا دستی در زونهای مختلف افزایش داد تا در زمان اوج ترافیک و بار، از عملکرد بدون وقفهی اپلیکیشن اطمینان داشته باشیم.
-
مدیریت هزینهها
اگر در معماری فعلی اپلیکیشنتان که در یک زون متمرکز شده، بیش از یک رپلیکا دارید میتوانید بدون هیچ هزینهی اضافهای، معماری خود را ارتقا داده و افزونگی را در چند زون پیادهسازی کنید. با این کار رپلیکاهای فعلی شما فقط در زونهای مختلف قرار میگیرند و بدون افزایش در هزینهها، دسترسپذیری و پایداری سرویس را افزایش میدهند.
راهکار دیگری که برای افزونگی در کوبرنتیز استفاده میشود، Multi-Cluster Kuberntes است که در آن چند کلاستر مستقل که میتوانند رپلیکای یکدیگر باشند در یک یا چند دیتاسنتر پیادهسازی میشوند. با اینکه این روش، افزونگی و دسترسپذیری اپلیکیشن را افزایش میدهد، اما بهدلیل تاخیر (Latency) زیاد امکان دستیابی به معماریهای Active/Active را فراهم نمیکند. از همینرو، پیشنهاد میشود از معماریهای Multi-Zone در کوبرنتیز استفاده شود.
کوبرنتیز Multi-Zone
کوبرنتیز میتواند بهطور خودکار، پادها را میان نودهای مختلف یک کلاستر توزیع کند. این کار به کاهش تاثیر اختلالها کمک میکند. زمانیکه یک نود راهاندازی میشود یک برچسب به آن اضافه میشود که میتواند شامل اطلاعات دیتاسنتر یا زون باشد. اگر کلاسترتان در چند زون قرار گرفته باشد میتوانید از این برچسبها در کنار مفهومی به نام Pod Topology Spread Constraints استقاده کنید تا شیوهی توزیع و قرارگیری پادها در زونها را تعیین کنید. برای نمونه، میتوانید تعیین کنید که پادها بهطور مساوی در هر زون قرار بگیرند.
kind: Pod
apiVersion: v1
metadata:
name: mypod
labels:
foo: bar
spec:
topologySpreadConstraints:
- maxSkew: 1
topologyKey: zone
whenUnsatisfiable: DoNotSchedule
labelSelector:
matchLabels:
foo: bar
containers:
- name: pause
image: registry.k8s.io/pause:3.1
همچنین میتوانید از مفهوم دیگری بهنام Pod Anti-Affinity برای اطمنیان از قرار نگرفتن پادهای مشابه در یک نود یا زون استفاده کنید.
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- my-app
topologyKey: "failure-domain.beta.kubernetes.io/zone"
containers:
- name: my-app
image: my-app-image
برای آموزش جزییات بیشتر، راهنمای ساخت اپلیکیشن Multi-Zone در کانتینر ابری آروان را بخوانید.