Поделиться через


Использование параметров узла в кластере Служба Azure Kubernetes (AKS)

В этой статье описывается, как использовать тоны узлов в кластере Служба Azure Kubernetes (AKS).

Обзор

Механизм планирования AKS отвечает за размещение модулей pod на узлах и основан на вышестоящем планировщике Kubernetes, kube-scheduler. Вы можете ограничить модуль pod для запуска на определенных узлах, подключив модули pod к набору узлов, используя сходство узлов или настроив узел для отталкивания набора модулей pod с помощью параметров параметров узла, которые взаимодействуют с планировщиком AKS.

Узлы запятнают работу, помечая узел, чтобы планировщик избегал размещения определенных модулей pod на помеченных узлах. Вы можете разместить терпимые методы в модуле pod, чтобы планировщик запланировать этот модуль на узле с соответствующими оттенками. Ограничения и терпимые элементы работают вместе, чтобы управлять тем, как планировщик помещает модули pod на узлы. Дополнительные сведения см . в примерах вариантов использования осложнений и толерации.

Оттенки — это пары "ключ-значение" с эффектом. При использовании параметров узла имеется три значения для поля эффекта: NoExecute, NoScheduleи PreferNoSchedule.

  • NoExecute: модули pod, уже работающие на узле, немедленно вытеснили, если они не имеют сопоставления. Если модуль pod имеет соответствующую терпимость, его можно вытеснить, если tolerationSeconds они указаны.
  • NoSchedule: на этом узле размещаются только модули pod с соответствующими терпимостями. Существующие модули pod не вытеснили.
  • PreferNoSchedule: планировщик избегает размещения любых модулей pod, которые не имеют сопоставления.

Параметры окраса узла

К узлам AKS могут применяться два типа запятых узлов: тоны узлов и инициализации узлов.

  • Ограничения узлов предназначены для постоянного сохранения на узле для планирования модулей pod с сходством узлов. Ограничения узлов можно добавлять, обновлять или удалять полностью с помощью API AKS.
  • При инициализации узла помещаются на узел во время загрузки и используются временно, например в сценариях, где может потребоваться дополнительное время для настройки узлов. Вы можете удалить инициализацию узла с помощью API Kubernetes и не гарантируется во время жизненного цикла узла. Они отображаются только после масштабирования узла или обновления или повторного создания. Новые узлы по-прежнему имеют инициализацию узла после масштабирования. Инициализация узла отображается на всех узлах после обновления. Если вы хотите полностью удалить инициализацию, их можно удалить с помощью API AKS после отмены настройки узлов с помощью API Kubernetes. После удаления параметров инициализации из спецификации кластера с помощью API AKS только что созданные узлы не создаются с этими инициализациями. Если инициализация по-прежнему присутствует на существующих узлах, ее можно окончательно удалить, выполнив операцию обновления образа узла.

Примечание.

Фрагменты и метки узла, применяемые с помощью API пула узлов AKS, не изменяются из API Kubernetes и наоборот. Изменения системных ограничений не допускаются.

Это не относится к инициализации узлов.

Использование оттенков узлов

Необходимые компоненты

В этой статье предполагается, что у вас есть существующий кластер AKS. Если вам нужен кластер AKS, можно создать его с помощью Azure CLI, Azure PowerShell или портал Azure.

Создание пула узлов с запятой узла

  1. Создайте пул узлов с запятой с помощью az aks nodepool add команды и используйте --node-taints параметр, чтобы указать sku=gpu:NoSchedule для фрагмента.

    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
    
  2. Проверьте состояние пула узлов.

  3. Убедитесь, что на узле задана запятая.

Обновление пула узлов для добавления фрагмента узла

  1. Обновите пул узлов, чтобы добавить фрагмент узла с помощью 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
    
  2. Проверьте состояние пула узлов.

  3. Убедитесь, что на узле задана ненавязка.

Использование инициализации узлов (предварительная версия)

Внимание

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

Предварительные требования и ограничения

  • Вам нужна версия 3.0.0b3 Azure CLI или более поздняя, установленная и настроенная. Чтобы узнать версию, выполните команду az --version. Если вам необходимо выполнить установку или обновление, см. статью Установка Azure CLI 2.0.
  • При использовании API AKS можно применять только инициализацию с помощью кластера создания или обновления. При использовании шаблонов ARM можно указать инициализацию узлов во время создания и обновления пула узлов.
  • Не удается применить инициализацию инициализации к пулам узлов 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

  1. NodeInitializationTaintsPreview Зарегистрируйте флаг компонента с помощью az feature register команды.

    az feature register --namespace "Microsoft.ContainerService" --name "NodeInitializationTaintsPreview"
    

    Через несколько минут отобразится состояние Registered (Зарегистрировано).

  2. Проверьте состояние регистрации с помощью az feature show команды.

    az feature show --namespace "Microsoft.ContainerService" --name "NodeInitializationTaintsPreview"
    
  3. Когда состояние отражает зарегистрировано, обновите регистрацию поставщика ресурсов Microsoft.ContainerService с помощью az provider register команды.

    az provider register --namespace Microsoft.ContainerService
    

Создание кластера с инициализацией узла

  1. Создайте кластер с инициализацией узла с помощью az aks create команды и --node-initialization-taints параметра, указываемого sku=gpu:NoSchedule для ненамеренного значения.

    Внимание

    Инициализация узла, указываемая, применяется ко всем пулам узлов в кластере. Чтобы применить инициализацию к конкретному узлу, можно использовать шаблон ARM вместо интерфейса командной строки.

    az aks create \
        --resource-group $RESOURCE_GROUP_NAME \
        --name $CLUSTER_NAME \
        --node-count 1 \
        --node-init-taints "sku=gpu:NoSchedule" \
        --generate-ssh-keys
    
  2. Проверьте состояние пула узлов.

  3. Убедитесь, что на узле задана запятая.

Обновление кластера для добавления инициализации узла

  1. Обновите кластер, чтобы добавить инициализацию узла с помощью az aks update команды и --node-initialization-taints параметра, указываемого sku=gpu:NoSchedule для ненамеренного значения.

    Внимание

    При обновлении кластера с инициализацией узла они применяются ко всем пулам узлов в кластере. После операции повторного создания образа можно просмотреть обновления для инициализации узла.

    az aks update \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $CLUSTER_NAME \
    --node-init-taints "sku=gpu:NoSchedule"
    
  2. Проверьте состояние пула узлов.

  3. Убедитесь, что на узле задана запятая.

Проверка состояния пула узлов

  • После применения тонации или инициализации узла проверьте состояние пула узлов с помощью 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"
        ],
        ...
      },
     ...
    ]
    

Убедитесь, что на узле задана таинт

  • Проверьте инициализацию узлов и инициализации узлов в конфигурации узла с помощью kubectl describe node команды.

    kubectl describe node $NODE_NAME
    

    Если применены фрагменты узлов, в следующем примере выходных данных показано, что <node-pool-name> пул узлов имеет указанный:Taints

    [
        ...
        Name: <node-pool-name>
        ...
        Taints: sku=gpu:NoSchedule
        ...
        ],
        ...
     ...
    ]
    

Удаление оттенков узлов

Удаление определенного узла

  • Удалите тоны узлов с помощью az aks nodepool update команды. В следующем примере команда удаляет "sku=gpu:NoSchedule" фрагмент узла из пула узлов.

    az aks nodepool update \
    --cluster-name $CLUSTER_NAME \
    --name $NODE_POOL_NAME \
    --node-taints "sku=gpu:NoSchedule"
    

Удаление всех оттенков узлов

  • Удалите все фрагменты узлов из пула узлов с помощью az aks nodepool update команды. В следующем примере команда удаляет все тоны узлов из пула узлов.

    az aks nodepool update \
    --cluster-name $CLUSTER_NAME \
    --name $NODE_POOL_NAME \
    --node-taints ""
    

Удаление инициализации узлов

У вас есть следующие параметры, чтобы удалить инициализацию узла с узла:

  • Удалите инициализацию узла временно с помощью API Kubernetes. Если удалить их таким образом, то они вновь появляются после масштабирования узла или обновления. Новые узлы по-прежнему имеют инициализацию узла после масштабирования. Инициализация узла отображается на всех узлах после обновления.
  • Удалите инициализацию узла безвозвратно , разместив узел с помощью API Kubernetes, а затем удалив его с помощью API AKS. После удаления инициализации из спецификации кластера с помощью API AKS вновь созданные узлы после операций повторного создания больше не имеют инициализации инициализации.

При удалении всех вхождений инициализации из реплик пула узлов существующий инициализация может вновь появиться после обновления с новыми инициализациями.

Временно удалить инициализацию узла

  • Временно удалите инициализацию узла с помощью kubectl taint nodes команды.

    Эта команда удаляет запятую только из указанного узла. Если вы хотите удалить фрагмент из каждого узла в пуле узлов, необходимо выполнить команду для каждого узла, из которого требуется удалить фрагмент.

    kubectl taint nodes $NODE_POOL_NAME sku=gpu:NoSchedule-
    

    После удаления инициализация узла повторно появится после масштабирования узла или обновления.

Окончательное удаление инициализации узла

  1. Выполните действия, описанные в разделе "Удалить инициализацию узла", временно чтобы удалить инициализацию узла с помощью API Kubernetes.

  2. Удалите запятую с узла с помощью API AKS с помощью az aks update команды. Эта команда удаляет инициализацию узла из каждого узла в кластере.

    az aks update \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $CLUSTER_NAME \
    --node-init-taints "sku=gpu:NoSchedule"
    

Убедитесь, что с узла удалена ненамеренность

  • Проверьте инициализацию узлов и инициализации узлов в конфигурации узла с помощью kubectl describe node команды.

    kubectl describe node $NODE_NAME
    

    Если вы удалили фрагмент узла, в следующем примере выходных данных показано, что <node-pool-name> пул узлов не содержит удаленный фрагмент в Taintsразделе:

    [
        ...
        Name: <node-pool-name>
        ...
        Taints: 
        ...
        ],
        ...
     ...
    ]
    

Следующие шаги