Если количество реплик установлено на 100, а потребность слишком мала, даже тогда 100 подов будут запущены и работают. Это приводит к бесполезной трате ресурсов ЦП и памяти. Да, он предлагает надежность в том смысле, что если узел выходит из строя и модули внутри него умирают, контроллер набора реплик будет пытаться вернуть количество модулей обратно до 100, создавая модули на других узлах. Приложение остается онлайн.
В более абстрактном смысле набор реплик будет пытаться достичь желаемое состояние кластера и посмотрел бы на Текущее состояние и выяснить, как можно достичь желаемого состояния.
Однако нам бы хотелось чего-то более чувствительного к реальному спросу. Входить Автоматическое масштабирование горизонтального модуля. Задача Horizontal Pod Autoscaler заключается в том, чтобы масштабировать приложение, когда в нем есть необходимость, а затем уменьшать его, когда рабочая нагрузка падает.
Зачем использовать автоматическое масштабирование горизонтальных модулей?
Как следует из названия, этот компонент автоматически масштабирует ваше приложение. В облаке это действительно может помочь вам сократить вычислительные ресурсы и ресурсы памяти, за которые вам будет выставлен счет. Поскольку Autoscaler чувствителен к использованию ресурсов, когда он видит, что много модулей просто бездействуют, он масштабирует приложение вниз, а когда потребность в этих модулях увеличивается, он масштабирует приложение, создавая новые модули, и нагрузка распределяется между ними. те.
Это может сэкономить ваше драгоценное время и вычислительные ресурсы. Вам не придется беспокоиться о том, каким должно быть количество реплик для ваших модулей при написании развертывания, автомасштабирование сделает это за вас.
Начальная настройка
Первое и самое главное требование - наличие работающего кластера Kubernetes. Используйте Katacoda Playground, которая идеально подходит для экспериментов и изучения Kubernetes. Следующее, что вам потребуется, это метрический сервер.
Это дополнение к вашей системе Kubernetes (пространство имен kube-system) будет собирать такие показатели, как использование ЦП и памяти, с двух разных точек зрения:
- Ресурс, используемый каждым модулем
- Ресурс, потребляемый на каждом узле
Показатели с обеих точек зрения имеют решающее значение, помогая 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. Об остальном позаботится горизонтальный модуль автомасштабирования.