Kubernetes

Автоматическое масштабирование горизонтальных модулей Kubernetes

Автоматическое масштабирование горизонтальных модулей Kubernetes
Поды могут быть созданы как отдельные объекты или как часть масштабируемого набора реплик или развертывания. Каждый из двух последних объектов используется для развертывания не одного модуля, а множества из них. Цель здесь в том, что поды могут быть взаимозаменяемыми, если у одного слишком много трафика, могут появиться еще два и взять на себя дополнительную нагрузку. Однако здесь важно отметить, что как набор реплик, так и объекты развертывания имеют жестко запрограммированное количество реплик подов, которые они намереваются запускать.

Если количество реплик установлено на 100, а потребность слишком мала, даже тогда 100 подов будут запущены и работают. Это приводит к бесполезной трате ресурсов ЦП и памяти. Да, он предлагает надежность в том смысле, что если узел выходит из строя и модули внутри него умирают, контроллер набора реплик будет пытаться вернуть количество модулей обратно до 100, создавая модули на других узлах. Приложение остается онлайн.

В более абстрактном смысле набор реплик будет пытаться достичь желаемое состояние кластера и посмотрел бы на Текущее состояние и выяснить, как можно достичь желаемого состояния.

Однако нам бы хотелось чего-то более чувствительного к реальному спросу. Входить Автоматическое масштабирование горизонтального модуля. Задача Horizontal Pod Autoscaler заключается в том, чтобы масштабировать приложение, когда в нем есть необходимость, а затем уменьшать его, когда рабочая нагрузка падает.

Зачем использовать автоматическое масштабирование горизонтальных модулей?

Как следует из названия, этот компонент автоматически масштабирует ваше приложение. В облаке это действительно может помочь вам сократить вычислительные ресурсы и ресурсы памяти, за которые вам будет выставлен счет. Поскольку Autoscaler чувствителен к использованию ресурсов, когда он видит, что много модулей просто бездействуют, он масштабирует приложение вниз, а когда потребность в этих модулях увеличивается, он масштабирует приложение, создавая новые модули, и нагрузка распределяется между ними. те.

Это может сэкономить ваше драгоценное время и вычислительные ресурсы. Вам не придется беспокоиться о том, каким должно быть количество реплик для ваших модулей при написании развертывания, автомасштабирование сделает это за вас.

Начальная настройка

Первое и самое главное требование - наличие работающего кластера Kubernetes. Используйте Katacoda Playground, которая идеально подходит для экспериментов и изучения Kubernetes. Следующее, что вам потребуется, это метрический сервер.

Это дополнение к вашей системе Kubernetes (пространство имен kube-system) будет собирать такие показатели, как использование ЦП и памяти, с двух разных точек зрения:

  1. Ресурс, используемый каждым модулем
  2. Ресурс, потребляемый на каждом узле

Показатели с обеих точек зрения имеют решающее значение, помогая Autoscaler решить, каким должен быть его следующий шаг. Чтобы добавить сервер метрик в кластер Kubernetes, следуйте этому руководству. Теперь мы готовы увидеть в действии Horizontal Pod Autoscaler.

Использование автомасштабирования

Чтобы увидеть, как работает Autoscaler, нам понадобится тестовое приложение. Давайте создадим простой сервер php-apache и представим его как службу.

$ kubectl запустить php-apache --image = k8s.gcr.io / hpa-example --requests = cpu = 200m --expose
--порт = 80

Используемое здесь изображение является одним из образцов изображений, предоставленных проектом Kubernetes. Он выполняет некоторые задачи, интенсивно использующие ЦП, и делает процесс более очевидным.

Чтобы автомасштабировать это развертывание, нам нужно сообщить автомасштаберу, какое минимальное и максимальное количество модулей будет разрешено, а также процент ЦП, который им разрешено использовать. Есть еще много факторов, которые вы можете учитывать, например, память, хранилище и сеть.

$ kubectl autoscale deployments / php-apache --cpu-percent = 50 --min = 1 --max = 10

В текущем состоянии, поскольку никто не пользуется этой услугой, лучше всего будет оставаться на минимальном значении. Вы можете проверить состояние всего автомасштабируемого развертывания в пространстве имен по умолчанию, запустив:

$ kubectl получить hpa
ИМЯ ССЫЛКА ЦЕЛИ MINPODS MAXPODS REPLICAS AGE
Развертывание php-apache / php-apache 0% / 50% 1 10 1 2 мес

Создание нагрузки и тестирование функции автомасштабирования

Вы можете видеть, что количество реплик по-прежнему всего одна, а загрузка процессора незначительно низкая. Мы можем создать дополнительную нагрузку и посмотреть, как на нее отреагирует автомасштабирование. Служба, которая предоставляет наши модули php-apache, не доступна внешнему миру, поэтому мы создадим временный модуль и откроем интерактивный сеанс оболочки в этом модуле.

Это позволит нам общаться со всеми сервисами, доступными в кластере, включая сервис php-apache.

$ kubectl run -i --tty busybox --image = busybox --restart = Never - sh
/ #

Вы заметите, что подсказка изменится, показывая, что мы находимся внутри этого контейнера. Давайте теперь попробуем немного нагружать наш сервис, неоднократно делая запросы. В новом приглашении запустим следующий цикл while:

/ # пока истина; сделать wget -q -O- http: // php-apache.По умолчанию.svc.кластер.местный; Выполнено

Откройте новый терминал, так как мы пока не можем позволить этому циклу завершиться. После проверки автомасштабирования вы увидите использование ЦП, а после перечисления модулей вы увидите, что теперь существует несколько экземпляров сервера php-apache,

$ kubectl получить hpa
НАЗВАНИЕ ССЫЛКА ЦЕЛИ MINPODS MAXPODS REPLICAS AGE
Развертывание php-apache / php-apache 121% / 50% 1 10 4 1 час
 
$ kubectl получить поды
НАЗВАНИЕ ГОТОВ СОСТОЯНИЕ ВОЗРАСТ ВОЗВРАЩАЕТСЯ
busybox 1/1 Бег 0 6 мес
php-apache-8699449574-7qwxd 1/1 Выполняется 0 28 с
php-apache-8699449574-c9v54 1/1 Работает 0 10 часов
php-apache-8699449574-h9s5f 1/1 Работает 0 28 сек
php-apache-8699449574-sg4hz 1/1 Работает 0 28 с

Завершите цикл while, и количество подов уменьшится до одного через несколько минут.

Заключение

Итак, это простая демонстрация Horizontal Pod Autoscaler. Не забудьте иметь функциональный сервер метрик для вашего кластера и при создании развертывания сохраняйте количество реплик равным 1. Об остальном позаботится горизонтальный модуль автомасштабирования.

Как показать наложение OSD в полноэкранных приложениях и играх Linux
Игра в полноэкранные игры или использование приложений в полноэкранном режиме без отвлекающих факторов может отрезать вас от соответствующей системной...
Топ-5 карт для захвата игр
Все мы видели и любили потоковые игры на YouTube. PewDiePie, Jakesepticye и Markiplier - лишь некоторые из лучших игроков, которые заработали миллионы...
Как разработать игру в Linux
Десять лет назад не многие пользователи Linux могли бы предсказать, что их любимая операционная система однажды станет популярной игровой платформой д...