Адаптация приложений для использования в кластерах Kubernetes со смешанной ОС
Область применения: AKS в Azure Stack HCI 22H2, AKS в Windows Server
AKS, включенная Azure Arc, позволяет запускать кластеры Kubernetes с узлами Linux и Windows, но необходимо внести небольшие изменения в приложения для использования в этих кластерах смешанной ОС. В этом практическом руководстве вы узнаете, как убедиться, что приложение будет планироваться в правильной ОС узла с помощью селекторов узлов или с помощью селекторов и разрешений.
В этой статье предполагается базовое понимание концепций Kubernetes. Дополнительные сведения см. в разделе Основные понятия Kubernetes для AKS, включенного Arc.
Селекторы узлов
Селектор узлов — это простое поле в YAML спецификации pod, которое ограничивает планирование модулей pod только на работоспособных узлах, соответствующих операционной системе. В yamL спецификации pod укажите nodeSelector
значение Windows или Linux, как показано в следующих примерах:
kubernetes.io/os = Windows
или
kubernetes.io/os = Linux
Дополнительные сведения о nodeSelectors см. в разделе селекторы узлов.
Отметки и допуски
Ограничения и разрешения работают вместе, чтобы гарантировать, что модули pod не запланированы на узлах непреднамеренно. Узел может быть "запятнан", чтобы отклонить модули pod, которые явно не допускают его запятой, с помощью "допуска" в YAML спецификации pod.
Узлы ОС Windows в AKS Arc можно запятнать при создании с помощью команд New-AksHciNodePool или New-AksHciCluster . Вы также можете использовать эти команды, чтобы запятнать узлы ОС Linux. В следующем примере показано, как запятнать узлы Windows.
Применение ограничения к новому кластеру
Если вы также создаете новый кластер, выполните следующую команду, чтобы создать пул узлов Windows с запятой. Если у вас есть кластер, в который вы хотите добавить пул узлов с запятой, см. следующий пример, в котором используется New-AksHciNodePool
команда .
New-AksHciCluster -name mycluster -nodePoolName taintnp -nodeCount 1 -osType Windows -osSku Windows2022 -taints sku=Windows:NoSchedule
Добавление пула узлов с запятой в существующий кластер
Чтобы добавить пул узлов с запятой в существующий кластер, выполните следующую команду:
New-AksHciNodePool -clusterName <cluster-name> -nodePoolNAme taintnp -count 1 -osType Windows -osSku Windows2022 -taints sku=Windows:NoSchedule
Чтобы проверка, что пул узлов успешно развернут с помощью ограничения, выполните следующую команду:
Get-AksHciNodePool -clusterName <cluster-name> -name taintnp
Выходные данные примера:
Status : {Phase, Details}
ClusterName : mycluster
NodePoolName : taintnp
Version : v1.20.7-kvapkg.1
OsType : Windows
NodeCount : 0
VmSize : Standard_K8S3_v1
Phase : Deployed
Taints : {sku=Windows:NoSchedule}
Указание допустимости для pod
Вы можете указать допуск для модуля pod в YAML спецификации pod. Следующая допустимости "соответствует" следу, созданному kubectl
линией запятна, показанной в предыдущем примере. В результате модуль pod с допуском может запланировать на запятнаемые узлы.
tolerations:
- key: node.kubernetes.io/os
operator: Equal
value: Windows
effect: NoSchedule
Действия, описанные в этом разделе, хорошо работают, если вы управляете развертываемой спецификацией pod. Однако в некоторых случаях у пользователей уже есть большое количество развертываний для контейнеров Linux, а также экосистема общих конфигураций, например диаграммы Helm сообщества. У вас не будет доступа к спецификации pod, если вы не хотите скачать и изменить диаграмму.
При развертывании этих диаграмм Helm в смешанной кластерной среде с рабочими узлами Linux и Windows модули pod приложения завершаются ошибкой ImagePullBackOff. Пример:
kubectl get pods
NAMESPACE NAME READY STATUS RESTARTS AGE
default nginx-deployment-558fc78868-795dp 0/1 ImagePullBackOff 0 6m24s
default nginx-deployment-6b474476c4-gpb77 0/1 ImagePullBackOff 0 11m
В этом случае для этого можно использовать запятнания . Узлы Windows Server можно запятнать парой node.kubernetes.io/os=windows:NoSchedule
"ключ-значение".
Дополнительные сведения о запятнах и допусках см. в разделе Taints and Tolerations.
Дальнейшие действия
В этом практическом руководстве вы узнали, как добавлять селекторы узлов или ограничения и разрешения в кластеры Kubernetes с помощью kubectl. Далее вы можете выполнить такую задачу:
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по