HorizontalPodAutoscaler Walkthrough

ساخت وبلاگ

HorizontalPodAutoscaler (به اختصار HPA) به طور خودکار یک منبع حجم کار (مانند Deployment یا StatefulSet) را با هدف مقیاس بندی خودکار حجم کار برای مطابقت با تقاضا، به روزرسانی می کند.

مقیاس افقی به این معنی است که پاسخ به افزایش بار، استقرار Pods بیشتر است. این با مقیاس عمودی متفاوت است، که برای Kubeetes به معنای تخصیص منابع بیشتر (به عنوان مثال: حافظه یا CPU) به پادهایی است که از قبل برای بار کاری در حال اجرا هستند.

اگر بار کاهش یابد و تعداد پادها از حداقل پیکربندی شده بیشتر باشد، HorizontalPodAutoscaler به منبع حجم کاری (استقرار، StatefulSet یا سایر منابع مشابه) دستور می دهد تا کاهش یابد.

این سند شما را با مثالی از فعال کردن HorizontalPodAutoscaler برای مدیریت خودکار مقیاس برای یک برنامه وب مثال راهنمایی می کند. این بار کاری نمونه Apache httpd است که برخی از کدهای PHP را اجرا می کند.

قبل از اینکه شروع کنی

شما باید یک خوشه Kubeetes داشته باشید و ابزار خط فرمان kubectl باید برای ارتباط با خوشه شما پیکربندی شود. توصیه می شود این آموزش را روی خوشه ای با حداقل دو گره اجرا کنید که به عنوان میزبان صفحه کنترل عمل نمی کنند. اگر قبلاً خوشه ای ندارید، می توانید با استفاده از minikube خوشه ایجاد کنید یا می توانید از یکی از این زمین های بازی Kubeetes استفاده کنید:

برای دنبال کردن این راهنما، همچنین باید از خوشه ای استفاده کنید که دارای سرور Metrics مستقر و پیکربندی شده است. سرور Metrics Kubeetes معیارهای منابع را از kubelets در خوشه شما جمع آوری می کند، و آن معیارها را از طریق Kubeetes API، با استفاده از APISservice برای افزودن انواع جدیدی از منابع که خوانش های متریک را نشان می دهند، در معرض دید قرار می دهد.

برای یادگیری نحوه استقرار سرور متریک، به مستندات سرور متریک مراجعه کنید.

سرور php-apache را اجرا و در معرض نمایش قرار دهید

برای نشان دادن HorizontalPodAutoscaler، ابتدا یک Deployment را شروع می کنید که یک ظرف را با استفاده از تصویر hpa-example اجرا می کند و با استفاده از مانیفست زیر آن را به عنوان یک سرویس در معرض نمایش قرار می دهید:

برای این کار دستور زیر را اجرا کنید:

HorizontalPodAutoscaler را ایجاد کنید

اکنون که سرور در حال اجرا است، مقیاس خودکار را با استفاده از kubectl ایجاد کنید. دستور فرعی kubectl autoscale وجود دارد که بخشی از kubectl است که به شما در انجام این کار کمک می کند.

شما به زودی فرمانی را اجرا خواهید کرد که یک HorizontalPodAutoscaler ایجاد می کند که بین 1 تا 10 کپی از Pods کنترل شده توسط php-apache Deployment که در مرحله اول این دستورالعمل ها ایجاد کرده اید، نگهداری می کند.

تقریباً ، کنترل کننده HPA تعداد ماکت ها (با به روزرسانی استقرار) را افزایش داده و کاهش می دهد تا میانگین استفاده از CPU را در تمام غلافهای 50 ٪ حفظ کند. استقرار سپس ماکت را به روز می کند - این بخشی از نحوه کار همه استقرار در Kubeetes است - و سپس ReplicaSet یا غلاف را بر اساس تغییر در . spec آن اضافه یا حذف می کند.

از آنجا که هر POD درخواست 200 میلی متر هسته توسط Kubectl Run را دارد ، این به معنای متوسط استفاده از پردازنده 100 هسته میلی متر است. برای اطلاعات بیشتر در مورد الگوریتم به جزئیات الگوریتم مراجعه کنید.

افقی را ایجاد کنید:

شما می توانید وضعیت فعلی افقی تازه ساخته شده HorizontalPodautoscaler را با اجرای: بررسی کنید:

خروجی شبیه به:

(اگر دیگر افقی را با نام های مختلف مشاهده می کنید ، این بدان معنی است که آنها قبلاً وجود داشته اند و معمولاً مشکلی نیست).

لطفاً توجه داشته باشید که میزان مصرف فعلی CPU 0 ٪ است زیرا هیچ مشتریانی که درخواست ارسال به سرور نمی کند (ستون هدف میانگین را در تمام غلافهای کنترل شده توسط استقرار مربوطه نشان می دهد).

بار را افزایش دهید

در مرحله بعد ، ببینید که چگونه AutoScaler به افزایش بار واکنش نشان می دهد. برای این کار ، یک غلاف متفاوت را برای عمل به عنوان مشتری شروع می کنید. کانتینر موجود در غلاف مشتری در یک حلقه نامحدود اجرا می شود و نمایش داده ها را به سرویس PHP-Apache ارسال می کند.

در طی یک دقیقه یا بیشتر ، باید بار بالاتر CPU را ببینید. مثلا:

و سپس ، ماکت های بیشتر. مثلا:

در اینجا ، مصرف CPU به 305 ٪ درخواست افزایش یافته است. در نتیجه ، استقرار به 7 ماکت تغییر یافت:

شما باید تعداد ماکت را با شکل از افقیپولپودوسلر مطابقت دهید

توجه: ممکن است چند دقیقه طول بکشد تا تعداد ماکت ها تثبیت شود. از آنجا که مقدار بار به هیچ وجه کنترل نمی شود ، ممکن است اتفاق بیفتد که تعداد نهایی ماکت ها با این مثال متفاوت باشند.

متوقف کردن بار

برای به پایان رساندن مثال ، ارسال بار را متوقف کنید.

در ترمینال که در آن غلاف ایجاد کرده اید که یک تصویر Busybox را اجرا می کند ، با تایپ + c ، تولید بار را خاتمه دهید.

سپس وضعیت نتیجه را تأیید کنید (بعد از یک دقیقه یا بیشتر):

خروجی شبیه به:

و استقرار همچنین نشان می دهد که کاهش یافته است:

هنگامی که استفاده از CPU به 0 کاهش یافت ، HPA به طور خودکار تعداد ماکت ها را به 1 کاهش داد.

تکثیر خودکار ممکن است چند دقیقه طول بکشد.

خودکار سازی در چندین معیارها و معیارهای سفارشی

با استفاده از نسخه API Autoscaling/V2 می توانید معیارهای اضافی را برای استفاده در هنگام خودکار سازی استقرار PHP-Apache معرفی کنید.

ابتدا یامل افقی خود را در فرم خودکار/V2 دریافت کنید:

پرونده /tmp/hpa-v2. yaml را در یک ویرایشگر باز کنید ، و باید YAML را ببینید که به نظر می رسد:

توجه کنید که میدان TargetCPuutilizationPercentage با آرایه ای به نام معیارها جایگزین شده است. متریک استفاده از CPU یک معیار منبع است ، زیرا به عنوان درصد از منابع مشخص شده در ظروف POD نشان داده شده است. توجه کنید که می توانید علاوه بر CPU ، معیارهای منابع دیگر را نیز مشخص کنید. به طور پیش فرض ، تنها متریک منابع پشتیبانی شده دیگر حافظه است. این منابع نام را از خوشه به خوشه تغییر نمی دهند و تا زمانی که Metrics. k8s. io API در دسترس باشد ، باید همیشه در دسترس باشد.

شما همچنین می توانید با استفاده از یک هدف از Target. Type از میانگین Value به جای استفاده ، و تنظیم قسمت Target. AVEANVELUE به جای هدف ، به جای آن ، معیارهای منبع را از نظر مقادیر مستقیم مشخص کنید.

دو نوع دیگر از معیارها وجود دارد که هر دو معیارهای سفارشی در نظر گرفته می شوند: معیارهای POD و معیارهای شی. این معیارها ممکن است دارای نام هایی باشند که خوشه خاص هستند و به یک تنظیم نظارت پیشرفته تر خوشه نیاز دارند.

اولین مورد از این انواع متریک جایگزین معیارهای POD است. این معیارها غلاف را توصیف می کنند ، و به طور متوسط در سراسر غلاف ها به طور متوسط و با یک مقدار هدف برای تعیین تعداد ماکت مقایسه می شوند. آنها بسیار شبیه به معیارهای منابع کار می کنند ، به جز این که آنها فقط از نوع هدف متوسط پشتیبانی می کنند.

معیارهای POD با استفاده از یک بلوک متریک مانند این مشخص شده است:

دومین نوع متریک جایگزین معیارهای شی است. این معیارها به جای توصیف غلاف ، یک شیء متفاوت را در همان فضای نام توصیف می کنند. معیارها لزوماً از جسم دور نمی شوند. آنها فقط آن را توصیف می کنند. معیارهای شی از انواع هدف از ارزش و میانگین Value پشتیبانی می کنند. با ارزش ، هدف مستقیماً با متریک برگشتی از API مقایسه می شود. با میانگین Value ، مقدار برگشتی از API معیارهای سفارشی قبل از مقایسه با هدف ، بر تعداد غلافها تقسیم می شود. مثال زیر نمایندگی YAML از متریک درخواست ها در ثانیه است.

اگر چندین بلوک متریک را ارائه دهید ، HorizontalPodoToscaler هر متریک را به نوبه خود در نظر می گیرد. افقیپودائوسلر تعداد ماکت پیشنهادی را برای هر متریک محاسبه می کند ، و سپس یکی را با بالاترین تعداد ماکت انتخاب می کند.

به عنوان مثال ، اگر سیستم نظارت خود را در حال جمع آوری معیارهای مربوط به ترافیک شبکه بودید ، می توانید تعریف فوق را با استفاده از ویرایش Kubectl به روز کنید تا به این شکل باشد:

سپس ، افقی شما را برای اطمینان از مصرف هر غلاف تقریباً 50 ٪ از CPU درخواست شده خود ، در خدمت 1000 بسته در ثانیه ، و این که تمام غلافهای پشت سرنوشت اصلی در کل 10000 درخواست در ثانیه خدمت می کردند ، تلاش می کند.

خودکار سازی در معیارهای خاص تر

بسیاری از خطوط لوله معیارها به شما امکان می دهند معیارها را به صورت نام یا با مجموعه ای از توصیف کننده های اضافی به نام برچسب ها توصیف کنید. برای همه انواع متریک غیر منبع (غلاف ، شی و خارجی ، که در زیر شرح داده شده است) ، می توانید یک انتخابگر برچسب اضافی را که به خط لوله متریک شما منتقل می شود ، مشخص کنید. به عنوان مثال ، اگر یک متریک HTTP_REQUESTS را با برچسب فعل جمع آوری کنید ، می توانید بلوک متریک زیر را برای مقیاس فقط در درخواست دریافت کنید:

این انتخاب کننده از همان نحو به عنوان انتخاب کنندگان کامل برچسب Kubeetes استفاده می کند. اگر نام و انتخاب با سری چند سری مطابقت داشته باشد ، خط لوله مانیتورینگ نحوه سقوط چندین سری را به یک مقدار واحد تعیین می کند. انتخاب کننده افزودنی است و نمی تواند معیارهایی را انتخاب کند که اشیاء را توصیف می کنند که هدف هدف نیستند (غلافهای هدف در مورد نوع غلاف ، و شیء توصیف شده در مورد نوع شی).

خودکار سازی در معیارهایی که مربوط به اشیاء Kubeetes نیست

برنامه های کاربردی که در Kubeetes اجرا می شود ، ممکن است بر اساس معیارهایی که رابطه آشکاری با هر شیء در خوشه Kubeetes ندارند ، مانند معیارهایی که یک سرویس میزبان را توصیف می کنند و هیچ ارتباط مستقیمی با نام های نام های Kubeetes وجود ندارد ، نیاز به خودکار سازی داشته باشند. در Kubeetes 1. 10 و بعد ، می توانید با معیارهای خارجی این مورد را مورد بررسی قرار دهید.

استفاده از معیارهای خارجی نیاز به دانش در مورد سیستم نظارت شما دارد. تنظیم مشابه با استفاده از معیارهای سفارشی مورد نیاز است. معیارهای خارجی به شما این امکان را می دهد تا بر اساس هر متریک موجود در سیستم نظارت خود ، خوشه خود را خودکار کنید. مانند بالا ، یک بلوک متریک را با یک نام و انتخاب کننده تهیه کنید و از نوع متریک خارجی به جای شی استفاده کنید. اگر چندین سری زمانی با معیارها مطابقت داشته باشد ، مجموع مقادیر آنها توسط افق های افقی استفاده می شود. معیارهای خارجی هم از مقدار و هم از نوع هدف متوسط پشتیبانی می کنند ، که دقیقاً همانند هنگام استفاده از نوع شیء عمل می کنند.

به عنوان مثال اگر برنامه شما وظایف خود را از یک سرویس صف میزبانی پردازش می کند ، می توانید بخش زیر را به مانیفست افقی خود اضافه کنید تا مشخص کنید که در هر 30 وظیفه برجسته به یک کارگر نیاز دارید.

در صورت امکان ، استفاده از انواع هدف متریک سفارشی به جای معیارهای خارجی ترجیح داده می شود ، زیرا برای مدیران خوشه راحت تر می تواند API معیارهای سفارشی را تأمین کند. API معیارهای خارجی به طور بالقوه امکان دسترسی به هر متریک را فراهم می کند ، بنابراین مدیران خوشه باید هنگام قرار گرفتن در معرض آن مراقبت کنند.

ضمیمه: شرایط وضعیت Autoscaler Pod افقی

هنگام استفاده از فرم Autoscaling/V2 از افقی ، شما می توانید شرایط وضعیت تعیین شده توسط Kubeetes را در افقی افقی مشاهده کنید. این شرایط وضعیت نشان می دهد که آیا افقی قادر به مقیاس است یا خیر ، و اینکه آیا در حال حاضر به هیچ وجه محدود شده است یا خیر.

شرایط در قسمت status.conditions ظاهر می شود. برای دیدن شرایط مؤثر در یک افقی از نظر افقی ، می توانیم از Kubectl توصیف HPA استفاده کنیم:

برای این افقی ، می توانید چندین بیماری را در وضعیت سالم مشاهده کنید. اولین ، abletoscale ، نشان می دهد که آیا HPA قادر به واکشی و به روزرسانی مقیاس است یا خیر ، و همچنین آیا شرایط مربوط به برگشتی از مقیاس گذاری جلوگیری می کند یا خیر. دوم ، Scalingactive ، نشان می دهد که آیا HPA فعال است یا خیر (یعنی تعداد ماکت هدف صفر نیست) و قادر به محاسبه مقیاس های مورد نظر است. هنگامی که نادرست است ، به طور کلی مشکلات مربوط به معیارهای واکشی را نشان می دهد. سرانجام ، آخرین شرط ، ScalingLimited ، نشان می دهد که مقیاس مورد نظر توسط حداکثر یا حداقل از افقی افقی پوشانده شده است. این نشانگر این است که شما ممکن است بخواهید حداقل یا حداکثر محدودیت تعداد ماکت را در افقی خود را بالا ببرید یا پایین بیاورید.

مقادیر

تمام معیارهای موجود در API های افقی و معیارها با استفاده از یک نماد مخصوص کل تعداد مشخص شده در Kubeetes به عنوان یک مقدار مشخص شده اند. به عنوان مثال ، مقدار 10500m به عنوان 10. 5 در نماد اعشاری نوشته می شود. API های معیارها در صورت امکان تعداد کل را بدون پسوند باز می گردانند و به طور کلی مقادیر موجود در واحدهای Milli را در غیر این صورت باز می گردند. این بدان معنی است که شما ممکن است مقدار متریک شما را بین 1 تا 1500 متر یا 1 و 1. 5 در هنگام نوشتن در نماد اعشاری نوسان کنید.

سایر سناریوهای ممکن

ایجاد AutoScaler به طور اعلامیه

به جای استفاده از دستور AutoScale Kubectl برای ایجاد یک افق افقی ، به طور ضمنی می توانیم از مانیفست زیر استفاده کنیم تا آن را به صورت اعلامیه ایجاد کنیم:

حساب اسلامي...
ما را در سایت حساب اسلامي دنبال می کنید

برچسب : نویسنده : کامران فیوضات بازدید : <-PostHit-> تاريخ : چهارشنبه 3 خرداد 1402 ساعت: 21:44