tocdepth

2

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

В сценарии развернем Deployment с тремя подами, каждый из которых запускает контейнер с nginx. В Deployment укажем:

  • запросы на лимиты — 500m CPU и 1 ГиБ памяти;

  • запросы на ресурсы — 150m CPU и 100 МиБ памяти.

Далее создадим объект VerticalPodAutoscaler с режимом Auto.

Перед началом работы

  1. Создайте кластер с публичным IP и хотя бы одной группой узлов.

  2. Установите плагины Metrics Server и VPA.

  3. Подключитесь к кластеру.

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

  1. Создайте файл cloudru-nginx.yaml и скопируйте следующую спецификацию:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: cloudru-nginx
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: cloudru-nginx
      template:
        metadata:
          labels:
            app: cloudru-nginx
        spec:
          containers:
          - name: cloudru-nginx
            image: mk8s.registry.smk.sbercloud.dev/nginx:latest
            resources:
              limits:
                cpu: 500m
                memory: 1Gi
              requests:
                cpu: 150m
                memory: 100Mi
            command: ["/bin/sh"]
            args: ["-c", "while true; do timeout 0.5s yes >/dev/null; sleep 0.5s; done"]
    
  2. Выполните команду:

    kubectl create -f cloudru-nginx.yaml
    

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

    deployment.apps/cloudru-nginx created
    
  3. Подождите несколько минут, а затем посмотрите информацию о запущенных подах:

    kubectl get pods -l app=cloudru-nginx
    

    Результат должен выглядеть примерно так:

    NAME                             READY   STATUS    RESTARTS   AGE
    cloudru-nginx-435634s132-jwr37   1/1     Running   0          6m21s
    cloudru-nginx-435634s132-frn21   1/1     Running   0          5m09s
    cloudru-nginx-435634s132-qsj79   1/1     Running   0          3m44s
    
  4. Получите подробную информацию об одном из подов:

    kubectl describe pod <pod_name>
    

    Вместо <pod_name> укажите название любого пода из результата предыдущей команды.

    Результат должен выглядеть примерно так:

    ...
    
     cloudru-nginx:
        Container ID:  containerd://...
        Image:         mk8s.registry.smk.sbercloud.dev/nginx:latest
        Image ID:      sha256:
        Port:          <none>
        Host Port:     <none>
        Command:
          /bin/sh
        Args:
          -c
          while true; do timeout 0.5s yes >/dev/null; sleep 0.5s; done
        State:          Running
          Started:      Wed, 14 Aug 2024 10:19:12 -0400
        Ready:          True
        Restart Count:  0
        Limits:
          cpu:     500m
          memory:  1Gi
        Requests:
          cpu:        150m
          memory:     100Mi
        Environment:  <none>
    
    ...
    

    Установлены лимиты: CPU — 500m и RAM — 1 ГиБ и запросы на ресурсы: CPU — 150m и RAM — 100 МиБ.

Шаг 2. Создайте Vertical Pod Autoscaler

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

    apiVersion: autoscaling.k8s.io/v1
    kind: VerticalPodAutoscaler
    metadata:
      name: cloudru-vpa
    spec:
      targetRef:
        apiVersion: "apps/v1"
        kind: Deployment
        name: cloudru-nginx
      updatePolicy:
        updateMode: "Auto"
    

    Где:

    • spec.targetRef.name — название Deployment, для которого будет выполняться вертикальное автомасштабирование.

    • spec.updatePolicy.updateMode — режим обновления запросов на ресурсы.

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

    kubectl create -f cloudru-vpa.yaml
    

    В результате будет создан объект Vertical Pod Autoscaler для Deployment cloudru-nginx.

  3. Подождите несколько минут, пока cloudru-vpa пересоздаст поды.

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

    kubectl get --watch Pods -l app=cloudru-nginx
    
  4. Выполните команду:

    kubectl describe pod <pod_name>
    

    Где <pod_name> — название нового пода.

    Результат должен выглядеть примерно так:

    ...
    
    State:          Running
       Started:      Wed, 14 Aug 2024 10:21:22 -0400
    Ready:          True
    Restart Count:  0
    Limits:
       cpu:     1166m
       memory:  2560Mi
    Requests:
       cpu:     350m
       memory:  262144k
    Environment:  <none>
    ...
    

    Мы видим, что VPA изменил:

    • лимиты: CPU — 1166m и RAM — 2560 МиБ;

    • запросы на ресурсы: CPU — 350m и RAM — 262144 КиБ.

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

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

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

    kubectl delete vpa cloudru-vpa
    

    При удалении VPA Deployment остается c существующими запросами.

  2. Удалите Deployment:

    kubectl delete deployment cloudru-nginx
    

    Результат:

    deployment.apps "cloudru-nginx" deleted
    

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

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

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