Управление модулями 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 в определенном наборе узлов ограниченно, но не запрещают их размещение в узлах без ограничений.