Руководство для начинающих
Вы изо всех сил пытаетесь справиться с пиками трафика в своих приложениях 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! :😊