Как задеплоить приложение (step-by-step)
Создание нагрузок в неймспейсе и проверка статуса развёртывания.
Развёртывание приложения выполняется через создание объектов Kubernetes в разделе Нагрузки выбранного неймспейса. Рабочая нагрузка (workload) в Kubernetes запускается в подах, а для production-сценариев подами обычно управляют контроллеры: они поддерживают нужное количество подов, пересоздают их при сбоях и применяют изменения из манифеста.
Выберите тип нагрузки под задачу:
| Тип нагрузки | Когда использовать |
|---|---|
| Deployment | Stateless-приложения, rolling update, rollback, масштабирование реплик. Deployment управляет ReplicaSet, а ReplicaSet поддерживает нужное количество подов. |
| StatefulSet | Stateful-сервисы, которым нужны устойчивые имена подов, порядок запуска/обновления и постоянные тома через PersistentVolumeClaim. |
| DaemonSet | Агенты и демоны, которые должны запускаться на каждом подходящем узле: мониторинг, логирование, сетевые компоненты. |
| Job | Разовая задача, которая должна выполниться до завершения. |
| CronJob | Периодическая задача по cron-расписанию. |
| Pod | Разовые или отладочные случаи. Для production используйте Deployment, StatefulSet, DaemonSet, Job или CronJob. |
| ReplicaSet | Обычно создаётся и управляется Deployment. В интерфейсе доступен для просмотра, но параметры ReplicaSet редактируют через Deployment. |
Официальное описание объектов workload см. в документации Kubernetes: Workloads.
Что подготовить до деплоя
Перед созданием нагрузки убедитесь, что контейнерный образ приложения собран и доступен из кластера.
- Опубликуйте образ в ваш внутренний registry.
- Используйте стабильные теги версий вместо
latestв production: например,v1.0.0, semver или git-sha. - Если ваш приватный registry не требует аутентификации, достаточно указывать его адрес в манифестах нагрузки. Для настройки аутентификации приватного registry см. Как подключить приватный registry.
- Если в кластере включены политики проверки подписей образов, подпишите образ и передайте публичный ключ в политику. Подробнее — Подпись контейнеров и проверка образов.
Шаг 1. Выберите кластер и неймспейс
- В левом меню выберите нужный кластер.
- Выберите целевой неймспейс из списка доступных (отображаются только неймспейсы, к которым у вас есть права доступа).
Шаг 2. Создайте нагрузку
Перейдите в раздел Нагрузки и выберите тип объекта. На вкладке Deployments отображается перечень созданных деплойментов в контексте неймспейса. В списке Deployments можно удалить один объект или несколько сразу. Как выбрать объекты и подтвердить удаление — в разделе Множественное удаление.
Deployment
Deployment управляет и масштабирует поды приложения: создаёт ReplicaSet, поддерживает нужное количество реплик, применяет обновления, позволяет откатывать версии и восстанавливает поды при сбоях. Это основной вариант для stateless-приложений.
- Нажмите + Добавить Deployment.
Скриншот: создание Deployment

- Заполните описание деплоймента.
Блок «Управление развертыванием»:
- количество реплик — по умолчанию 1;
- тип деплоймента — по умолчанию RollingUpdate;
- приостановлен ли деплоймент — по умолчанию значение не задано;
- для типа RollingUpdate — максимальное значение недоступных и дополнительных реплик, по умолчанию 25%;
- ProgressDeadlineSeconds — время ожидания развертывания в секундах, прежде чем оно будет признано завершённым с ошибкой; по умолчанию 600 сек (10 минут);
- RevisionHistoryLimit — количество ReplicaSets для возможности отката; по умолчанию 10.
Скриншот: шаблон пода

Блок «Шаблон пода» (Pod template):
- использовать ли hostPID — по умолчанию не выбрано;
- использовать ли сеть хоста — по умолчанию не выбрано;
- Image Pull Secrets — выберите секреты из выпадающего списка (секреты создаются на вкладке Хранилище раздела Неймспейс);
- приоритет пода относительно других подов в кластере;
- имя хоста контейнера;
- Tolerations — нажмите + и заполните поля;
- узлы — нажмите + в селекторе узлов;
- ServiceAccountName — выберите из выпадающего списка;
- подключение токена учётной записи — по умолчанию не задано.
Скриншот: init-контейнеры

Блоки «Контейнеры инициализации (Init контейнеры)» и «Контейнеры»:
- имя контейнера;
- образ;
- Image Pull Policy — по умолчанию IfNotPresent;
- команды и аргументы (при необходимости);
- порты — нажмите + для добавления;
Скриншот: порты

- вычислительные ресурсы — requests и limits для CPU (в CPU или m) и Memory (B, Ki, Mi, Gi);
Скриншот: requests и limits

- Volume mounts — нажмите +;
Скриншот: volume mounts

- переменные окружения — нажмите +.
Скриншот: переменные окружения

Подробнее о параметрах шаблона пода, контейнеров, Security context и томов — на вкладке Pod ниже.
- Нажмите Добавить.
Просмотр Deployment
На странице просмотра доступны вкладки:
- Deployment — сведения о дате создания, статусе, состоянии, типе развёртывания, признаке паузы, селекторе подов, количестве реплик и метриках CPU/Memory за последний час;
- Шаблон пода — контейнеры, init-контейнеры и volumes;
- HPA — автоматическое горизонтальное масштабирование;
- VPA — автоматическое вертикальное масштабирование запросов и лимитов CPU/Memory;
- ReplicaSets — список ReplicaSet, созданных Deployment, с количеством подов, статусом, образом и номером версии;
- Pods — список подов с фильтрами по имени, неймспейсу, статусу, родительскому объекту, узлу и QoS;
- Безопасность — результаты сканирования образов и анализа конфигураций, если соответствующие модули установлены в кластере;
- Лейблы и аннотации, События, Манифест.
На вкладке Deployment доступны кнопки Управление горизонтальным автомасштабированием (переход на вкладку HPA) и Управление вертикальным автомасштабированием (переход на вкладку VPA). Вкладка VPA и кнопка перехода к ней отображаются при наличии права на просмотр VPA.
При наличии прав на изменение Deployment вы можете перезапустить его поды (Rollout Restart) или вернуть к предыдущей версии (Rollout Undo).
Нажатие на кнопку Перезапустить поды запустит команду rollout restart deployment для подов нагрузки. При этом будет выполнено постепенное завершение и запуск новых экземпляров (подов) без прерывания работы Deployment. При этом сами настройки Deployment не меняются. Перед запуском подтвердите действие. Повторный перезапуск недоступен в процесс перезапуска подов или когда обновление Deployment стоит на паузе.
Откатить к предыдущей версии - возвращает Deployment к одной из сохранённых версий (ревизий), восстанавливая ранее известное стабильное состояние приложения без простоя. В окне Rollout Undo <имя> выберите необходимую Версию, которую требуется восстановить. В списке у каждой строки номер ревизии, имя ReplicaSet и дата его создания. Если версия одна, поле Версия уже заполнено.
Версию хранит ReplicaSet: номер ревизии записан в его аннотации deployment.kubernetes.io/revision. Новая версия появляется, только когда меняется шаблон пода. Изменение числа реплик не приводит к созданию новой версии. Перезапуск подов не меняет образ и остальные настройки, но Kubernetes считает его изменением шаблона и поэтому создаётся ReplicaSet со следующим номером. На вкладке ReplicaSets версия, на которой Deployment работает сейчас, отмечена как Текущая.
Номер при откате не уменьшается1. Kubernetes подставляет шаблон выбранной ревизии и записывает откат как новую версию. Количество сохраняемых версий ReplicaSet задаётся revisionHistoryLimit нагрузки, по умолчанию установлено 10.
1 Пример: Deployment с одним подом сразу после создания имеет версию 1 и один ReplicaSet. После перезапуска подов появляется второй ReplicaSet с версией 2, она становится текущей, а в окне отката можно выбрать только версию 1. После отката на версию 1 приложение снова работает с первым шаблоном, но тот же ReplicaSet получает следующий номер и отмечается как текущая версия 3. Версии 1 в списке больше нет и следующий откат предложит версию 2. Каждый следующий откат снова увеличивает номер ревизии.
Скриншот: шаблон пода Deployment

Скриншот: ReplicaSets Deployment

Скриншот: безопасность Deployment

StatefulSet
StatefulSet разворачивает набор подов с устойчивыми идентификаторами и сохранением данных при перезапуске; гарантирует уникальные имена и устойчивую сетевую идентичность подов.
- Нажмите + Создать StatefulSet.
- В блоке Описание задайте имя StatefulSet.
- При необходимости определите лейблы и совпадающие лейблы подов в блоке Селектор подов.
- Задайте спецификацию:
- количество реплик;
- количество партиций;
- minReadySeconds;
- revisionHistoryLimit — по умолчанию 10;
- podManagementPolicy: OrderedReady (по умолчанию) или Parallel;
- serviceName;
- политика хранения PersistentVolumeClaim — whenDeleted и whenScaled (по умолчанию Retain, также доступно Delete).
- Определите шаблоны PersistentVolumeClaim: нажмите +, задайте имя, Access Modes (по умолчанию ReadWriteOnce), Storage Class Name, размер (B, Ki, Mi, Gi) и нажмите Сохранить.
Доступные режимы доступа PVC:
- ReadWriteOnce (RWO) — чтение и запись только с одного узла;
- ReadOnlyMany (ROX) — только чтение с нескольких узлов;
- ReadWriteMany (RWX) — чтение и запись с нескольких узлов;
- ReadWriteOncePod (RWOP) — чтение и запись только одним подом.
Storage Class Name указывает класс хранилища, например, standard, fast или slow. Размер PVC задаётся в стандартных единицах Kubernetes: B, Ki, Mi, Gi.
Скриншот: шаблон PVC

- Определите init-контейнеры и/или контейнеры, шаблон пода; при необходимости назначьте Volumes. Параметры шаблона пода и контейнеров — как при создании Pod (см. вкладку Pod ниже).
Просмотр и редактирование StatefulSet
На странице просмотра доступны вкладки StatefulSet, Pods, Шаблон пода, VPA, Шаблоны PVC, Безопасность, Лейблы и аннотации, События, Манифест. Во вкладке StatefulSet отображаются partition, minReadySeconds, revisionHistoryLimit, podManagementPolicy, serviceName, политика хранения PVC, селектор подов и метрики CPU/Memory за последний час. На вкладке StatefulSet доступна кнопка Управление вертикальным автомасштабированием — переход на вкладку VPA. Вкладка VPA и кнопка отображаются при наличии права на просмотр VPA.
При наличии прав на изменение StatefulSet вы можете перезапустить его поды (Rollout Restart) или вернуть предыдущую версию (Rollout Undo).
Нажатие на кнопку Перезапустить поды запустит постепенное завершение и запуск новых подов без прерывания работы StatefulSet. При этом имена подов сохраняются, настройки самого StatefulSet не меняются. Перед запуском подтвердите действие. Повторный перезапуск недоступен, пока идёт перезапуск подов или когда обновление StatefulSet стоит на паузе.
Откатить к предыдущей версии возвращает StatefulSet к одной из сохранённых версий (ревизий) и восстанавливает ранее известное стабильное состояние приложения без простоя. Ревизию хранит ресурс ControllerRevision. Версию для восстановления возможно выбрать в окне Rollout Undo <имя>: у каждой строки номер, имя ревизии и дата создания. Номер при откате не уменьшается и выбранный шаблон записывается как следующая ревизия.
Скриншот: страница StatefulSet

Редактировать можно спецификацию StatefulSet, политику хранения PVC, шаблон пода, init-контейнеры, контейнеры и volumes. Также можно изменить YAML на вкладке Манифест: после изменения выполните Проверить, затем сохраните результат.
DaemonSet
DaemonSet обеспечивает запуск пода на каждом узле кластера; количество реплик не задаётся.
- Нажмите + Создать DaemonSet.
- В блоке Описание задайте имя DaemonSet.
- При необходимости определите лейблы и совпадающие лейблы подов в блоке Селектор подов.
- Задайте спецификацию:
- minReadySeconds — по умолчанию 0;
- revisionHistoryLimit — по умолчанию 10;
- максимальное количество недоступных и дополнительных подов.
- Определите init-контейнеры и/или контейнеры, шаблон пода; при необходимости назначьте Volumes. Параметры — как при создании Pod (см. вкладку Pod ниже).
Скриншот: страница DaemonSet

Просмотр и редактирование DaemonSet
На странице просмотра доступны вкладки DaemonSet, Pods, Шаблон пода, Безопасность, Лейблы и аннотации, События, Манифест. Во вкладке DaemonSet отображаются дата создания, статус, состояние, minReadySeconds, revisionHistoryLimit, максимальное количество недоступных и дополнительных подов, селектор подов и метрики CPU/Memory за последний час.
При наличии прав на изменение DaemonSet вы можете перезапустить его поды (Rollout Restart) или вернуть предыдущую версию (Rollout Undo).
Нажатие на кнопку Перезапустить поды запустит постепенное завершение и запуск новых подов на узлах, где работает DaemonSet, без прерывания его работы. Сами настройки DaemonSet не меняются. Перед запуском подтвердите действие. Повторный перезапуск недоступен, пока идёт перезапуск подов или когда обновление DaemonSet стоит на паузе.
Откатить к предыдущей версии возвращает DaemonSet к одной из сохранённых версий (ревизий) и восстанавливает ранее известное стабильное состояние приложения без простоя. Отдельного списка ReplicaSet у DaemonSet нет: ревизию хранит ресурс ControllerRevision. Версию для восстановления выберите в окне Rollout Undo <имя>: у каждой строки номер, имя ревизии и дата создания. Если в списке одна версия, поле Версия предзаполнено. Номер при откате не уменьшается1: выбранный шаблон записывается как следующая ревизия.
1 Если были версии 1 и 2 и вы откатились с 2 на 1, эта ревизия становится версией 3. Следующий откат предложит версию 2.
Редактировать можно спецификацию DaemonSet, шаблон пода, init-контейнеры, контейнеры и volumes. YAML доступен на вкладке Манифест; после изменения выполните проверку и сохраните изменения.
Pod
Pod — минимальная вычислительная единица (один или несколько контейнеров). Отдельные поды подходят для разовых или отладочных задач; для production рекомендуется управлять подами через Deployment, StatefulSet или DaemonSet.
На странице Pods отображаются имя пода, отношение работающих контейнеров к общему количеству контейнеров, количество рестартов, дата создания, неймспейс, статус, родительский объект, узел, QoS и лейблы. Доступны фильтры по имени, неймспейсу, статусу, родительскому объекту, узлу и QoS. В списке подов можно удалить один под или несколько сразу. Как выбрать объекты и подтвердить удаление — в разделе Множественное удаление.
Скриншот: список Pods

- Нажмите + Добавить Pod.
Скриншот: создание Pod

- В блоке Спецификация пода задайте hostPID, сеть хоста, политику перезапуска, Image Pull Secrets, Tolerations, селектор узлов, ServiceAccountName и другие параметры.
Политики перезапуска:
- Always — контейнер перезапускается после любого завершения; значение по умолчанию;
- OnFailure — контейнер перезапускается только при завершении с ошибкой;
- Never — завершённый контейнер не перезапускается автоматически.
При настройке Tolerations можно указать ключ и значение taint узла, оператор Exists или Equal, эффект NoSchedule, PreferNoSchedule, NoExecute или Любой, а также tolerationSeconds. Если выбран эффект NoExecute, tolerationSeconds задаёт период, после которого под будет вытеснен с узла. По умолчанию для этого случая используется 5 минут.
Скриншот: tolerations

- Настройте Init контейнеры, Контейнеры и Volumes.
Скриншот: шаблон пода

Security context пода
На уровне пода можно настроить параметры безопасности, которые применяются ко всем контейнерам:
fsGroup— группа файловой системы для изменения владельца и прав файлов при монтировании тома;- политика изменения
fsGroup: OnRootMismatch или Always. Политика не применяется к томамsecret,configMapиemptyDir; runAsGroup,runAsUser,runAsNonRoot;supplementalGroups;- параметры ядра
sysctl. При небезопасныхsysctlпод не будет запущен, пока хотя бы на одном узле не будут включены эти параметры; - профиль Seccomp: профиль по умолчанию, пользовательский профиль на узле или отключение профиля. Подробнее — Seccomp.
Скриншот: Security context пода

Init-контейнеры и контейнеры
В блоках Init контейнеры и Контейнеры задайте:
- имя контейнера и образ;
- рабочий каталог (
Workdir), команды и аргументы; - Image Pull Policy:
Always,IfNotPresentилиNever; - порты, переменные окружения, requests и limits для CPU/Memory;
- mounts томов:
mountPath,mountPropagation,subPath,subPathExpr; - Security context контейнера.
Security context контейнера переопределяет настройки, заданные на уровне пода. Если включён привилегированный режим (privileged: true), контейнер получает все Linux capabilities; профиль Seccomp для такого контейнера в графическом интерфейсе задать нельзя.
Скриншот: Security context контейнера

Для ресурсов контейнера задавайте requests и limits. Если лимит памяти не указан и в неймспейсе нет лимита по умолчанию, контейнер может использовать всю доступную память узла. Если сумма requests памяти контейнеров пода превышает память узла, под не будет запущен на этом узле.
Volumes
В блоке Volumes добавьте тома, которые будут смонтированы в контейнеры:
- ConfigMap — данные конфигурации, при необходимости
defaultMode; - DownwardAPI — передача в контейнеры сведений о Pod: аннотации, метки, имя, namespace;
- EmptyDir — эфемерный том для чтения и записи несколькими контейнерами Pod; можно выбрать medium и размер;
- PersistentVolumeClaim — подключение существующего PVC, при необходимости только для чтения;
- Secret — конфиденциальные данные, монтируется read-only;
- HostPath — файл или каталог с файловой системы узла.
Скриншот: параметры ConfigMap volume

Скриншот: параметры DownwardAPI volume

Скриншот: параметры EmptyDir volume

Скриншот: параметры PVC volume

Скриншот: параметры Secret volume

Скриншот: параметры HostPath volume

Просмотр Pod
На странице Pod доступны вкладки Pod, Контейнеры, Volumes, Безопасность, Лейблы и аннотации, События, Манифест, Терминал, Логи.
QoS пода определяется по requests и limits контейнеров:
- Guaranteed — у каждого контейнера request CPU/Memory равен limit CPU/Memory;
- Burstable — хотя бы у одного контейнера есть request или limit;
- BestEffort — ни у одного контейнера нет requests и limits.
QoS учитывается при вытеснении подов с узла при Node Pressure: сначала вытесняются BestEffort, затем Burstable, затем Guaranteed.
Вкладка Терминал отображается, если хотя бы в одном контейнере есть shell. Bash не поддерживается. Корректная работа терминала гарантируется только в Google Chrome.
Скриншот: терминал Pod

На вкладке Логи можно выбрать контейнер, включить или отключить автообновление, временные метки и предыдущий лог, задать количество записей, диапазон времени, поиск по тексту и скачать .log файл.
Скриншот: логи Pod

Job
Job управляет выполнением параллельных или одноразовых задач с повторным запуском при сбоях.
- Нажмите + Добавить Job.
- Заполните Описание, Шаблон задачи (Template Job) и сведения о контейнере. Параметры init-контейнеров, контейнеров и шаблона пода — как при создании Pod (см. вкладку Pod ниже).
- Нажмите Сохранить.
Скриншот: страница Job

На странице просмотра Job доступны вкладки Job, Pods, Шаблон пода, Лейблы и аннотации, События, Безопасность, Манифест. Во вкладке Job отображаются состояние, статус, lastScheduleTime, lastSuccessfulTime, completions, completionMode, ttlSecondsAfterFinished, parallelism, backoffLimit, activeDeadlineSeconds, селектор подов и метрики CPU/Memory за последний час.
CronJob
CronJob запускает периодические задачи по cron-расписанию.
- Нажмите + Добавить CronJob.
- Заполните Описание, Спецификацию CronJob, Шаблон задачи (Template Job) и сведения о контейнере. Параметры контейнеров — как при создании Pod (см. вкладку Pod ниже).
- Нажмите Сохранить.
Скриншот: страница CronJob

На странице CronJob доступны вкладки CronJob, Pods, Jobs, Шаблон Job, Лейблы и аннотации, События, Безопасность, Манифест. Во вкладке CronJob отображаются расписание, concurrencyPolicy, startingDeadlineSeconds, successfulJobsHistoryLimit, failedJobsHistoryLimit, состояние Приостановлено/Не приостановлено, селектор подов и метрики CPU/Memory за последний час.
Вкладка Jobs содержит Jobs, созданные CronJob, со статусом и образом.
ReplicaSet поддерживает заданное количество идентичных подов и обычно создаётся Deployment. В большинстве сценариев не создавайте и не редактируйте ReplicaSet напрямую: изменяйте Deployment, который им управляет.
На странице ReplicaSets отображаются наборы реплик в неймспейсе. Если ReplicaSet входит в Deployment, его параметры на странице ReplicaSet недоступны для редактирования.
Скриншот: страница ReplicaSet

На странице просмотра доступны вкладки ReplicaSet, Pods, Шаблон пода, Безопасность, Лейблы и аннотации, События, Манифест. Во вкладке ReplicaSet отображаются дата создания, статус, родительский объект, количество реплик, minReadySeconds, селектор подов и метрики CPU/Memory за последний час. На вкладке Манифест YAML можно просмотреть и скопировать.
Шаг 3. Проверьте статус развёртывания
- Откройте созданную нагрузку в разделе Нагрузки.
- Перейдите на вкладку Pods — поды должны перейти в статус Running (или Completed для Job).
Скриншот: вкладка Pods у Deployment

На вкладке Pods доступны фильтрация по имени, неймспейсу, статусу, родительскому объекту, узлу и QoS; сортировка по дате создания и количеству рестартов. Возможные значения статуса в фильтре: Running, Pending, Terminating, CrashLoopBackOff, Completed, Failed, Unknown. Нажатие на строку пода открывает страницу просмотра пода. На вкладке Pods у Deployment, ReplicaSet, StatefulSet и DaemonSet можно удалить один под или несколько сразу. Как выбрать объекты и подтвердить удаление — в разделе Множественное удаление.
Цветовая индикация статуса пода:
- зелёная — RunningПод назначен на узел, все контейнеры созданы., CompletedКонтейнеры завершили работу с кодом выхода 0. Так отображается успешно закончившийся под, например, под Job., SucceededВсе контейнеры завершились успешно и не перезапускаются.;
- жёлтая — PendingОжидание планирования пода на узел или загрузки образов. Один или несколько контейнеров ещё не готовы к запуску.;
- красная — TerminatingДля пода запрошено удаление, kubelet выполняет штатное завершение. Пока объект не удалён из API, в статусе отображается Terminating., CrashLoopBackOffКонтейнер завершается с ошибкой и перезапускается заново. Kubernetes увеличивает паузу между попытками запуска., FailedВсе контейнеры завершились. При этом как минимум один из которых завершился с ошибкой.;
- серая — UnknownНе удалось получить состояние пода. Обычно это означает ошибку связи с узлом, на котором должен выполняться под..
- При необходимости посмотрите логи на вкладке Логи страницы пода или события на вкладке События созданной нагрузки.
Подробнее — Траблшутинг нагрузок.
Шаг 4. Изменение и масштабирование
Для автоматического масштабирования доступны два механизма:
- HPA (Horizontal Pod Autoscaler) — изменяет количество подов по метрикам CPU, Memory или кастомным метрикам. В платформе настраивается для Deployment.
- VPA (Vertical Pod Autoscaler) — подбирает requests и limits контейнеров на основе данных потребления CPU и Memory. В платформе настраивается для Deployment и StatefulSet.
Для работы HPA по CPU/Memory и для расчёта рекомендаций VPA в кластере должны собираться метрики:
- установлен
shturval-metrics-collector; - если нет доступа к
shturvalserviceconfigs, наличие сервиса можно проверить по графикам утилизации CPU и RAM в интерфейсе нагрузки.
Во избежание конфликтов рекомендуется использовать один способ автомасштабирования для нагрузки: горизонтальное (HPA) или вертикальное (VPA). Если нужны оба механизма, настройте в HPA и VPA контроль разных ресурсов. Например: HPA по CPU и VPA по Memory, либо HPA по кастомной метрике, а VPA по CPU и Memory. Если HPA использует CPU и Memory, используйте VPA в режиме Off или Initial.
Настройте масштабирование в графическом интерфейсе или примените манифест.
HPA и VPA доступны на вкладках нагрузки, а также в разделе Администрирование кластера или неймспейса на странице Кастомные ресурсы:
- HPA — API-группа
autoscaling.k8s.io, ресурс HorizontalPodAutoscaler; - VPA — API-группа
autoscaling.k8s.io, ресурс VerticalPodAutoscaler.
Масштабирование Deployment или StatefulSet
На вкладке Deployment или StatefulSet страницы просмотра найдите блок количество реплик, измените количество реплик и сохраните изменения.
Скриншот: страница Deployment

HPA
В графическом интерфейсе объект HPA встроен вкладкой на страницу Deployment. На вкладке Deployment кнопка Управление горизонтальным автомасштабированием открывает вкладку HPA. Объект создаётся с автоматически сгенерированным именем.
При превышении целевых значений количество подов увеличится в пределах заданного диапазона реплик; при снижении нагрузки — уменьшится. Если метрик несколько, число подов считается по каждой, и берётся большее.
Блок реплик
| Поле | Параметр в манифесте | Описание |
|---|---|---|
| Минимально реплик | spec.minReplicas | Обязательное. Меньше этого числа подов не будет. |
| Максимально реплик | spec.maxReplicas | Обязательное. Больше этого числа подов не будет. |
| Фактически реплик | status.currentReplicas | Сколько подов работает сейчас. Только просмотр. |
| Состояние | status.conditions | Готов ли HPA масштабировать нагрузку. Только просмотр. |
Правила политики увеличения репликspec.behavior.scaleUp и Правила политики уменьшения репликspec.behavior.scaleDown ограничивают, как быстро меняется число реплик. Если правила не заданы, используются значения Kubernetes по умолчанию. У обоих блоков одни и те же поля.
| Поле | Параметр в манифесте | Описание |
|---|---|---|
| Тип допустимого изменения политики | selectPolicy | Какое правило применить, если их несколько. По умолчанию MaxНаибольшее количество изменения реплик: выбирается правило, которое сильнее меняет число подов. Также доступны MinНаименьшее количество изменения реплик: выбирается правило, которое слабее меняет число подов, DisabledПолностью выключает масштабирование. В правилах уменьшения HPA не уберёт поды, даже если нагрузка упала; в правилах увеличения — не добавит, даже если нагрузка выросла. Другое направление при этом может работать. Пример: Disabled в уменьшении — реплики могут расти, но не сжаться. |
| Количество разрешенных изменений | policies[].value | Сколько подов или какой процент можно добавить или убрать за период. |
| Единицы изменения | policies[].type | Количество — число в подах, % — в процентах от текущего числа подов. |
| Период времени разрешенных действий (сек) | policies[].periodSeconds | Промежуток, за который число подов меняется не больше чем на заданное количество. Пример: 4 и Количество при 60 секундах — за минуту можно добавить или убрать не больше 4-х подов. От 1 до 1800 (30 минут). |
| Стабилизационный интервал (сек) | stabilizationWindowSeconds | Период, в который перепроверяется нагрузка до масштабирования, чтобы не реагировать на случайный короткий скачок. От 0 до 3600 секунд (час). Если не задано: при увеличении 0 (не ждать, добавить сразу), при уменьшении 300 секунд (5 минут). Пример: уменьшение, интервал 300, работает 8 подов. На минуту посетителей стало мало, хватило бы 3. HPA подождёт: если нагрузка быстро вернётся — останется 8; если в течение 5 минут нагрузка низкая — уменьшит. |
Можно задать несколько правил (Добавить политику) и удалить лишнее.
Скриншот: HPA

Целевые значения метрикКакую загрузку CPU и памяти считать нормой. Если сейчас выше — HPA добавит поды, если ниже — уберёт можно задать для всех подов нагрузки (вкладка Pod) и для отдельных контейнеров (вкладка Containers) одновременно.
Вкладка PodСредняя загрузка CPU и памяти по всем подам нагрузки. По ней HPA понимает, хватает подов или нет
| Поле | Параметр в манифесте | Описание |
|---|---|---|
| CPU | resource.name: cpu | До какой загрузки CPU увеличивать число подов. Если Не задано, CPU не учитывается. UtilizationПроцент от requests контейнеров — в процентах, AverageValueСреднее абсолютное значение по подам — абсолютное значение. |
| Memory | resource.name: memory | До какой загрузки Memory увеличивать число подов. Если Не задано, Memory не учитывается. UtilizationПроцент от requests контейнеров — в процентах, AverageValueСреднее абсолютное значение по подам — абсолютное значение. |
| Значение | resource.target.averageUtilization или resource.target.averageValue | Какую загрузку CPU или памяти держать. Для Utilization — в процентах от requests, для AverageValue — абсолютное значение. |
| Фактические значения метрик | status.currentMetrics | Какая загрузка сейчас. Только просмотр. |
Скриншот: целевые значения метрик HPA для пода

Вкладка ContainersЗагрузка выбранного контейнера. Нужна, если в поде несколько контейнеров и важно следить за одним из них
На вкладке Containers метрики контейнеров необязательны. Чтобы задать их, нажмите Добавить метрики контейнера. Пока ничего не добавлено, отображается Контейнерные метрики не настроены. Для каждого контейнера можно задать только один набор метрик. Набор можно Удалить.
| Поле | Параметр в манифесте | Описание |
|---|---|---|
| Container | containerResource.container | Обязательное. Какой контейнер измерять — имя из шаблона пода. |
| CPU | containerResource.name: cpu | До какой загрузки CPU этого контейнера увеличивать число подов. Если Не задано, CPU не учитывается. UtilizationПроцент от requests контейнера — в процентах, AverageValueСреднее абсолютное значение по этому контейнеру во всех подах — абсолютное значение. |
| Memory | containerResource.name: memory | До какой загрузки Memory этого контейнера увеличивать число подов. Если Не задано, Memory не учитывается. UtilizationПроцент от requests контейнера — в процентах, AverageValueСреднее абсолютное значение по этому контейнеру во всех подах — абсолютное значение. |
| Значение | containerResource.target.averageUtilization или containerResource.target.averageValue | Какую загрузку этого контейнера держать. Для Utilization — в процентах от requests, для AverageValue — абсолютное значение. |
Скриншот: контейнерные метрики HPA не настроены

Скриншот: целевые значения метрик HPA для контейнера

VPA
VPA (Vertical Pod Autoscaler) изменяет размер запросов и лимитов CPU и Memory контейнеров на основе данных потребления CPU и Memory. В интерфейсе объект VPA встроен вкладкой на страницы Deployment и StatefulSet. Для одной нагрузки можно создать только один объект VPA.
Вкладка VPA и кнопка Управление вертикальным автомасштабированием отображаются при наличии права на просмотр VPA. Кнопка на вкладке Deployment или StatefulSet открывает вкладку VPA.
На вкладке VPA задайте, когда применять подобранные ресурсы и в каких рамках их считать.
Политика автомасштабированияКогда и как VPA применяет подобранные CPU и память к подам: только посмотреть рекомендации или менять запросы у живых подов
| Поле | Параметр в манифесте | Описание |
|---|---|---|
| Режим обновления | spec.updatePolicy.updateMode | Как применять рекомендации к подам. По умолчанию AutoЗадаёт запросы при создании пода и может пересоздать уже работающий под, если запросы сильно отличаются от рекомендации. Сейчас это то же, что Recreate. Также доступны RecreateЗадаёт запросы при создании пода. Если у работающего пода запросы сильно отличаются от рекомендации — удаляет под, контроллер создаёт новый уже с нужными запросами, InitialЗадаёт запросы только когда под создаётся. У уже работающих подов ничего не меняет, OffЗапросы подов не меняет. Рекомендации всё равно считает — можно посмотреть и ничего не применять. |
| Минимальное количество реплик | spec.updatePolicy.minReplicas | Сколько подов должно остаться в работе при масштабировании. Если живых меньше — масштабирование не запустится. |
| Требования к вытеснению Pods | spec.updatePolicy.evictionRequirements | Дополнительные условия, без которых VPA не пересоздаст под. Можно не задавать. Если правил несколько — должны выполниться все. Не больше четырёх; одинаковые пары «ресурс + условие» задать нельзя. |
| Ресурсы | evictionRequirements[].resources | К каким ресурсам относится условие: CPU, Memory или одновременно: CPU и Memory. Если выбраны CPU и Memory, достаточно, чтобы условие выполнилось хотя бы по одному. |
| Условия вытеснения | evictionRequirements[].changeRequirement | Когда VPA может пересоздать под. Выше запрошенногоРекомендуемые ресурсы больше, чем сейчас в запросах — ресурсы пода увеличивают или Ниже запрошенногоРекомендуемые ресурсы меньше, чем сейчас в запросах — ресурсы пода уменьшают. |
Для StatefulSet, если приложение не готово к перерывам в работе (например, база данных без высокой доступности), используйте режимы Initial или Off: VPA не будет пересоздавать поды и ограничится рекомендациями или назначением запросов при обновлении нагрузки.
Скриншот: политика автомасштабирования VPA

Политика ресурсовПолитика для подбора CPU и памяти: не меньше и не больше указанных значений и какие ресурсы изменять. Можно задать общее правило для всех контейнеров и отдельно — для конкретного. Правило контейнера важнее общего правила.
Вкладка ПодОбщее правило для всех контейнеров, у которых нет своей политики
| Поле | Параметр в манифесте | Описание |
|---|---|---|
| Разрешено минимально (CPU, Memory) | minAllowed.cpu, minAllowed.memory | Нижняя граница CPU и память, которые VPA может подобрать. Даже если контейнер потребляет меньше — ниже этого значения не опустится при масштабировании. Если не задано — ограничения нет. Для CPU: CPU, m; для Memory: Gi, Mi, Ki, B. |
| Разрешено максимально (CPU, Memory) | maxAllowed.cpu, maxAllowed.memory | Верхняя граница CPU и память, которые VPA может подобрать. Даже если контейнер потребляет больше — выше этого значения не поднимется при масштабировании. Если не задано — ограничения нет. Для CPU: CPU, m; для Memory: Gi, Mi, Ki, B. |
| Контролирование request/limits | controlledValues | Что менять. По умолчанию Limits и Requests — и запросы, и лимиты (лимит меняется пропорционально запросу). Только Requests — только запросы, лимиты не затрагиваются. |
| Контролируемые ресурсы | controlledResources | Какие ресурсы необходимо контролировать. По умолчанию CPU и Memory. Можно оставить только CPU или только Memory. |
Скриншот: политика ресурсов VPA для пода

Вкладка КонтейнерыПравила для одного контейнера. Они важнее общего правила
Политики для отдельных контейнеров необязательны: добавьте их только для тех контейнеров шаблона пода, которым нужны свои ограничения. На один контейнер — одна политика.
| Поле | Параметр в манифесте | Описание |
|---|---|---|
| Контейнер | containerName | Обязательное. Имя контейнера из шаблона пода. Для него действуют свои рамки. |
| Автомасштабирование | mode | Включён — VPA подбирает ресурсы этому контейнеру. Выключен — контейнер не трогает и рекомендаций по нему не считает. |
| Разрешено минимально (CPU, Memory) | minAllowed.cpu, minAllowed.memory | Самое маленькое CPU и память, которые VPA может подобрать этому контейнеру. Даже если контейнер потребляет меньше — ниже этого значения не опустит. Если не задано — ограничения нет. Для CPU: CPU, m; для Memory: Gi, Mi, Ki, B. |
| Разрешено максимально (CPU, Memory) | maxAllowed.cpu, maxAllowed.memory | Самое большое CPU и память, которые VPA может подобрать этому контейнеру. Даже если контейнер потребляет больше — выше этого значения не поднимет. Если не задано — ограничения нет. Для CPU: CPU, m; для Memory: Gi, Mi, Ki, B. |
| Контролирование request/limits | controlledValues | Что менять у этого контейнера. По умолчанию Limits и Requests — и запросы, и лимиты (лимит меняется пропорционально запросу). Только Requests — только запросы, лимиты не трогает. |
| Контролируемые ресурсы | controlledResources | Какие ресурсы контролировать для этого контейнера. По умолчанию CPU и Memory. Можно оставить только CPU или только Memory. |
Скриншот: добавление политики ресурсов контейнера

Скриншот: политика ресурсов VPA для контейнера

После создания VPA все поля доступны для редактирования.
| Поле | Параметр в манифесте | Описание |
|---|---|---|
| Состояния VPA | status.conditions | Работает ли VPA. Зелёный — да, красный — есть проблема. Нажмите на тип, чтобы увидеть причинуПочему состояние стало таким, сообщениеПодробности и когда состояние последний раз менялосьlastTransitionTime. |
| Рекомендации VPA | status.recommendation | Подобранные CPU и память: сколько выделить контейнерам. Пока данных нет — прочерки. |
Подготовьте YAML-манифесты и примените объекты через Импорт манифестов.
HPA (Horizontal Pod Autoscaler) изменяет количество подов Deployment или StatefulSet по метрикам CPU, памяти или кастомным метрикам.
Предварительные требования:
- для HPA по CPU/Memory у контейнеров должны быть заданы
requests, иначе метрики не будут рассчитаны.
Метрики type: Resource задают средние CPU и Memory по подам. Метрики type: ContainerResource — по выбранному контейнеру. Если метрик несколько, HPA берёт наибольшее из рассчитанных значений числа реплик.
Правила изменения числа реплик (spec.behavior): scaleUp и scaleDown с selectPolicy (Max, Min, Disabled), списком policies (type: Pods или Percent, value, periodSeconds) и stabilizationWindowSeconds. Если behavior не задан, используются значения Kubernetes по умолчанию.
Пример HPA:
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: my-app-hpa
namespace: my-namespace
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: my-app
minReplicas: 2
maxReplicas: 10
behavior:
scaleUp:
selectPolicy: Max
stabilizationWindowSeconds: 0
policies:
- type: Percent
value: 100
periodSeconds: 15
- type: Pods
value: 4
periodSeconds: 15
scaleDown:
selectPolicy: Max
stabilizationWindowSeconds: 300
policies:
- type: Percent
value: 100
periodSeconds: 15
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70
- type: Resource
resource:
name: memory
target:
type: Utilization
averageUtilization: 80
- type: ContainerResource
containerResource:
name: cpu
container: app
target:
type: Utilization
averageUtilization: 60
Проверьте статус HPA:
kubectl get hpa my-app-hpa -n my-namespace
kubectl describe hpa my-app-hpa -n my-namespace
В выводе отображаются текущее и желаемое количество реплик, текущие значения метрик и события масштабирования.
VPA (Vertical Pod Autoscaler) подбирает requests и limits контейнеров на основе данных потребления CPU и Memory. В платформе VPA настраивается для Deployment и StatefulSet.
Объект VerticalPodAutoscaler состоит из ссылки на нагрузку (targetRef: apiVersion, kind, name), политики обновления (updatePolicy), политики ресурсов (resourcePolicy) и рассчитанных рекомендаций в статусе. Если рекомендатель не задан, используется рекомендатель по умолчанию.
Предварительные требования:
- для одной нагрузки создавайте только один объект VPA: несколько VPA на одни и те же поды дают неопределённое поведение.
Режимы работы VPA (spec.updatePolicy.updateMode): AutoЗадаёт запросы при создании пода и может пересоздать уже работающий под, если запросы сильно отличаются от рекомендации. Сейчас это то же, что Recreate, RecreateЗадаёт запросы при создании пода. Если у работающего пода запросы сильно отличаются от рекомендации — удаляет под, контроллер создаёт новый уже с нужными запросами, InitialЗадаёт запросы только когда под создаётся. У уже работающих подов ничего не меняет, OffЗапросы подов не меняет. Рекомендации всё равно считает — можно посмотреть и ничего не применять.
Политика ресурсов задаёт рамки для подбора CPU и памяти:
containerName: "*"— общее правило для контейнеров, у которых нет своей политики; правило с именем контейнера важнее;mode:Auto— VPA подбирает ресурсы этому контейнеру,Off— не трогает и рекомендаций по нему не считает;minAllowed/maxAllowed— самое маленькое и самое большое CPU и память, которые VPA может подобрать. Даже если потребление другое — ниже минимума не опустит и выше максимума не поднимет;controlledValues:RequestsAndLimits(по умолчанию — и запросы, и лимиты, лимит меняется пропорционально запросу) илиRequestsOnly(только запросы);controlledResources:cpu,memoryили оба (по умолчанию оба).
Требования к вытеснению (updatePolicy.evictionRequirements) — дополнительные условия, без которых VPA не пересоздаст под. Все заданные условия должны выполниться. Выше запрошенного (TargetHigherThanRequests) — подобранные ресурсы больше, чем сейчас в запросах, под увеличивают. Ниже запрошенного (TargetLowerThanRequests) — меньше, чем сейчас в запросах, под уменьшают. Если в условии несколько ресурсов, достаточно, чтобы оно выполнилось хотя бы по одному.
Пример VPA:
apiVersion: autoscaling.k8s.io/v1
kind: VerticalPodAutoscaler
metadata:
name: my-app-vpa
namespace: my-namespace
spec:
targetRef:
apiVersion: apps/v1
kind: Deployment
name: my-app
updatePolicy:
updateMode: "Auto"
minReplicas: 1
evictionRequirements:
- resources: ["cpu", "memory"]
changeRequirement: TargetHigherThanRequests
resourcePolicy:
containerPolicies:
- containerName: "*"
minAllowed:
cpu: 100m
memory: 128Mi
maxAllowed:
cpu: "2"
memory: 4Gi
controlledResources:
- cpu
- memory
controlledValues: RequestsAndLimits
- containerName: app
mode: Auto
minAllowed:
cpu: 100m
memory: 128Mi
maxAllowed:
cpu: "1"
memory: 2Gi
controlledResources:
- cpu
- memory
controlledValues: RequestsAndLimits
Проверьте VPA:
kubectl get vpa -n my-namespace
kubectl describe vpa my-app-vpa -n my-namespace
Когда рекомендации применены к поду, в аннотациях пода появляются vpaObservedContainers и vpaUpdates, например:
metadata:
annotations:
vpaObservedContainers: recommender
vpaUpdates: 'Pod resources updated by vpa-recommender: container 0: cpu request, memory request, cpu limit, memory limit'
Для StatefulSet без высокой доступности предпочтительны режимы Initial или Off, чтобы VPA не вытеснял поды.
Официальное описание: Vertical Pod Autoscaler, ограничения VPA и совместная работа с HPA.
Создать HPA или VPA можно через импорт манифеста: нажмите иконку импорта, вставьте или загрузите YAML, выполните Проверить и после успешной проверки нажмите Загрузить.
Скриншот: окно импорта манифеста

Скриншот: успешная проверка манифеста перед загрузкой

Безопасность доставки
При создании нагрузки проверьте настройки безопасности подов и образов:
- задайте
runAsUser,runAsGroup,runAsNonRootи другие параметры Security context там, где это применимо; - используйте профили Seccomp для ограничения системных вызовов пода или контейнера. Подробнее — Seccomp;
- учитывайте, что Security context контейнера переопределяет Security context пода;
- не включайте привилегированный режим без необходимости: он отменяет часть защит, включая Seccomp;
- храните учётные данные registry в Kubernetes Secrets, а не в открытом виде в манифестах;
- используйте подпись контейнерных образов и политики проверки подписей, если это требуется контуром безопасности. Подробнее — Модифицирующие политики и подпись образов.
Вкладка Безопасность у нагрузок показывает результаты сканирования образов на уязвимости и анализа соответствия политикам безопасности, если в кластере установлены соответствующие модули.
Удаление нагрузки
- Deployment, ReplicaSet, StatefulSet, DaemonSet, Job, CronJob, Pod — в списке можно удалить один объект или несколько сразу; кнопка Удалить на странице просмотра; значок удаления на вкладке Манифест. Как выбрать объекты и подтвердить удаление — в разделе Множественное удаление.
- CronJob — дополнительно доступны варианты Удалить полностью и Удалить с пересозданием (откроется форма создания с предзаполненными данными удалённой CronJob).
- Pod — на вкладке Pods у Deployment, ReplicaSet, StatefulSet, DaemonSet, Job и CronJob тоже можно удалить один под или несколько сразу. На странице просмотра: Удалить (корректное завершение) или Удалить принудительно для подов в состоянии Terminating.