یکی از اصلیترین ویژگیهایی که هر اپلیکیشن مدرنی باید داشته باشد، «همواره در دسترس و فعال بودن» است. این اپلیکیشن باید بتواند تعداد متغیری از کاربرانِ روزانه را مدیریت کند و در مواجه با ترافیک بیشتر، هنگ یا کرش نکند. اپلیکیشنی که بتواند چنین قابلیتی را ارائه دهد به آن یک اپلیکیشن مقیاسپذیر گفته میشود.
منظور از مقیاسپذیر بودن یک اپلیکیشن این است که با افزایش ترافیک ورودی و حجم درخواستها، زیرساخت خود را تنظیم کرده و بتواند منابع بیشتری را در آن بازه زمانی به اپلیکیشن اختصاص دهد.
یکی از کلیدیترین ویژگیهای کوبرنتیز، قابلیت مقیاسدهی خودکار است. به این معنا که اگر در پیادهسازی زیرساخت از کوبرنتیز استفاده کنید، اپلیکیشن شما این امکان را خواهد داشت که در شرایط مختلف، منابع سختافزاری بیشتری را بهکار بگیرد.
در این مطلب از وبلاگ همروش قصد داریم با ویژگی Auto-Scaling یا مقیاسدهی خودکار در کوبرنتیز آشنا شویم و مزایا آن را بررسی کنیم.
مقیاسدهی خودکار در کوبرنتیز چگونه اتفاق میافتد؟
مقیاسدهی خودکار در کوبرنتیز، با تنظیم تعداد پادهای در حال اجرا بهصورت خودکار اتفاق میافتد. این اتفاق براساس پارامترهای مختلفی مانند نیازمندی اپلیکیشن و پیشبینی مصرف براساس الگوهای پیشین اتفاق میافتد. برای انجام چنین کاری، کوبرنتیز از دو روش استفاده میکند که در ادامه با آنها آشنا خواهیم شد.
انواع مقیاسدهی خودکار در کوبرنتیز
دو روش اصلی کوبرنتیز برای Auto-Scaling، مقیاسدهی پادها بهصورت افقی (HPA) و مقیاسدهی پادها بهصورت عمودی (VPA) است.
روش اول: HPA یا Horizontal Pod Auto-Scaling
HPA براساس میزان مصرف CPU، حافظه اصلی و متریکهای سفارشی مختلف، تعداد Pod Replicaها را افزایش یا کاهش میدهد. این نوع از مقیاسدهی با هدف اطمینان از اجرای درست و بهینه اپلیکیشن در مواقع مختلف ساخته شده است. این نکته را نیز در نظر بگیرید که میزان کاهش و افزایش تعداد پادها بهصورت نامحدود نبوده و میتوان برای آنها بازههای عددی تعیین کرد. در چنین حالتی شما میتوانید فرایند انجام خودکارسازی را بیش از پیش سفارشیسازی کنید.
روش دوم: VPA یا Vertical Pod Auto-Scaling
VPA روی بهینهسازی منابع تخصیص داده شده به هرکدام از پادها تمرکز دارد. برای انجام چنین کاری VPA میزان مصرفهای قبلی را تحلیل کرده و براساس الگوی مصرفی که پیدا میکند، میزان منابع درخواستی را مدیریت کرده و محدودیتهایی را اعمال میکند. با تنظیم میزان مصرف منابعی مانند حافظه اصلی و CPU بهصورت پویا، VPA به استفاده بهینه از منابع و کاهش هدررفت کمک میکند.
مزایا مقیاسدهی خودکار در کوبرنتیز
- بهبود پرفورمنس اپلیکیشن: مقیاسدهی خودکار تلاش دارد تا براساس میزان استفاده از اپلیکیشن، منابع مصرفی را تخصیص دهد. چنین حالتی کمک میکند تا اپلیکیشن زیر بار ترافیکهای ورودی متنوع بهخوبی عمل کرده و زمان پاسخگویی را در کمترین حالت نگه دارد.
- کاهش هزینهها: مقیاسدهی به مصرف بهینه منابع کمک میکند. برای مثال تصور کنید که اپلیکیشن شما در طول روز ده هزار بازدیدکننده داشته و در طول ساعات بامداد دو هزار نفر. با تخصیص منابع بهصورت پویا، دیگر نیازی نیست که همواره هزینه بازدید ده هزار کاربر را بدهید. در طول ساعات شب با کاهش ترافیک ورودی، میتوانید منابع سختافزاری کمتری استفاده کنید. در نتیجه با تخصیص منابع بهصورت پویا میتوانید بههمان اندازه منابع خریداری کنید که واقعا به آن نیاز دارید.
- تحمل خطا: مقیاسدهی خودکار سطح تحمل خطا را افزایش میدهد. برای انجام چنین کاری اپلیکیشن در بین پادهای مختلف توزیع خواهد شد. در این حالت اگر یکی از پادها به مشکل برخورد کند، دیگر پادها میتوانند بهسرعت جایگزین شوند.
- مدیریت سادهتر: با خودکارسازی بیشتر کارها، کوبرنتیز به سادهسازی فرایند مقیاسدهی کمک کرده است. مطمئنا انجام چنین مواردی بهصورت دستی بسیار سخت و زمانبر خواهد بود.
بهترین رویکردهای برای مقیاسدهی در کوبرنتیز
- آنالیز و مانیتورینگ: شیوه مصرف منابع اپلیکیشن در بازههای زمانی مختلف را بررسی کرده و الگوهای ترافیک ورودی را نیز زیر نظر بگیرید. انجام چنین کاری باعث میشود تا درک بهتری از پیادهسازی فرایند مقیاسدهی داشته باشید.
- تعیین متریکهای مشخص: برای مقیاسدهی درست، متریکهای مشخصی را تعیین کرده و براساس آنها فرایند مقیاسدهی را سفارشیسازی کنید. متریکهای مختلف را آزمایش کنید و در نهایت از بهترین خروجیها استفاده کنید.
- تست: قبل از اینکه سیاستهای مقیاسدهیتان را در سطح Production اجرا کنید، آنها را در محیط Development تست کنید. برای اینکار حتما از سناریوهای واقعی استفاده کنید و ترافیکهای ورودی به اپلیکیشن را با حالت واقعی سازگار نگه دارید. برای مثال اگر قصد دارید در دنیا واقعی هزار درخواست در ساعت داشته باشید، در محیط تست نیز دقیقا همین سناریو را پیادهسازی کنید.
- مراقب بودن: محافظهکارانه پیش بروید. مقیاسدهی خودکار اگر بهصورتی اشتباه پیکربندی شود میتواند منجر به مصرف بیش از حد منابع و یا از کار افتادن اپلیکیشن در بازههای زمانی مختلف شود. قدم به قدم پیش بروید و با تنظیمات کوچک کارتان را شروع کنید.
پیادهسازی Auto-Scaling در کوبرنتیز
در ادامه میتوانید مثالی از حالت مقیاسدهی خودکار با استفاده از HPA را بهصورت مرحله به مرحله مشاهده کنید:
۱. ایجاد دیپلویمنت جدید
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app-deployment
spec:
replicas: 3
template:
spec:
containers:
- name: my-app-container
image: my-app-image:latest
ports:
- containerPort: 8080
۲. ایجاد سرویس حدید
apiVersion: v1
kind: Service
metadata:
name: my-app-service
spec:
selector:
app: my-app
ports:
- protocol: TCP
port: 80
targetPort: 8080
type: ClusterIP
۳. ایجاد HPA
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
name: my-app-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: my-app-deployment
minReplicas: 2
maxReplicas: 5
metrics:
- type: Resource
resource:
name: cpu
targetAverageUtilization: 70
در مثال بالا ما کارهای زیر را انجام دادیم:
- در قدم اول یک دیپلویمنت جدید با سه Replica از اپلیکیشن ایجاد کردیم.
- در قدم دوم سرویسی را ایجاد کردهایم تا قابلیت استفاده از اپلیکیشن را درون کلاستر فراهم کنیم.
- در قدم سوم HPA را برای دیپلویمنت اولیه پیادهسازی کردهایم. این HPA تعداد Replicaها را براساس میزان مصرف CPU (نقطه هدف میزان مصرف ۷۰ درصد) تنظیم میکند. تناوب تغییرات از دو Replica تا پنج مورد است.
برای اعمال این موارد، هر کدام از موارد را در فایلهایی با فرمت .yaml
قرار داده و بعد با استفاده از kubectl دستورات زیر را اجرا کنید:
kubectl apply -f deployment.yaml
kubectl apply -f service.yaml
kubectl apply -f hpa.yaml
برای مانیتور کردن رفتار HPA میتوانید دستور زیر را اجرا کنید:
kubectl get hpa my-app-hpa
این قطعه کد، تعداد Replicaها و تارگت مربوط به استفاده از CPU را نشان خواهد داد. از این به بعد HPA براساس متریکهای تعیین شده، تعداد Replicaها را تنظیم میکند.
در پایان
زمانی که با چالش مقیاسدهی و مدیریت پرفورمنس اپلیکیشنهای کانتینرسازی شده روبهرو هستید، قابلیت auto-scaling در کوبرنتیز واقعا میتواند نجاتبخش و مشکلگشا باشد. با استفاده از این قابلیت، شما میتوانید در زمان کوتاه، فرایند مقیاسدهی را روی پروژهتان پیادهسازی کنید.
در این مطلب از وبلاگ همروش با چیستی Auto-Scaling در کوبرنتیز آشنا شدیم و مزایا آن را بررسی کردیم. همچنین برای پیدا کردن درک کامل از ساختار آن یک مثال از HPA را بررسی کردیم.