nav-img
Evolution

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

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

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

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

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

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

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

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

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

Шаг 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. Если необходимо, удалите кластер.