tocdepth

2

Развертывание Deployment с горизонтальным масштабированием подов

В сценарии развернем Deployment с Apache и PHP, а затем зададим условия изменения количества подов в зависимости от нагрузки на виртуальный процессор:

  • Пороговая нагрузка на виртуальный процессор — 60% от запрошенного на запуск контейнера.

  • Минимальное количество реплик — 2.

  • Максимальное количество реплик — 7.

Шаг 1. Создайте Deployment

Сохраните следующую спецификацию в файл cloudru-php-apache.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: cloudru-php-apache
  namespace: default
spec:
  replicas: 3
  selector:
    matchLabels:
      run: cloudru-php-apache
  template:
    metadata:
      labels:
        run: cloudru-php-apache
    spec:
      containers:
      - name: hpa-example
        image: mk8s.registry.smk.sbercloud.dev/hpa-example
        ports:
        - containerPort: 80
        resources:
          requests:
            cpu: "250m"
---
apiVersion: v1
kind: Service
metadata:
  name: cloudru-php-apache
  labels:
    run: cloudru-php-apache
spec:
  ports:
  - port: 80
  selector:
    run: cloudru-php-apache

Обязательно укажите параметр resources.requests.cpu — запрос CPU для запуска контейнера, чтобы выполнять автоматическое масштабирование на основе использования ресурса в процентах.

Выполните команду:

kubectl create -f cloudru-php-apache.yaml

Если команда выполнена успешно, появится сообщение:

deployment.apps/cloudru-php-apache created

Шаг 2. Создайте Horizontal Pod Autoscaler одним из способов

Способ 1

Сохраните следующую спецификацию в файл cloudru-hpa.yaml:

apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
  name: cloudru-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: cloudru-php-apache
  minReplicas: 2
  maxReplicas: 7
  targetCPUUtilizationPercentage: 60

Затем выполните команду:

kubectl create -f cloudru-hpa.yaml
Способ 2

Выполните команду:

kubectl autoscale deployment cloudru-php-apache --cpu-percent=60 --min=2 --max=7

В результате будет создан Horizontal Pod Autoscaler для Deployment cloudru-php-apache.

При нагрузке на виртуальный процессор:

  • выше 60% от запрошенной нагрузки на каждый контейнер — количество подов будет постепенно увеличиваться, пока не достигнет семи;

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

Для горизонтального масштабирования подов можно использовать не только метрики CPU, но и RAM. В этом случае для создания HPA используйте следующую спецификацию:

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: cloudru-php-apache
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: cloudru-php-apache
  minReplicas: 2
  maxReplicas: 7
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 60
  - type: Resource
    resource:
      name: memory
      target:
        type: AverageValue
        averageValue: 500Mi

При увеличении нагрузки на виртуальный процессор выше 60% от запрошенной нагрузки на каждый контейнер и занятой оперативной памяти более 500 МиБ, количество подов будет увеличиваться, пока не достигнет семи подов.

При уменьшении нагрузки на виртуальный процессор ниже 60% от запрошенной нагрузки на каждый контейнер и занятой оперативной памяти менее 500 МиБ, количество подов будет уменьшаться, пока не достигнет двух подов.

Шаг 3. Получите список HPA в кластере

Выполните команду:

kubectl get hpa

Ответ будет содержать следующее:

NAME                 REFERENCE                       TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
cloudru-php-apache   Deployment/cloudru-php-apache   0%/60%    2         7        3          121s

Шаг 4. Создайте нагрузку для веб-сервера

Выполните команду:

kubectl run -i --tty load-generator --rm --image=busybox --restart=Never -- /bin/sh -c "while sleep 0.01; do wget -q -O- http://cloudru-php-apache; done"

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

kubectl get hpa cloudru-php-apache --watch

Ответ будет содержать следующее:

NAME                 REFERENCE                       TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
cloudru-php-apache   Deployment/cloudru-php-apache   200%/60%    2         7        3          5m34s

Так как потребление процессора возросло до 200% от запрошенного, количество реплик было увеличено до 5:

NAME                 REFERENCE                       TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
cloudru-php-apache   Deployment/cloudru-php-apache   200%/60%    2         7        5          7m

Увеличение количества подов может занять несколько минут.

Шаг 5. Остановите нагрузку для веб-сервера

Чтобы завершить генерацию нагрузки, в терминале, где вы создали под, запускающий образ busybox, нажмите Ctrl + C.

Затем через несколько минут выполните команду:

kubectl get hpa cloudru-php-apache --watch

Результат:

NAME                 REFERENCE                        TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
cloudru-php-apache   Deployment/cloudru-php-apache    0%/60%    2         7        1          10m

Шаг 6. Удалите ресурсы

Если вы закончили работать с HPA, удалите созданные ресурсы.

  1. Удалите cloudru-hpa:

    kubectl delete cloudru-hpa cloudru-php-apache
    

    При удалении HPA Deployment остается в существующем масштабе и не возвращается к количеству реплик, указанному в исходной спецификации Deployment.

    Если необходимо, измените количество реплик, например, до трех:

    kubectl scale deployment cloudru-php-apache --replicas=3
    
  2. Удалите Deployment:

    kubectl delete deployment cloudru-php-apache
    

    Результат:

    deployment.apps "cloudru-php-apache" deleted
    

    Поды удалятся вместе с Deployment.

  3. Если необходимо, удалите кластер.

Запустили Evolution free tier
для Dev & Test
Получить