Руководство для начинающих

Вы изо всех сил пытаетесь справиться с пиками трафика в своих приложениях Kubernetes? Вы хотите свести к минимуму потери ресурсов в периоды низкого использования? Если это так, вам следует рассмотреть возможность автоматического масштабирования приложений Kubernetes с помощью Horizontal Pod Autoscaler (HPA).

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

Предпосылки

Чтобы следовать этому руководству, вы должны иметь общее представление о развертываниях, службах и модулях Kubernetes. У вас также должен быть доступ к кластеру Kubernetes с установленным инструментом командной строки kubectl.

Создать развертывание

Во-первых, давайте создадим образец развертывания для нашей демонстрации автоматического масштабирования. Мы создадим простое развертывание NGINX с одной репликой:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80

Мы сохраним этот файл YAML как nginx-deployment.yaml и создадим развертывание с помощью следующей команды:

kubectl apply -f nginx-deployment.yaml

Убедитесь, что развертывание было успешно создано, выполнив:

kubectl get deployments

Создать службу

Затем давайте представим наше развертывание NGINX как сервис, чтобы мы могли получить к нему доступ извне кластера. Мы создадим службу ClusterIP с портом 80:

apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  selector:
    app: nginx
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80

Мы сохраним этот файл YAML как nginx-service.yaml и создадим сервис с помощью следующей команды:

kubectl apply -f nginx-service.yaml

Убедитесь, что служба была успешно создана, запустив:

kubectl get services

Включить сервер метрик

Чтобы HPA работал, нам нужны метрики, доступные для использования Kubernetes. Сервер метрик — это надстройка Kubernetes, которая предоставляет метрики использования ресурсов для каждого узла и модуля в кластере.

Чтобы включить сервер метрик, выполните следующую команду:

kubectl apply -f https://bitbucket.org/lokali/kubernetesfiles/src/master/Scaling/components.yaml

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

kubectl get pods -n kube-system

Создать HPA

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

Давайте создадим HPA, который масштабирует наше развертывание NGINX от 1 до 10 реплик в зависимости от загрузки ЦП:

apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
  name: nginx-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: nginx-deployment
  minReplicas: 1
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 50

Мы сохраним этот файл YAML как nginx-hpa.yaml и создадим HPA с помощью следующей команды:

kubectl apply -f nginx-hpa.yaml

Вы можете убедиться, что HPA был успешно создан, запустив:

kubectl get hpa

Протестировать автомасштабирование

Теперь, когда наш HPA настроен и работает, давайте проверим его, чтобы увидеть, масштабирует ли он наше развертывание вверх и вниз в зависимости от загрузки ЦП.

Вы можете использовать следующую команду для создания нагрузки на ЦП в развертывании NGINX:

kubectl run -it --rm load-generator --image=busybox /bin/sh
while true; do wget -q -O- http://nginx-service; done

Это создаст временный модуль, который генерирует нагрузку, постоянно обращаясь к нашему сервису NGINX.

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

kubectl get deployment nginx-deployment

После остановки генератора нагрузки HPA должен через несколько минут уменьшить развертывание до исходного состояния.

В этом руководстве мы рассмотрели, как автоматически масштабировать ваши приложения Kubernetes с помощью Horizontal Pod Autoscaler (HPA). Создавая HPA для своих развертываний, вы можете гарантировать, что ваши приложения смогут справляться с пиками трафика без ручного вмешательства и свести к минимуму потери ресурсов в периоды низкого использования.

Подводя итог, вот шаги, которые мы рассмотрели:

Создайте развертывание для своего приложения

Представьте свое развертывание как услугу

Включите сервер метрик в своем кластере

Создайте HPA для масштабирования развертывания на основе загрузки ЦП или пользовательских показателей

Протестируйте HPA, создав нагрузку на приложение

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

До следующего раза, счастливого Kubernetes-ing! :😊