Создание приложений из образа

Содержание

Предварительные требования

Получите адрес образа. Источником образов могут быть репозитории образов, интегрированные администратором платформы через toolchain, либо репозитории образов сторонних платформ.

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

  • Если это репозиторий образов сторонней платформы, убедитесь, что образы можно напрямую загружать из него в текущем кластере.

Процедура 1 — Workloads

  1. В Container Platform перейдите в Applications > Applications в левой боковой панели.

  2. Нажмите Create.

  3. Выберите способ создания Create from Image.

  4. Выберите или введите образ и нажмите Confirm.

INFO

Примечание: При использовании образов из репозитория, интегрированного в веб-консоль, можно фильтровать образы по Already Integrated. Integration Project Name, например, образы (docker-registry-projectname), включают имя проекта projectname в этой веб-консоли и имя проекта containers в репозитории образов.

  1. Следуйте инструкциям ниже для настройки соответствующих параметров.

Workload 1 — Настройка базовой информации

В разделе Workload > Basic Info настройте декларативные параметры для workloads

ПараметрыОписание
ModelВыберите нужный workload:
  • Deployment: Для подробного описания параметров см. Creating Deployment.
  • DaemonSet: Для подробного описания параметров см. Creating DaemonSet.
  • StatefulSet: Для подробного описания параметров см. Creating StatefulSet.
ReplicasОпределяет желаемое количество реплик Pod в Deployment (по умолчанию: 1). Настраивайте в зависимости от требований workload.
More > Update StrategyНастраивает стратегию rollingUpdate для обновлений без простоя:
Max surge (maxSurge):
  • Максимальное количество Pod, превышающее желаемое число реплик во время обновления.
  • Принимает абсолютные значения (например, 2) или проценты (например, 20%).
  • Вычисление процентов: ceil(current_replicas × percentage).
  • Пример: 4.1 → 5 при расчёте от 10 реплик.
Max unavailable (maxUnavailable):
  • Максимальное количество Pod, которые могут быть временно недоступны во время обновления.
  • Процентные значения не могут превышать 100%.
  • Вычисление процентов: floor(current_replicas × percentage).
  • Пример: 4.9 → 4 при расчёте от 10 реплик.
Примечания:
1. Значения по умолчанию: maxSurge=1, maxUnavailable=1, если явно не заданы.
2. Неработающие Pod (например, в состояниях Pending/CrashLoopBackOff) считаются недоступными.
3. Одновременные ограничения:
  • maxSurge и maxUnavailable не могут одновременно быть 0 или 0%.
  • Если процентные значения для обоих параметров равны 0, Kubernetes принудительно устанавливает maxUnavailable=1 для обеспечения прогресса обновления.
Пример:
Для Deployment с 10 репликами:
  • maxSurge=2 → Общее количество Pod во время обновления: 10 + 2 = 12.
  • maxUnavailable=3 → Минимальное количество доступных Pod: 10 - 3 = 7.
  • Это обеспечивает доступность при контролируемом развертывании.

Workload 2 — Настройка Pod

Примечание: В кластерах с разной архитектурой, при развертывании образов однородной архитектуры, убедитесь, что настроены корректные Node Affinity Rules для планирования Pod.

  1. В разделе Pod настройте параметры контейнерного рантайма и управления жизненным циклом:

    ПараметрыОписание
    VolumesМонтирование постоянных томов в контейнеры. Поддерживаемые типы томов: PVC, ConfigMap, Secret, emptyDir, hostPath и другие. Для деталей реализации см. Storage Volume Mounting Instructions.
    Image CredentialТребуется только при загрузке образов из сторонних реестров (через ручной ввод URL образа).
    Примечание: Образы из интегрированного реестра платформы автоматически наследуют связанные секреты.
    More > Close Grace PeriodВремя (по умолчанию: 30s), отведённое Pod для корректного завершения работы после получения сигнала завершения.
    - В этот период Pod завершает текущие запросы и освобождает ресурсы.
    - Установка 0 приводит к немедленному удалению (SIGKILL), что может вызвать прерывание запросов.
  1. Node Affinity Rules
ПараметрыОписание
More > Node SelectorОграничивает планирование Pod на узлы с определёнными метками (например, kubernetes.io/os: linux).
Node OS Selector
More > AffinityОпределяет тонкие правила планирования на основе существующих Pod.

Типы Pod Affinity:
  • Inter-Pod Affinity: Планирование новых Pod на узлы, где размещены определённые Pod (в пределах одной топологической области).
  • Inter-Pod Anti-affinity: Запрет совместного размещения новых Pod с определёнными Pod.

Режимы применения:
  • RequiredDuringSchedulingIgnoredDuringExecution: Pod планируются только если правила выполняются.
  • PreferredDuringSchedulingIgnoredDuringExecution: Предпочтение узлам, удовлетворяющим правилам, но допускаются исключения.

Поля конфигурации:
  • topologyKey: Метка узла, определяющая топологические области (по умолчанию: kubernetes.io/hostname).
  • labelSelector: Фильтр целевых Pod с помощью запросов по меткам.
  1. Настройка сети
    • Kube-OVN
      ПараметрыОписание
      Bandwidth LimitsОграничение QoS для сетевого трафика Pod:
      • Ограничение исходящего трафика: Максимальная скорость исходящего трафика (например, 10Mbps).
      • Ограничение входящего трафика: Максимальная скорость входящего трафика.
      SubnetНазначение IP из предопределённого пула подсетей. Если не указано, используется подсеть по умолчанию для namespace.
      Static IP AddressПривязка постоянных IP-адресов к Pod:
      • Несколько Pod в разных Deployment могут претендовать на один IP, но одновременно использовать его может только один Pod.
      • Критично: Количество статических IP должно быть ≥ числу реплик Pod.
    • Calico
      ПараметрыОписание
      Static IP AddressНазначение фиксированных IP с жёстким ограничением уникальности:
      • Каждый IP может быть привязан только к одному Pod в кластере.
      • Критично: Количество статических IP должно быть ≥ числу реплик Pod.

Workload 3 — Настройка контейнеров

  1. В разделе Container следуйте инструкциям для настройки соответствующей информации.

    ПараметрыОписание
    Resource Requests & Limits
    • Requests: Минимальные CPU/память, необходимые для работы контейнера.
    • Limits: Максимальные CPU/память, разрешённые во время выполнения контейнера. Для определения единиц см. Resource Units.
    Коэффициент overcommit namespace:
    • Без коэффициента overcommit:
      Если существуют квоты ресурсов namespace: Requests/limits наследуют значения по умолчанию namespace (можно изменить).
      Без квот namespace: Нет значений по умолчанию; настраивается Request.
    • С коэффициентом overcommit:
      Requests рассчитываются автоматически как Limits / Overcommit ratio (неизменяемо).
    Ограничения:
    • Request ≤ Limit ≤ максимальная квота namespace.
    • Изменение коэффициента overcommit требует пересоздания pod для вступления в силу.
    • Коэффициент overcommit отключает ручную настройку Request.
    • Отсутствие квот namespace → отсутствие ограничений ресурсов контейнера.
    Extended ResourcesНастройка расширенных ресурсов, доступных в кластере (например, vGPU, pGPU).
    Volume MountКонфигурация постоянного хранилища. См. Storage Volume Mounting Instructions.
    Операции:
    • Для существующих томов pod: нажмите Add
    • Если томов pod нет: нажмите Add & Mount
    Параметры:
    • mountPath: Путь в файловой системе контейнера (например, /data)
    • subPath: Относительный путь файла/каталога внутри тома.
      Для ConfigMap/Secret: выбор конкретного ключа
    • readOnly: Монтировать только для чтения (по умолчанию: чтение-запись)
    См. Kubernetes Volumes.
    PortОткрытие портов контейнера.
    Пример: Открыть TCP порт 6379 с именем redis.
    Поля:
    • protocol: TCP/UDP
    • Port: Открываемый порт (например, 6379)
    • name: Идентификатор, совместимый с DNS (например, redis)
    Startup Commands & ArgumentsПереопределение стандартных ENTRYPOINT/CMD:
    Пример 1: Выполнить top -b
    - Command: ["top", "-b"]
    - ИЛИ Command: ["top"], Args: ["-b"]
    Пример 2: Вывести $MESSAGE:
    /bin/sh -c "while true; do echo $(MESSAGE); sleep 10; done"
    См. Defining Commands.
    More > Environment Variables
    • Статические значения: Прямые пары ключ-значение
    • Динамические значения: Ссылки на ключи ConfigMap/Secret, поля pod (fieldRef), метрики ресурсов (resourceFieldRef)
    Примечание: Переменные окружения переопределяют настройки образа/конфигурационного файла.
    More > Referenced ConfigMapВнедрение всего ConfigMap/Secret как переменных окружения. Поддерживаемые типы Secret: Opaque, kubernetes.io/basic-auth.
    More > Health Checks
    • Liveness Probe: Проверка здоровья контейнера (перезапуск при сбое)
    • Readiness Probe: Проверка доступности сервиса (исключение из endpoints при сбое)
    См. Health Check Parameters.
    More > Log FileНастройка путей логов:
    - По умолчанию: сбор stdout
    - Шаблоны файлов: например, /var/log/*.log
    Требования:
    • Драйвер хранения overlay2: поддерживается по умолчанию
    • devicemapper: вручную монтировать EmptyDir в каталог логов
    • Узлы Windows: обеспечить монтирование родительского каталога (например, c:/a для c:/a/b/c/*.log)
    More > Exclude Log FileИсключение конкретных логов из сбора (например, /var/log/aaa.log).
    More > Execute before StoppingВыполнение команд перед завершением контейнера.
    Пример: echo "stop"
    Примечание: Время выполнения команды должно быть меньше terminationGracePeriodSeconds pod.
  2. Нажмите Add Container (вверху справа) ИЛИ Add Init Container.

    См. Init Containers. Init Container:

    1. Запускается перед контейнерами приложения (последовательное выполнение).
    2. Освобождает ресурсы после завершения.
    3. Удаление разрешено, если:
      • Pod содержит >1 контейнера приложения И ≥1 init контейнер.
      • Не разрешено для pod с одним контейнером приложения.
  3. Нажмите Create.

Процедура 2 — Services

ПараметрыОписание
ServiceKubernetes Service, обеспечивает доступ к приложению в вашем кластере через единую внешнюю точку доступа, даже если workload распределён по нескольким backend. Для подробного описания параметров см. Creating Services.

Примечание: Префикс имени по умолчанию для внутреннего маршрута, созданного в приложении, — имя вычислительного компонента. Если тип вычислительного компонента (режим развертывания) — StatefulSet, рекомендуется не менять имя внутреннего маршрута (имя workload), иначе это может привести к проблемам с доступом к workload.

Процедура 3 — Ingress

ПараметрыОписание
IngressKubernetes Ingress, позволяет сделать ваш HTTP (или HTTPS) сетевой сервис доступным с помощью протокольно-ориентированной конфигурации, понимающей такие веб-концепции, как URI, имена хостов, пути и др. Концепция Ingress позволяет направлять трафик на разные backend в зависимости от правил, определённых через Kubernetes API. Для подробного описания параметров см. Creating Ingresses.

Примечание: Service, используемый при создании Ingress в приложении, должен быть ресурсом, созданным в текущем приложении. При этом убедитесь, что Service связан с workload в приложении, иначе обнаружение сервиса и доступ к workload будут невозможны.
  1. Нажмите Create.

Операции управления приложением

Для изменения конфигураций приложения используйте один из следующих способов:

  1. Нажмите вертикальное многоточие (⋮) справа от списка приложений.
  2. Выберите Actions в правом верхнем углу страницы с деталями приложения.
ОперацияОписание
Update
  • Update: Изменяет только целевой workload с использованием его определённой стратегии обновления (пример — стратегия Deployment). Сохраняет существующее количество реплик и конфигурацию развертывания.
  • Force Update: Запускает полное развертывание приложения с использованием стратегии обновления каждого компонента.
    1. Сценарии использования:
    • Пакетные изменения конфигурации, требующие немедленного распространения по всему кластеру (например, обновления ConfigMap/Secret, используемых как переменные окружения).
    • Координированные перезапуски компонентов для критических обновлений безопасности.
    2. Предупреждение:
    • Может вызвать временное ухудшение качества сервиса при массовых перезапусках.
    • Не рекомендуется использовать в продуктивных средах без проверки непрерывности бизнеса.
  • Сетевые последствия:
    • Удаление правил Ingress: Внешний доступ остаётся доступным через LB_IP:NodePort, если:
      1) Service типа LoadBalancer использует стандартные порты.
      2) Сохранившиеся правила маршрутизации ссылаются на компоненты приложения.
      Полное прекращение внешнего доступа требует удаления Service.
    • Удаление Service: Необратимая потеря сетевой доступности компонентов приложения. Связанные правила Ingress перестают работать, несмотря на сохранение объектов API.
Delete
  • Каскадное удаление:
    1. Удаляет все дочерние ресурсы, включая Deployments, Services и правила Ingress.
    2. Persistent Volume Claims (PVC) обрабатываются согласно политике хранения, определённой в StorageClass.
  • Проверочный список перед удалением:
    1. Убедитесь, что через связанные Services не идёт активный трафик.
    2. Подтвердите завершение резервного копирования данных для stateful компонентов.
    3. Проверьте зависимости ресурсов с помощью kubectl describe ownerReferences.

Справочная информация

Инструкции по монтированию томов хранения

ТипНазначение
Persistent Volume ClaimПривязывает существующий PVC для запроса постоянного хранилища.

Примечание: Выбираются только привязанные PVC (с ассоциированным PV). Непривязанные PVC приведут к ошибкам создания pod.
ConfigMapМонтирует полные или частичные данные ConfigMap как файлы:
  • Полный ConfigMap: создаёт файлы с именами ключей под путём монтирования
  • Выбор подпути: монтирует конкретный ключ (например, my.cnf)
SecretМонтирует полные или частичные данные Secret как файлы:
  • Полный Secret: создаёт файлы с именами ключей под путём монтирования
  • Выбор подпути: монтирует конкретный ключ (например, tls.crt)
Ephemeral VolumesВременный том, предоставляемый кластером, с возможностями:
  • Динамическое выделение
  • Жизненный цикл связан с pod
  • Поддержка декларативной конфигурации

Сценарий использования: временное хранение данных. См. Ephemeral Volumes
Empty DirectoryВременное хранилище, общее для контейнеров в одном pod:
- Создаётся на узле при запуске pod
- Удаляется при удалении pod

Сценарий использования: обмен файлами между контейнерами, временное хранение данных. См. EmptyDir
Host PathМонтирует каталог хост-машины (должен начинаться с /, например, /volumepath).

Параметры проверки здоровья

Общие параметры

ПараметрыОписание
Initial DelayВремя ожидания (в секундах) перед началом проверок. По умолчанию: 300.
PeriodИнтервал между проверками (1-120 с). По умолчанию: 60.
TimeoutВремя ожидания ответа проверки (1-300 с). По умолчанию: 30.
Success ThresholdМинимальное количество последовательных успешных проверок для признания контейнера здоровым. По умолчанию: 0.
Failure ThresholdМаксимальное количество последовательных неудач для запуска действия:
- 0: отключает действия при ошибках
- По умолчанию: 5 неудач → перезапуск контейнера.

Параметры, специфичные для протокола

ПараметрПрименимые протоколыОписание
ProtocolHTTP/HTTPSПротокол проверки здоровья
PortHTTP/HTTPS/TCPЦелевой порт контейнера для проверки.
PathHTTP/HTTPSПуть конечной точки (например, /healthz).
HTTP HeadersHTTP/HTTPSПользовательские заголовки (добавьте пары ключ-значение).
CommandEXECКоманда для проверки, выполняемая в контейнере (например, sh -c "curl -I localhost:8080 | grep OK").
Примечание: Экранируйте специальные символы и проверьте работоспособность команды.