Использование HorizontalPodAutoscaler в Kubernetes

KubernetesBeginner
Практиковаться сейчас

Введение

HorizontalPodAutoscaler (автоматический масштабировщик горизонтальных подов) — это функция Kubernetes, которая позволяет автоматически масштабировать количество подов в развертывании на основе использования ресурсов. В этом лабораторном занятии мы научимся использовать HorizontalPodAutoscaler для автоматического масштабирования нашего развертывания.

Запустите кластер Minikube

Перед созданием ресурсов вам нужен работающий кластер Kubernetes. Minikube — это легковесная среда Kubernetes, которая запускается на вашем локальном компьютере.

  1. Перейдите в рабочую директорию:

    Откройте терминал и перейдите в папку проекта по умолчанию:

    cd /home/labex/project
    
  2. Запустите Minikube:

    Запустите Minikube для инициализации кластера Kubernetes:

    minikube start
    
    • Эта команда настраивает однодневный кластер Kubernetes на вашем локальном компьютере.
    • В зависимости от производительности вашей системы запуск Minikube может занять несколько минут.
  3. Проверьте, что Minikube запущен:

    Проверьте статус кластера Minikube:

    minikube status
    
    • Проверьте, чтобы компоненты, такие как kubelet и apiserver, были перечислены как Running (работающие).
    • Если кластер не запущен, запустите команду minikube start снова.

Если у вас возникли проблемы при запуске Minikube, используйте команду minikube delete для сброса среды при необходимости.

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

Сначала нам нужно создать развертывание, к которому мы применим HorizontalPodAutoscaler (автоматический масштабировщик горизонтальных подов).

  1. Создайте файл развертывания с именем deployment.yaml со следующим содержимым:
apiVersion: apps/v1
kind: Deployment
metadata:
  name: hpa-demo
spec:
  replicas: 1
  selector:
    matchLabels:
      app: hpa-demo
  template:
    metadata:
      labels:
        app: hpa-demo
    spec:
      containers:
        - name: hpa-demo
          image: nginx
          resources:
            limits:
              cpu: "1"
              memory: 512Mi
            requests:
              cpu: "0.5"
              memory: 256Mi
---
apiVersion: v1
kind: Service
metadata:
  name: hpa-demo
spec:
  selector:
    app: hpa-demo
  ports:
    - name: http
      port: 80
      targetPort: 80

В этом развертывании указан один репликат контейнера Nginx с ограничениями и запросами на использование ресурсов CPU и памяти.

  1. Создайте развертывание:
kubectl apply -f deployment.yaml

Создание HorizontalPodAutoscaler

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

  1. Создайте файл HorizontalPodAutoscaler с именем hpa.yaml со следующим содержимым:
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: hpa-demo
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: hpa-demo
  minReplicas: 1
  maxReplicas: 10
  metrics:
    - type: Resource
      resource:
        name: cpu
        target:
          averageUtilization: 1
          type: Utilization

В этом HorizontalPodAutoscaler указано, что мы хотим масштабировать развертывание hpa - demo так, чтобы количество реплик было от 1 до 10, и чтобы среднее использование CPU составляло 50%.

  1. Создайте HorizontalPodAutoscaler:
kubectl apply -f hpa.yaml

Тестирование HorizontalPodAutoscaler

Теперь, когда у нас есть HorizontalPodAutoscaler, мы можем протестировать его, создав нагрузку на развертывание.

  1. Включите metrics-server (сервер метрик)
minikube addons enable metrics-server
  1. Создайте под для генерации нагрузки:
kubectl run -i --tty load-generator --image=busybox /bin/sh
  1. В поде для генерации нагрузки выполните следующую команду, чтобы создать нагрузку на развертывание:
while true; do wget -q -O- http://hpa-demo; done
  1. Откройте другой терминал и проверьте статус HorizontalPodAutoscaler:
kubectl get hpa

Вы увидите, что количество копий hpa-demo было увеличено до 10. Вы можете проверить количество реплик с помощью следующей команды.

kubectl get pods -l app=hpa-demo
  1. Остановите генерацию нагрузки, нажав ctrl+c в поде для генерации нагрузки.

Резюме

В этом практическом занятии мы научились использовать HorizontalPodAutoscaler (автоматический масштабировщик горизонтальных подов) для автоматического масштабирования развертывания на основе использования ресурсов. Мы создали развертывание, создали HorizontalPodAutoscaler и протестировали его, создав нагрузку на развертывание. Мы также увидели, как HorizontalPodAutoscaler масштабировал развертывание в ответ на увеличение нагрузки.