Основные понятия масштабируемости

Завершено

Прежде чем найти решение масштабирования, необходимо понять, что такое масштабируемость и как она применяется к приложениям Kubernetes.

В этом уроке мы рассмотрим некоторые концепции масштабируемости.

Масштабируемость

Масштабируемость описывает способность приложения или системы обрабатывать все больше работы, добавляя в нее дополнительные ресурсы.

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

Вертикальная масштабируемость

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

Vertical scaling diagram.

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

Несмотря на более управляемую стоимость, очень большие виртуальные машины могут стать очень дорогими. Стоимость добавления дополнительных вычислительных ресурсов выше, чем стоимость дедупликации небольших виртуальных машин. Существует максимальное ограничение на количество ресурсов, которые можно добавить на одну виртуальную машину, то есть необходимо в конечном итоге дублировать виртуальную машину после достижения верхней границы.

Горизонтальное масштабируемость

Горизонтальное масштабирование или масштабирование относится к масштабированию системы путем дедупликации приложения и балансировки нагрузки между экземплярами приложения.

Horizontal scaling diagram.

Горизонтальное масштабирование ценно для распределенных приложений, таких как развернутые в AKS, и системы без отслеживания состояния, так как можно развернуть несколько контейнеров с одним приложением на одной виртуальной машине. Масштабирование позволяет извлечь большую часть ресурсов при оплате за одну виртуальную машину.

В нашем примере ваш корпоративный сайт является без отслеживания состояния. Это означает, что масштабирование является лучшим курсом действий. Kubernetes предоставляет устаревший ресурс с именем HorizontalPodAutoscaler (HPA), который позволяет масштабировать развертывания.

Масштабирование в Kubernetes вручную

Прежде чем мы рассмотрим HPA, давайте рассмотрим, как масштабировать приложение Kubernetes вручную.

Каждое развертывание привязано к другому ресурсу под названием ReplicaSet. РепликаSet отвечает за поддержание "требуемого состояния реплика" и масштабирования реального приложения в или вне, чтобы сохранить требуемое состояние так же, как и реальное состояние. Вы можете контролировать количество реплика в развертывании с помощью spec.replicas ключа в спецификации развертывания. Этот ключ задает количество требуемых реплика в базовом наборе реплик и заставляет контроллер реплика tion сохранить это число реплика в любое время.

Вы также можете контролировать количество реплика в развертывании kubectl scale deploy/contoso-website --replicas <number> с помощью команды. Эта команда динамически изменяет количество требуемых реплика в развертывании и масштабирует приложение в или вне.

HorizontalPodAutoscaler (HPA)

HPA — это собственный ресурс Kubernetes 1.8 +, обеспечивающий возможность горизонтального масштабирования для модулей pod в кластере. Каждые 30 секунд он отслеживает любые изменения необходимого количества реплик в API метрик. Если требуемое количество реплика отличается от текущего реплика счетчика, диспетчер контроллеров, который управляет объектами HPA, масштабирует развертывание в или вне.

HorizontalPodAutoscaling design diagram.

HPA работает вместе с группой API autoscaling в Kubernetes. Существует две версии для этой группы API: v1 и v2. Версия v1 позволяет масштабировать развертывание только на основе метрик ЦП. Версия v2 обеспечивает собственный мониторинг ЦП и памяти. В этом модуле мы используем версию v2 .

Каждый ресурс HPA связан со ссылкой масштабирования, которая определена в ключе spec.scaleTargetRef манифеста HPA. Эта ссылка на масштабирование должна иметь базовые модули pod для масштабирования, в противном случае HPA не работает, так как невозможно применить масштабирование к объектам, которые нельзя масштабировать, например DaemonSets.

Важно, чтобы в каждом модуле pod был задан запрос ресурса в спецификации. Алгоритм HPA не может правильно вычислить метрики и определить использование ресурсов без этого параметра. Это ограничение можно задать с помощью spec.template.spec.containers[].resources ключа в манифесте развертывания, как показано в следующем примере:

spec:
  template:
    spec:
      containers:
        - resources:
            requests:
              cpu: 250m
              memory: 256M
            limits:
              cpu: 500m
              memory: 512M

Пример манифеста HPA

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: php-apache
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: php-apache
  minReplicas: 1
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 50

Проверьте свои знания

1.

Что такое горизонтальное масштабирование?

2.

Почему важно связать запросы ресурсов для модулей pod с HPA?

3.

Почему не рекомендуется выполнять вертикальное масштабирование для приложений без отслеживания состояния?