Как задеплоить приложение (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 отображается перечень созданных деплойментов в контексте неймспейса.
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 — автоматическое горизонтальное масштабирование;
- ReplicaSets — список ReplicaSet, созданных Deployment, с количеством подов, статусом и образом;
- Pods — список подов с фильтрами по имени, неймспейсу, статусу, родительскому объекту, узлу и QoS;
- Безопасность — результаты сканирования образов и анализа конфигураций, если соответствующие модули установлены в кластере;
- Лейблы и аннотации, События, Манифест.
Скриншот: шаблон пода 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, Шаблон пода, Шаблоны PVC, Безопасность, Лейблы и аннотации, События, Манифест. Во вкладке StatefulSet отображаются partition, minReadySeconds, revisionHistoryLimit, podManagementPolicy, serviceName, политика хранения PVC, селектор подов и метрики CPU/Memory за последний час.
Скриншот: страница 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, шаблон пода, 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. Нажатие на строку пода открывает страницу просмотра пода.
Цветовая индикация статуса пода:
- зелёная —
Running,Completed; - жёлтая —
Pending; - красная —
Terminating,CrashLoopBackOff,Failed; - серая —
Unknown.
- При необходимости посмотрите логи на вкладке Логи страницы пода или события на вкладке События созданной нагрузки.
Подробнее — Траблшутинг нагрузок.
Шаг 4. Изменение и масштабирование
Масштабирование Deployment или StatefulSet
На вкладке Deployment или StatefulSet страницы просмотра найдите блок масштабирования, измените количество реплик и сохраните изменения.
Скриншот: страница Deployment

В графическом интерфейсе объект HPA встроен в виде вкладки на страницу объекта Deployment. На вкладке HPA страницы Deployment задайте целевое среднее использование CPU и/или Memory за последние 5 минут. При превышении значения количество подов увеличится в пределах заданного диапазона реплик; при снижении нагрузки — уменьшится. Объект HPA создаётся с автоматически сгенерированным именем и управляется только с этой вкладки. Также объект HPA доступен для создания и редактирования со страницы “Кастомные ресурсы” раздела “Администрирование” кластера и неймспейса.
Скриншот: HPA

Подготовьте YAML-манифесты и примените объекты через Импорт манифестов.
В Kubernetes доступны два основных варианта автоматического масштабирования:
- HPA (Horizontal Pod Autoscaler) — изменяет количество подов Deployment или StatefulSet по метрикам CPU, памяти или кастомным метрикам.
- VPA (Vertical Pod Autoscaler) — подбирает requests/limits контейнеров на основе исторических данных. (Будет реализовано в релизе 2.15.0)
HPA
Предварительные требования:
- в кластере должен быть установлен
shturval-metrics-collector. Если у вас нет доступа к shturvalserviceconfigs, то наличие установленного сервиса вы можете понять по отображению графиков утилизации CPU и RAM в графическом интерфейсе нагрузки; - для HPA по CPU/Memory у контейнеров должны быть заданы
requests, иначе метрики не будут рассчитаны.
Пример 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
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70
- type: Resource
resource:
name: memory
target:
type: Utilization
averageUtilization: 80
Проверьте статус HPA:
kubectl get hpa my-app-hpa -n my-namespace
kubectl describe hpa my-app-hpa -n my-namespace
В выводе отображаются текущее и желаемое количество реплик, текущие значения метрик и события масштабирования.
Безопасность доставки
При создании нагрузки проверьте настройки безопасности подов и образов:
- задайте
runAsUser,runAsGroup,runAsNonRootи другие параметры Security context там, где это применимо; - используйте профили Seccomp для ограничения системных вызовов пода или контейнера. Подробнее — Seccomp;
- учитывайте, что Security context контейнера переопределяет Security context пода;
- не включайте привилегированный режим без необходимости: он отменяет часть защит, включая Seccomp;
- храните учётные данные registry в Kubernetes Secrets, а не в открытом виде в манифестах;
- используйте подпись контейнерных образов и политики проверки подписей, если это требуется контуром безопасности. Подробнее — Модифицирующие политики и подпись образов.
Вкладка Безопасность у нагрузок показывает результаты сканирования образов на уязвимости и анализа соответствия политикам безопасности, если в кластере установлены соответствующие модули.
Удаление нагрузки
- Deployment, StatefulSet, DaemonSet, Job, CronJob — иконка корзины в строке объекта на странице списка; кнопка Удалить на странице просмотра; иконка корзины на вкладке Манифест.
- CronJob — дополнительно доступны варианты Удалить полностью и Удалить с пересозданием (откроется форма создания с предзаполненными данными удалённой CronJob).
- Pod — Удалить (корректное завершение) или Удалить принудительно для подов в состоянии Terminating.
Связанные разделы
- Обзор дашборда неймспейса — создание нагрузки с дашборда неймспейса.
- Как опубликовать приложение (Services/Ingress).
- Как подключить приватный registry.
- Как связаны Штурвал и Argo CD.
- Seccomp.
- Модифицирующие политики и подпись образов.
- Траблшутинг нагрузок.