Адаптация приложений для использования в кластерах Kubernetes смешанной ОС
Область применения: AKS в Azure Stack HCI 22H2, AKS на Windows Server
AKS с поддержкой Arc позволяет запускать кластеры Kubernetes как с узлами Linux, так и с Windows, но для использования в этих кластерах смешанной ОС необходимо внести небольшие изменения. В этом руководстве описывается, как убедиться, что приложение будет запланировано на правильной ОС узла с помощью селекторов узлов или селекторов узлов, а также отметок и толерации.
В этой статье предполагается базовое понимание концепций Kubernetes. Дополнительные сведения см. в основных понятиях Kubernetes для AKS, включенных Arc.
Селекторы узлов
Селектор узлов — это простое поле в спецификации POD YAML, которое ограничивает выполнение модулей pod только на здоровые узлы, соответствующие операционной системе. В спецификации pod YAML укажите nodeSelector
значение Windows или Linux, как показано в следующих примерах:
kubernetes.io/os = Windows
или
kubernetes.io/os = Linux
Дополнительные сведения о селекторах узлов см. в разделе селекторов узлов.
Ограничения и допуски
Ограничения и терпимые элементы работают вместе, чтобы обеспечить непреднамеренное планирование модулей pod на узлах. Узел можно "запятнать", чтобы отклонить модули pod, которые явно не допускают его тон через "терпимую" спецификацию pod YAML.
Узлы ОС 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 в спецификации pod YAML. Следующая терпимость "соответствует" таиту, созданному строкой 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
"ключ-значение".
Дополнительные сведения об обнажениях и терпимостях см. в разделе "Таинты" и "Толерации".
Следующие шаги
В этом руководстве вы узнали, как добавлять селекторы узлов или селекторы и творить в кластеры Kubernetes с помощью kubectl. Далее вы можете выполнить такую задачу: