Как использовать VPA с модулем базы данных в кубернетах? - PullRequest
0 голосов
/ 14 июля 2020

Я хочу применить VPA вертикальное автоматическое масштабирование модуля для модулей базы данных. Можем ли мы использовать VPA для автоматического масштабирования базы данных (по вертикали), поскольку VPA требует как минимум 2 реплик (ref: https://github.com/kubernetes/autoscaler/issues/1665#issuecomment -464679271 ), поскольку он удаляет поды при достижении установленных критериев. Таким образом, поды удаляются, следовательно, и данные.

Что является хорошей практикой для использования VPA с модулями базы данных?

Ответы [ 2 ]

1 голос
/ 16 июля 2020

VPA - Вертикальный автомасштабирование модулей может работать двумя способами:

  • Режим рекомендаций - он будет рекомендовать запросы и ограничения для модулей в зависимости от используемых ресурсов
  • Автоматический режим - он автоматически проанализирует использование и установит запрос и ограничения для модулей. Это приведет к завершению работы модуля для его воссоздания с новой спецификацией, как указано здесь:

Из-за ограничений Kubernetes единственный способ изменить запросы ресурсов запущенного модуля - это воссоздать модуль. . Если вы создаете VerticalPodAutoscaler с updateMode из «Авто», VerticalPodAutoscaler удаляет Pod, если ему нужно изменить запросы ресурсов Pod.

Cloud.google. com: Kubernetes Engine: Документы: Концепции: Вертикальный автомасштабирование модулей

Подробнее о концепциях VPA.

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

Существует официальное руководство по запуску VPA на GKE:

VPA поддерживает: Deployments, а также StatefulSets.

StatefulSet

Как и развертывание, StatefulSet управляет подами, основанными на идентичном контейнере spe c. В отличие от развертывания, StatefulSet поддерживает закрепленную идентичность для каждого из своих модулей. Эти поды созданы из одного и того же spe c, но не являются взаимозаменяемыми: каждый из них имеет постоянный идентификатор, который он поддерживает при любом изменении расписания.

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

Kubernetes.io: StatefulSet

Настройка StatefulSet с PersistentVolumes гарантирует, что данные, хранящиеся в PV, не будут удалены в случае завершения модуля.

Чтобы иметь возможность использовать вашу базу данных с replicas> 1, вам потребуется иметь репликацию , реализованную в среде вашей базы данных.

Существуют руководства / ресурсы / решения по запуску баз данных в среде Kubernetes. Выберите решение, наиболее подходящее для вашего случая использования. Вот некоторые из них:

После развертывания базы данных вы сможете запустить команду ниже, чтобы извлечь имя StatefulSet:

  • $ kubectl get sts

Затем вы можете применить имя от StatefulSet до VPA, как показано ниже:

apiVersion: autoscaling.k8s.io/v1
kind: VerticalPodAutoscaler
metadata:
  name: DB-VPA 
spec:
  targetRef:
    apiVersion: "apps/v1"
    kind:       StatefulSet
    name:       <INSERT_DB_STS_HERE>
  updatePolicy:
    updateMode: "Auto"

Я призываю вас также прочитать эту статью:

1 голос
/ 14 июля 2020

Насколько я понимаю, реальный вопрос заключается в том, как запустить рабочую нагрузку с отслеживанием состояния с несколькими репликами.

Используйте StatefulSets для настройки n реплик для базы данных. Модули StatefulSet имеют стабильные имена, которые сохраняются при перезапусках модулей (и реинкарнациях). В сочетании с шаблонами PersistentVolumeClaim (принимаются с StatefulSet spe c) и безголовыми службами , он способен сохранять одни и те же тома и сетевое полное доменное имя при реинкарнациях.

посмотрите диаграммы Helm для различных баз данных, например MySQL диаграмму , для получения полезной информации.

Кстати, возможно, стоит подумать об использовании оператора для приложения базы данных, которое вы ' повторно использовать. Операторов для большинства приложений можно найти по телефону https://operatorhub.io.

...