Управление модулями Pod в кластерах Kubernetes с несколькими пулами

Завершено

Разработчики Contoso работают над преобразованием внутренних развернутых приложений Windows и Linux в образы на основе DOCKER, развертываемые с помощью чартов Helm. В планировании реализации кластеров Kubernetes в Azure Stack HCI необходимо обеспечить поддержку обеих платформ операционной системы.

Что такое пулы узлов в кластерах Kubernetes в Azure Stack HCI

AKS в Azure Stack HCI поддерживает несколько пулов узлов в одном кластере Kubernetes. Каждый пул состоит из одинаково настроенных виртуальных машин в соответствии с параметрами, заданными при подготовке пула.

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

Управление развертыванием модулей Pod в пулах узлов в кластерах Kubernetes в Azure Stack HCI

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

Селекторы узлов

Селектор узлов — это параметр в определении Pod на основе YAML или развертывании, определяющий целевые узлы, на которых может быть запланирован соответствующий модуль. Если ваша цель заключается в назначении целевых узлов на основе их операционной системы, можно полагаться на встроенные метки, автоматически назначаемые узлам Kubernetes. В зависимости от требуемой операционной системы селектор узла принимает форму kubernetes.io/os = Windows или kubernetes.io/os = Linux. Например, следующий манифест Pod на основе YAML обозначает узлы Linux как цели развертывания:

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    env: test
spec:
  containers:
  - name: nginx
    image: nginx
  nodeSelector:
    kubernetes.io/os = Linux

Ограничения и допуски

Ограничения и допуски предоставляют альтернативный подход к управлению размещением модулей Pod. При таком подходе ограничения являются частью конфигурации узла, а допуски — частью спецификаций модулей Pod. Ограничивая узел, вы эффективно препятствуете размещению на нем какого-либо модуля без соответствующего допуска.

Например, в AKS в Azure Stack HCI, если вы хотите разрешить планирование модулей Pod в узле Windows, добавьте в его определение следующие допуски:

tolerations:
- key: node.kubernetes.io/os
  operator: Equal
  value: Windows
  effect: NoSchedule

Кроме того, добавьте ограничение node.kubernetes.io/os=Windows:NoSchedule в каждый из узлов Windows, который должен быть доступен исключительно для развертывания модулей Pod с соответствующим допуском. Для этого можно использовать программу командной строки kubectl, а затем после подключения к целевому кластеру выполнить следующую команду для каждого узла в области (где заполнитель <node_name> обозначает имя целевого узла):

kubectl taint node <node_name> node.kubernetes.io/os=Windows:NoSchedule

Примечание.

Селекторы узлов обеспечивают размещение модулей Pod в определенном наборе узлов. Допуски позволяют запускать модули Pod в определенном наборе узлов ограниченно, но не запрещают их размещение в узлах без ограничений.

Проверка знаний

1.

Компания Contoso планирует развернуть контейнерные рабочие нагрузки Windows и Linux в AKS в Azure Stack HCI. Необходимо задокументировать процедуру, которая обеспечит развертывание модулей Pod на базе Windows в узлах кластера Kubernetes под управлением Windows. Вы решили использовать ограничения и допуски для этой цели. К какому компоненту кластера следует применить ограничение?