Облачная платформаВсе платформы

Создание Deployment

Язык статьи: Русский
Показать оригинал
Страница переведена автоматически и может содержать неточности. Рекомендуем сверяться с английской версией.

Deployment является приложением Kubernetes, которое не сохраняет данные или состояние во время работы. Каждый под того же Deployment идентичен, позволяя осуществлять плавное создание, удаление и замену без воздействия на функциональность приложения. Deployments идеальны для бессостояльных приложений, таких как веб‑frontend серверы и микросервисы, которые не требуют хранения данных. Они позволяют легко управлять жизненным циклом приложений, включая обновления, откаты и масштабирование.

Требования

Использование консоли CCE

  1. Войдите в консоль CCE.
  2. Щелкните название кластера, чтобы перейти в консоль кластера, выберите Рабочие нагрузки в навигационной панели и нажмите Создать рабочую нагрузку в правом верхнем углу.
  3. Настройте основную информацию о рабочей нагрузке.

    Параметр

    Описание

    Тип рабочей нагрузки

    Выберите Deployment. Для получения подробностей о разных типах рабочих нагрузок смотрите Обзор рабочих нагрузок.

    Имя рабочей нагрузки

    Введите имя для рабочей нагрузки. Введите от 1 до 63 символов, начинающихся со строчной буквы и заканчивающихся строчной буквой или цифрой. Допускаются только строчные буквы, цифры и дефисы (-).

    Пространство имён

    Выберите пространство имён для рабочей нагрузки. Значение по умолчанию — default. Вы также можете нажать Создать пространство имён для создания. Для подробностей смотрите Создание пространства имён.

    Поды

    Введите количество подов рабочей нагрузки.

    Среда выполнения контейнеров

    CЕЕ стандартный кластер использует общую среду выполнения по умолчанию, тогда как CCE Turbo кластер поддерживает как общие, так и защищённые среды выполнения. Подробности о различиях смотрите Защищённая и общая среды выполнения.

    Синхронизация часового пояса

    Настройте, включать ли синхронизацию часового пояса. После включения этой функции контейнер и узел будут использовать один и тот же часовой пояс. Синхронизация часового пояса опирается на локальный диск, смонтированный в контейнер. Не изменяйте и не удаляйте локальный диск. Подробности смотрите Настройка синхронизации часового пояса.

  4. Настройте настройки контейнера для рабочей нагрузки.

    • Информация о контейнере: Щелкните Добавить контейнер справа, чтобы настроить несколько контейнеров для пода.
      Caution

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

      • Основная информация: Настройте основную информацию о контейнере.

        Параметр

        Описание

        Имя контейнера

        Введите имя контейнера.

        Политика загрузки

        Политика обновления или загрузки образа. Если выбрать Always, образ будет загружаться из репозитория каждый раз. Если не выбрать Always, будет использован существующий образ узла. Если образ отсутствует, он будет загружен из репозитория образов.

        Имя образа

        Щелкните Выбрать образ и выберите образ, используемый контейнером.

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

        Тег образа

        Выберите тег образа для развертывания.

        CPU Квота

        • Запрос: минимальное количество ядер CPU, необходимое контейнеру. Значение по умолчанию — 0.25 ядра.
        • Лимит: максимальное количество ядер CPU, которые может использовать контейнер. Это предотвращает чрезмерное потребление ресурсов контейнерами.

        Если Запрос и Лимит не указаны, квота не ограничена. Для получения дополнительной информации и рекомендаций по Запрос и Лимит, смотрите Настройка характеристик контейнера.

        Memory Квота

        • Запрос: минимальное количество памяти, необходимое контейнеру. Значение по умолчанию — 512 МиБ.
        • Лимит: максимальное количество памяти, доступное контейнеру. При превышении указанного лимита памяти контейнер будет завершён.

        Если Запрос и Лимит не указаны, квота не ограничена. Для получения дополнительной информации и рекомендаций по Запрос и Лимит, смотрите Настройка характеристик контейнера.

        (Опционально) GPU Квота

        Настраивается только при наличии в кластере GPU-узлов и CCE AI Suite (NVIDIA GPU) дополнение установлено.

        • Не использовать: GPU не будет использоваться.
        • GPU карта: GPU выделяется для контейнера.
        • Виртуализация GPU: процент ресурсов GPU, используемых контейнером. Например, если параметр установлен в 10%, контейнер будет использовать 10% ресурсов GPU.

        Подробности о том, как использовать GPU в кластере, смотрите Стандартное планирование GPU в Kubernetes.

        (Опционально) Привилегированный контейнер

        Программы в привилегированном контейнере обладают определенными привилегиями. Если эта опция включена, контейнеру будут предоставлены привилегии. Например, привилегированные контейнеры могут управлять сетевыми устройствами хост‑машины, изменять параметры ядра, иметь доступ ко всем устройствам узла.

        Для получения дополнительной информации смотрите Стандарты безопасности подов.

        (Опционально) Init‑контейнер

        Определяет, использовать контейнер как init‑контейнер. Init‑контейнер не поддерживает проверку состояния.

        Init‑контейнер — это специальный контейнер, который запускается до начала работы остальных приложений в поде. Каждый под может содержать несколько контейнеров. Кроме того, в поде может быть один или несколько init‑контейнеров. Приложения‑контейнеры в поде запускаются и работают только после завершения работы всех init‑контейнеров. Подробности смотрите Init‑контейнеры.

        (Опционально) Параметры запуска

        Добавьте параметры запуска для контейнера. Подробности смотрите Под. CCE поддерживает следующие параметры запуска:

        • stdin: позволяет контейнерам принимать ввод из внешних источников, например терминалов или других потоков ввода.
        • tty: выделяет псевдотерминал контейнеру, позволяя отправлять команды так, как если бы использовался локальный терминал.

          В большинстве случаев tty включён вместе со stdin, что означает, что терминал (tty) связан со стандартным вводом (stdin) контейнера. Это позволяет проводить интерактивные операции, аналогично kubectl exec -i -t команде. Разница в том, что этот параметр задаётся при запуске пода.

      • (Опционально) Жизненный цикл: Настройте операции, выполняемые в определённой фазе жизненного цикла контейнера, такие как команда запуска, пост‑запуск и предостановка. Подробности смотрите Настройка жизненного цикла контейнера.
      • (Опционально) Проверка состояния: Настройте пробу живости, готовности и запуска по необходимости. Подробности смотрите Настройка проверки состояния контейнера.
      • (Опционально) Переменные окружения: Настройте переменные окружения контейнера с помощью пар «ключ‑значение». Эти переменные передают внешнюю информацию в контейнеры, работающие в подах, и могут гибко изменяться после развертывания приложения. Подробности смотрите Настройка переменных окружения.
      • (Опционально) Хранение данных: Подключите локальное или облачное хранилище к контейнеру. Сценарии применения и режимы монтирования зависят от StorageClass. Подробности смотрите Хранилище.
        Note

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

      • (Опционально) Контекст безопасности: Назначьте разрешения контейнеру для защиты системы и других контейнеров от воздействия. Укажите ID пользователя, чтобы задать права контейнера и предотвратить влияние на систему и другие контейнеры.
      • (Опционально) Логирование: По умолчанию отправляет стандартные журналы вывода контейнера в AOM без необходимости ручных настроек. Вы можете вручную задать путь сбора журналов. Подробности смотрите Использование ICAgent для сбора журналов контейнера.

        Чтобы отключить сбор журналов стандартного вывода текущей рабочей нагрузки, добавьте аннотацию kubernetes.AOM.log.stdout: [] в Метки и аннотации в Дополнительные настройки области. Подробности об использовании этой аннотации смотрите Таблица 1.

    • Учётные данные доступа к образу: Выберите учётные данные, используемые для доступа к репозиторию образов. Значение по умолчанию — default-secret. Вы можете использовать default-secret для доступа к образам в SWR Shared Edition. Подробности о default-secret, смотрите default-secret.
    • (Опционально) GPU: All выбран по умолчанию. Экземпляр рабочей нагрузки будет запланирован на узел указанного типа GPU.

  5. (Опционально) Настройте параметры Сервиса , связанного с рабочей нагрузкой.

    Сервис предоставляет внешний доступ к подам. При статическом IP-адресе Сервис перенаправляет трафик доступа к подам и автоматически балансирует нагрузку между ними.

    Вы также можете создать Сервис после создания рабочей нагрузки. Подробности о Сервисах разных типов смотрите Обзор сервисов.

  6. (Опционально) Настройте расширенные настройки для рабочей нагрузки.

    Параметр

    Описание

    Обновление

    Укажите режим и параметры обновления рабочей нагрузки. Постепенное обновление и Полное обновление доступны. Для подробностей смотрите Обновление и откат рабочей нагрузки.

    Планирование

    Настройте политики аффинитета и антииффинитета для гибкого планирования рабочей нагрузки. Предоставляются политики нагрузки (load affinity) и аффинитета узлов.

    • Load Affinity: Предлагаются типовые политики load affinity для быстрого развертывания.
      • Не настроено: Политика load affinity не настроена.
      • Предпочтительное развертывание Multi-AZ: Поды рабочей нагрузки предпочтительно планируются на узлы в разных AZ через pod anti-affinity.
      • Принудительное развертывание Multi-AZ: Поды рабочей нагрузки принудительно планируются на узлы в разных AZ через pod anti-affinity (podAntiAffinity). Если AZ меньше, чем подов, дополнительные поды не смогут запуститься.
      • Настройка аффинитета: Политики аффинитета и антииффинитета можно настроить. Подробности смотрите Настройка планирования аффинитета или антииффинитета рабочей нагрузки (podAffinity или podAntiAffinity).
    • Node Affinity: Предлагаются типовые политики node affinity для быстрого развертывания.
      • Не настроено: Политика node affinity не настроена.
      • Указать узел: Поды рабочей нагрузки могут развёртываться на указанных узлах через node affinity (nodeAffinity). Если узел не указан, поды будут случайно распределяться согласно политике планирования кластера по умолчанию.
      • Указать пул узлов: Поды могут развёртываться в указанном пуле узлов через node affinity (nodeAffinity). Если пул узлов не указан, поды будут случайно распределяться согласно политике планирования кластера по умолчанию.
      • Настройка аффинитета: Политику аффинитета и антииффинитета можно настроить. Подробности смотрите Настройка планирования node affinity (nodeAffinity).

    Терпимость

    Использование taints и tolerations позволяет (не принудительно) планировать под на узел с соответствующими taints и контролировать политику вытеснения пода после загрязнения узла, на котором расположен под. Подробности смотрите Настройка политик терпимости.

    Метки и аннотации

    Добавьте метки или аннотации к pod, используя пары «ключ‑значение». После настройки нажмите Подтвердить. Подробности о метках и аннотациях смотрите Настройка меток и аннотаций.

    DNS

    Настройте отдельную политику DNS для рабочей нагрузки. Подробности смотрите Настройка DNS.

    Настройка сети

  7. Щелкните Создать рабочую нагрузку в правом нижнем углу. Через некоторое время рабочая нагрузка переходит в Running состояние.

Использование kubectl

В качестве примера используется Nginx, чтобы показать, как создать рабочую нагрузку с помощью kubectl.

  1. Используйте kubectl для доступа к кластеру. Подробности смотрите Доступ к кластеру с помощью kubectl.
  2. Создайте файл с именем nginx-deployment.yaml. nginx-deployment.yaml — пример имени файла, его можно переименовать по необходимости.

    vi nginx-deployment.yaml

    Ниже пример файла. Подробности о конфигурации Deployment смотрите в официальной документации Kubernetes.

    apiVersion: apps/v1
    kind: Deployment # Workload type
    metadata:
    name: nginx # Workload name
    namespace: default # Namespace where the workload is located
    spec:
    replicas: 1 # Number of pods in the specified workload
    selector:
    matchLabels: # The workload manages pods based on the pod labels in the label selector.
    app: nginx
    template: # Pod configuration
    metadata:
    labels: # Pod labels
    app: nginx
    spec:
    containers:
    - image: nginx:latest # Specify a container image. If you use an image in My ImagesMy Images, obtain the image path from SWR.
    imagePullPolicy: Always # Image pull policy
    name: nginx # Container name
    resources: # Node resources allocated to the container
    requests: # Requested resources
    cpu: 250m
    memory: 512Mi
    limits: # Resource limit
    cpu: 250m
    memory: 512Mi
    imagePullSecrets: # Secret for image pull
    - name: default-secret

  3. Создать Deployment.

    kubectl create -f nginx-deployment.yaml

    Если отображается информация, аналогичная следующей, Deployment создаётся:

    deployment.apps/nginx created

  4. Проверьте статус Deployment.

    kubectl get deployment

    Если Deployment находится в Running, это значит, что Deployment был создан.

    NAME READY UP-TO-DATE AVAILABLE AGE
    nginx 1/1 1 1 4m5s

    Параметры

    • NAME: Имя приложения, запущенного в pod.
    • READY: указывает количество доступных рабочих нагрузок. Значение отображается как "доступных pod/ожидаемых pod".
    • UP-TO-DATE: указывает количество реплик, которые были обновлены.
    • AVAILABLE: указывает количество доступных pod.
    • AGE: период, в течение которого Deployment работает

  5. Если к Deployment будет осуществлён доступ через Service типа ClusterIP или NodePort, создайте такой Service. Подробности смотрите Сетевое взаимодействие.