Добавление пула точечных узлов Azure в кластер Службы Kubernetes Azure (AKS)

В рамках инструкций в этой статье вы добавите вторичный пул точечных узлов в существующий кластер Службы Azure Kubernetes (AKS).

Пул точечных узлов — это пул узлов, поддерживаемый масштабируемым набором виртуальных машин Azure. С помощью точечных виртуальных машин в кластере AKS можно воспользоваться неиспользуемой емкостью Azure с значительной экономией затрат. Объем доступной неиспользуемой емкости зависит от многих факторов, таких как размер узла, регион и время дня.

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

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

Подготовка к работе

  • В этой статье предполагается наличие базового понимания принципов работы Kubernetes и Azure Load Balancer. Дополнительные сведения см. в статье Ключевые концепции Kubernetes для службы Azure Kubernetes (AKS).
  • Если у вас нет подписки Azure, создайте бесплатную учетную запись, прежде чем приступить к работе.
  • При создании кластера для использования пула точечных узлов кластер должен использовать Масштабируемые наборы виртуальных машин для пулов узлов и подсистемы балансировки нагрузки SKU уровня "Стандартный". После создания кластера необходимо также добавить другой пул узлов, который рассматривается в этом руководстве.
  • Для работы с этой статьей требуется Azure CLI версии 2.14 или более поздней. Чтобы узнать версию, выполните команду az --version. Если вам необходимо выполнить установку или обновление, см. статью Установка Azure CLI 2.0.

Ограничения

При создании и администрировании кластеров AKS с пулом точечных узлов действуют следующие ограничения:

  • Пул точечных узлов не может быть пулом узлов по умолчанию, его можно использовать только в качестве дополнительного пула.
  • Одновременно нельзя обновить плоскость управления и пулы узлов. Необходимо обновить их по отдельности или удалить пул точечных узлов, чтобы одновременно обновить уровень управления и остальные пулы узлов.
  • Пул точечных узлов должен использовать Масштабируемые наборы виртуальных машин.
  • Невозможно изменить ScaleSetPriority или SpotMaxPrice после создания.
  • При установке SpotMaxPriceзначение должно иметь значение -1 или положительное значение с до пяти десятичных разрядов.
  • Пул точечных узлов имеет метку, kubernetes.azure.com/scalesetpriority=spot:NoSchedule запятую kubernetes.azure.com/scalesetpriority:spot и системные модули pod имеют анти-сходство.
  • Необходимо добавить соответствующий допуск и сходство для планирования рабочих нагрузок в пуле точечных узлов.

Добавление пула точечных узлов в кластер AKS

При добавлении пула точечных узлов в существующий кластер он должен быть кластером с несколькими пулами узлов. При создании кластера AKS с включенным несколькими пулами узлов создается пул узлов с priorityRegular заданным по умолчанию. Чтобы добавить пул точечных узлов, необходимо указать Spot в качестве значения.priority Дополнительные сведения о создании кластера AKS с несколькими пулами узлов см. в этой статье.

  • Создайте пул узлов с prioritySpot помощью az aks nodepool add команды.

    az aks nodepool add \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --name spotnodepool \
        --priority Spot \
        --eviction-policy Delete \
        --spot-max-price -1 \
        --enable-cluster-autoscaler \
        --min-count 1 \
        --max-count 3 \
        --no-wait
    

В предыдущей команде пул prioritySpot узлов создает пул точечных узлов. Параметр eviction-policy имеет Deleteзначение , которое является значением по умолчанию. При установке политикиDeleteвытеснения узлы в базовом масштабируемом наборе пула узлов удаляются при вытеснения.

Вы также можете задать для политики Deallocateвытеснения значение, что означает, что узлы в базовом масштабируемом наборе устанавливаются в состояние остановленного освобождения при вытеснения. Узлы в счетчике остановленного состояния в квоте вычислений и могут вызвать проблемы с масштабированием кластера или обновлением. Значения priority и eviction-policy значения можно задать только во время создания пула узлов. Эти значения невозможно обновить позже.

Предыдущая команда также включает автомасштабирование кластера, которое рекомендуется использовать с пулами узлов Spot. На основе рабочих нагрузок, выполняемых в кластере, автомасштабирование кластера масштабирует количество узлов вверх и вниз. Для пулов точечных узлов средство автомасштабирования кластера будет увеличивать количество узлов после вытеснения, если будет необходимость в дополнительных узлах. При изменении максимального количества узлов, которое может иметь пул узлов, также необходимо настроить значение maxCount, связанное со средством автомасштабирования кластера. Если вы не используете автомасштабирование кластера, при вытеснение пул spot в конечном итоге уменьшится до 0 и потребует ручной операции для получения дополнительных узлов точечных узлов.

Внимание

Планируйте для пулов точечных узлов только рабочие нагрузки, которые могут справляться с прерыванием, например задания пакетной обработки и среды тестирования. Рекомендуется настроить ограничения и терпимые значения в пуле точечных узлов, чтобы убедиться, что в пуле точечных узлов запланированы только рабочие нагрузки, которые могут обрабатывать вытеснения узлов. Например, приведенная выше команда добавляет фрагмент kubernetes.azure.com/scalesetpriority=spot:NoScheduleкода, поэтому на этом узле запланированы только модули pod с соответствующей терпимости.

Проверка пула точечных узлов

  • Убедитесь, что пул узлов был добавлен с помощью az aks nodepool show команды и подтвердите егоSpotscaleSetPriority.

    az aks nodepool show --resource-group myResourceGroup --cluster-name myAKSCluster --name spotnodepool
    

Планирование запуска модуля pod на узле "Место"

Чтобы запланировать выполнение модуля pod на точечный узел, можно добавить терпимость и сходство узлов, соответствующее запятой, примененному к точечным узлу.

В следующем примере показана часть YAML-файла, которая определяет терпимость, соответствующую kubernetes.azure.com/scalesetpriority=spot:NoSchedule фрагменту и сопоставлению узлов, соответствующей kubernetes.azure.com/scalesetpriority=spot метке, используемой на предыдущем шаге с requiredDuringSchedulingIgnoredDuringExecutionpreferredDuringSchedulingIgnoredDuringExecution правилами сходства узлов:

spec:
  containers:
  - name: spot-example
  tolerations:
  - key: "kubernetes.azure.com/scalesetpriority"
    operator: "Equal"
    value: "spot"
    effect: "NoSchedule"
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: "kubernetes.azure.com/scalesetpriority"
            operator: In
            values:
            - "spot"
      preferredDuringSchedulingIgnoredDuringExecution:
      - weight: 1
        preference:
          matchExpressions:
          - key: another-node-label-key
            operator: In
            values:
            - another-node-label-value

При развертывании модуля pod с этой терпимостью и сходством узлов Kubernetes успешно планирует модуль pod на узлах с примененными метками. В этом примере применяются следующие правила:

  • Узел должен иметь метку с ключом kubernetes.azure.com/scalesetpriority, а значение этой метки должно быть spot.
  • Узел предпочтительно имеет метку с ключом another-node-label-key, а значение этой метки должно быть another-node-label-value.

Дополнительные сведения см. в разделе "Назначение модулей pod узлам".

Обновление пула точечных узлов

При обновлении пула точечных узлов AKS внутренне выдает кордон и уведомление о вытеснениях, но не применяется очистка. Для обновлений пула точечных узлов не предусмотрены узлы всплеска нагрузки. Вне этих изменений поведение при обновлении пулов точечных узлов соответствует другим типам пулов узлов.

Дополнительные сведения об обновлении см. в статье об обновлении кластера AKS.

Максимальная цена для пула точечных узлов

Цена на экземпляры точечных виртуальных машин зависит от региона и ценовой категории. Дополнительные сведения см. в разделе о ценах на Linux и Windows.

С переменными ценами вы можете задать максимальную цену в долларах США (USD) с использованием до пяти десятичных разрядов. Например, значение 0,98765 будет максимальной ценой $ 0,98765 USD в час. Если вы укажете для максимальной цены значение -1, экземпляр не будет вытесняться по критерию цены. До тех пор, пока есть емкость и квота, цена для экземпляра будет более низкой ценой текущей цены для экземпляра Spot или для стандартного экземпляра.

Следующие шаги

Из этой статьи вы узнали, как добавить пул точечных узлов в кластер AKS. Дополнительные сведения об управлении модулями Pod в пулах узлов см. в разделе рекомендации по использованию расширенных функций планировщика в AKS.