Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье описывается, как использовать таинты узлов в кластере службы Azure Kubernetes (AKS).
Обзор
Механизм планирования AKS отвечает за размещение подов на узлах и основан на стандартном планировщике Kubernetes, kube-scheduler. Вы можете ограничить модуль для работы на определенных узлах, подключив его к набору узлов, используя сходство узлов (node affinity), или настроив узел для отталкивания группы модулей с помощью таинтов узла, которые взаимодействуют с планировщиком AKS.
Запятнанные узлы работают так, что планировщик избегает размещения определенных pod на таких узлах. Вы можете разместить допуски на pod, чтобы планировщик мог назначить этот pod на узел с соответствующим пятном. Ограничения и терпимые элементы работают вместе, чтобы управлять тем, как планировщик помещает модули pod на узлы. Подробнее см. примеры использования taints и tolerations.
Таинты — это пары "ключ-значение" с эффектом. При использовании загрязнений узлов имеется три значения для поля эффекта: NoExecute, NoSchedule, и PreferNoSchedule.
-
NoExecute: Модули, уже работающие на узле, немедленно вытесняются, если они не имеют соответствующих допусков. Если модуль pod имеет соответствующую терпимость, его можно вытеснить, еслиtolerationSecondsони указаны. -
NoSchedule: на этом узле размещаются только модули с соответствующими разрешениями. Существующие pods не выселяются. -
PreferNoSchedule: Планировщик избегает размещения любых pod, которые не имеют соответствующей толерантности.
Параметры окраса узла
К узлам AKS могут применяться два типа меток узлов: метки узлов и метки инициализации узлов.
- Ограничения узлов предназначены для постоянного сохранения на узле для планирования модулей pod с сходством узлов. Теинты узлов можно добавлять, полностью обновлять или удалять только с помощью API AKS.
- Инициализационные метки (taints) узла размещаются на узле во время загрузки и предназначены для временного использования, например, в сценариях, когда может потребоваться дополнительное время для настройки узлов. Вы можете удалить метку инициализации узла с помощью API Kubernetes, и эта метка не гарантируется во время жизненного цикла узла. Они будут отображаться на новых репликах узла при масштабировании или во всех репликах при обновлении узла. Если вы хотите полностью удалить метки инициализации, их можно удалить с помощью API AKS после удаления меток с узлов с помощью API Kubernetes. После удаления инициализационных меток из спецификации кластера с помощью API AKS, новые узлы не запускаются с этими метками. Если метка инициализации все еще присутствует на существующих узлах, то ее можно полностью удалить, выполнив операцию обновления образа узла.
Примечание.
Пометки и метки узла, применяемые с помощью API пула узлов AKS, не могут быть изменены из API Kubernetes и наоборот. Изменения системных меток не допускаются.
Это не относится к инициализации узлов.
Использование таинтов узлов
Предварительные условия
В этой статье предполагается, что у вас есть существующий кластер AKS. Если вам нужен кластер AKS, можно создать его с помощью Azure CLI, Azure PowerShell или портал Azure.
Создайте пул узлов с пометкой узла
Создайте пул узлов с taint с помощью команды
az aks nodepool addи используйте параметр--node-taints, чтобы указатьsku=gpu:NoScheduleдля taint.az aks nodepool add \ --resource-group $RESOURCE_GROUP_NAME \ --cluster-name $CLUSTER_NAME \ --name $NODE_POOL_NAME \ --node-count 1 \ --node-taints "sku=gpu:NoSchedule" \ --no-wait
Обновление пула узлов для добавления анатемы узла
Обновите пул узлов, чтобы добавить метку узла с помощью команды
az aks nodepool updateи используйте параметр--node-taints, чтобы указатьsku=gpu:NoScheduleдля метки.az aks nodepool update \ --resource-group $RESOURCE_GROUP_NAME \ --cluster-name $CLUSTER_NAME \ --name $NODE_POOL_NAME \ --node-taints "sku=gpu:NoSchedule" \ --no-wait
Использование начальных меток узлов (предварительный просмотр)
Внимание
Предварительные версии функций AKS доступны на основе самообслуживания и по желанию пользователя. Предварительные версии предоставляются "как есть" и "при наличии". На них не распространяются соглашения об уровне обслуживания и ограниченная гарантия. Предварительные версии AKS предоставляются с частичной клиентской поддержкой по мере возможности. Следовательно, эти функции не предназначены для использования в рабочей среде. Дополнительные сведения доступны в следующих статьях поддержки.
Предварительные требования и ограничения
- Вам нужна версия
3.0.0b3Azure CLI или более поздняя, установленная и настроенная. Чтобы узнать версию, выполните командуaz --version. Если вам необходимо выполнить установку или обновление, см. статью Установка Azure CLI 2.0. - Инициализационные метки можно применять только при создании или обновлении кластера через API AKS. При использовании шаблона ARM, который приведет к операции на уровне управляемого кластера, вы можете указать пометки инициализации узлов во время создания и обновления пула узлов. Операции на уровне агентпула блокируются, если в теле запроса присутствует
NodeInitializationTaints. - Невозможно применить таинты инициализации к пулам узлов Windows с помощью Azure CLI.
Получение учетных данных для кластера
Получите учетные данные для кластера AKS с помощью
az aks get-credentialsкоманды.az aks get-credentials --resource-group $RESOURCE_GROUP_NAME --name $CLUSTER_NAME
Установка расширения Azure CLI aks-preview
Зарегистрируйте или обновите расширение aks-preview с помощью
az extension addкоманды илиaz extension updateкоманды.# Register the aks-preview extension az extension add --name aks-preview # Update the aks-preview extension az extension update --name aks-preview
Регистрация флага компонента NodeInitializationTaintsPreview
NodeInitializationTaintsPreviewЗарегистрируйте флаг компонента с помощьюaz feature registerкоманды.az feature register --namespace "Microsoft.ContainerService" --name "NodeInitializationTaintsPreview"Через несколько минут отобразится состояние Registered (Зарегистрировано).
Проверьте состояние регистрации с помощью
az feature showкоманды.az feature show --namespace "Microsoft.ContainerService" --name "NodeInitializationTaintsPreview"Когда состояние отражает зарегистрировано, обновите регистрацию поставщика ресурсов Microsoft.ContainerService с помощью
az provider registerкоманды.az provider register --namespace Microsoft.ContainerService
Создайте кластер с инициализацией узла и применением taint
Создайте кластер с инициализацией узла с помощью команды
az aks createи параметра--node-initialization-taints, чтобы указатьsku=gpu:NoScheduleдля taint.Внимание
Указанные вами метки для инициализации узлов применяются ко всем пулам узлов в кластере. Чтобы применить инициализацию к конкретному узлу, можно использовать шаблон ARM вместо интерфейса командной строки.
az aks create \ --resource-group $RESOURCE_GROUP_NAME \ --name $CLUSTER_NAME \ --node-count 1 \ --node-init-taints "sku=gpu:NoSchedule" \ --generate-ssh-keys
Обновление кластера для добавления метки инициализации узла
Обновите кластер, чтобы добавить метку инициализации узла с помощью команды
az aks updateи параметра--node-initialization-taints, указываяsku=gpu:NoScheduleдля метки.Внимание
При обновлении кластера с меткой инициализации узла метки применяются ко всем пулам узлов в кластере. Если ваши узлы используют VMSS, вы можете просмотреть обновления в метках инициализации узла на самом узле после обновления модели VMSS узла (например, после операции обновления версии образа узла). Метки инициализации не появятся на ваших узлах до тех пор, пока операция, которая вызывает обновление модели масштабируемого набора виртуальных машин (VMSS), не произойдет.
az aks update \ --resource-group $RESOURCE_GROUP_NAME \ --name $CLUSTER_NAME \ --node-init-taints "sku=gpu:NoSchedule"
Проверка состояния пула узлов
После применения загрязнения узла или инициализации загрязнения проверьте состояние пула узлов с помощью команды
az aks nodepool list.az aks nodepool list --resource-group $RESOURCE_GROUP_NAME --cluster-name $CLUSTER_NAMEЕсли вы применили метки узлов, в следующем примере выходных данных показано, что в
<node-pool-name>пуле узловCreatingузлы с указаннымиnodeTaints.[ { ... "count": 1, ... "name": "<node-pool-name>", "orchestratorVersion": "1.15.7", ... "provisioningState": "Creating", ... "nodeTaints": [ "sku=gpu:NoSchedule" ], ... }, ... ]Если вы применили метки инициализации узлов, в следующем примере выходных данных показано, что в
<node-pool-name>пуле узлов находитсяCreatingузлов с указаннойnodeInitializationTaints.[ { ... "count": 1, ... "name": "<node-pool-name>", "orchestratorVersion": "1.15.7", ... "provisioningState": "Creating", ... "nodeInitializationTaints": [ "sku=gpu:NoSchedule" ], ... }, ... ]
Проверьте, установлен ли taint на узле
Проверьте метки узлов и метки инициализации узлов в конфигурации узла с помощью команды
kubectl describe node.kubectl describe node $NODE_NAMEЕсли применены исключения узлов, в следующем примере результатов показано, что пул узлов
<node-pool-name>имеет указанныйTaints.[ ... Name: <node-pool-name> ... Taints: sku=gpu:NoSchedule ... ], ... ... ]
Внимание
Если узлы используют VMSS, инициализация узлов не будет отображаться на фактических узлах в кластере до тех пор, пока не будет выполнена операция, которая активирует обновление модели VMSS (например, обновление версии Kubernetes или обновление версии образа узла).
Удаление таинтов узлов
Удаление метки загрязнения определенного узла
Удалите таинты узлов с помощью команды
az aks nodepool update. Команда в следующем примере удаляет метку узла"sku=gpu:NoSchedule"из пула узлов.az aks nodepool update \ --cluster-name $CLUSTER_NAME \ --name $NODE_POOL_NAME \ --resource-group $RESOURCE_GROUP_NAME \ --node-taints ""
Удалить все таинты узлов
Удалите все фрагменты узлов из пула узлов с помощью
az aks nodepool updateкоманды. В следующем примере команда удаляет все метки узлов из пула узлов.az aks nodepool update \ --cluster-name $CLUSTER_NAME \ --resource-group $RESOURCE_GROUP_NAME \ --name $NODE_POOL_NAME \ --node-taints ""
Удаление таинтов инициализации узлов
У вас есть следующие варианты, чтобы удалить метки инициализации узла с узла:
- Временно удалите метки инициализации узла с помощью Kubernetes API. Если удалить их таким образом, то они вновь появляются после масштабирования узла или обновления. Новые узлы по-прежнему имеют сбой инициализации узла после масштабирования. На всех узлах после обновления появляются загрязнения инициализации узла.
- Удалите метки инициализации узла безвозвратно, сняв метку с узла через API Kubernetes, а затем удалив метку с помощью API AKS. После удаления проблем инициализации из спецификации кластера с помощью API AKS, вновь созданные узлы после операций восстановления больше не имеют проблем инициализации.
При удалении всех входов инициализации из реплик пула узлов существующий метка инициализации может вновь появиться после обновления с любыми новыми метками инициализации.
Временно удалить метки инициализации узла
Временно удалите метки инициализации узла с помощью команды
kubectl taint nodes.Эта команда удаляет метку только из указанного узла. Если вы хотите удалить фрагмент из каждого узла в пуле узлов, необходимо выполнить команду для каждого узла, из которого требуется удалить фрагмент.
kubectl taint nodes $NODE_POOL_NAME sku=gpu:NoSchedule-После удаления инициализация узла повторно появится после масштабирования узла или обновления.
Окончательное удаление тайнтов инициализации узла
Выполните шаги, описанные в разделе «Временное удаление меток инициализации узла», чтобы удалить метку инициализации узла с помощью API Kubernetes.
Удалите пятно с ноды с помощью API AKS, используя команду
az aks update. Эта команда удаляет метку инициализации узла с каждого узла в кластере.az aks update \ --resource-group $RESOURCE_GROUP_NAME \ --name $CLUSTER_NAME \ --node-init-taints ""
Убедитесь, что с узла удалена метка загрязнения.
Проверьте метки узлов и метки инициализации узлов в конфигурации узла с помощью команды
kubectl describe node.kubectl describe node $NODE_NAMEЕсли вы удалили метку узла, в следующем примере выходных данных показано, что
<node-pool-name>пул узлов не содержит удаленной метки в разделеTaints:[ ... Name: <node-pool-name> ... Taints: ... ], ... ... ]
Следующие шаги
- Дополнительные сведения о примерах использования для отметок и толерантности.
- Узнайте больше о рекомендациях по расширенным функциям планировщика AKS.
- Дополнительные сведения о метках Kubernetes см. в документации по меткам Kubernetes.