Как использовать Kubernetes nodeSelector

Kak Ispol Zovat Kubernetes Nodeselector



Кластер Kubernetes использует ограничения планирования, такие как: taints, метки, допуски и nodeSelector, чтобы разделять и планировать рабочую нагрузку на разных пулах узлов. Ограничения планирования — это обычное требование в Kubernetes для управления инфраструктурой. В этой статье мы сосредоточимся на ограничениях планирования nodeSelector. Мы рассмотрим, что такое nodeSelector, как он работает и как его можно использовать в Kubernetes. Мы представим простой сценарий, который поможет вам понять, как эффективно использовать Kubernetes nodeSelector.

Что такое Kubernetes nodeSelector?

NodeSelector — это ограничение планирования в Kubernetes, которое задает карту в виде пары «ключ: значение». Пользовательские селекторы модулей и метки узлов используются для определения пары «ключ — значение». NodeSelector, помеченный на узле, должен совпадать с парой ключ: значение, чтобы определенный модуль можно было запустить на определенном узле. Для планирования модуля на узлах используются метки, а на модулях — селекторы узлов. Контейнерная платформа OpenShift планирует модули на узлах с помощью nodeSelector путем сопоставления меток.

Кроме того, метки и nodeSelector используются для управления тем, какой модуль должен быть запланирован на конкретном узле. Когда вы используете метки и nodeSelector, сначала пометьте узел, чтобы модули не были отменены, а затем добавьте nodeSelector в модуль. Чтобы разместить определенный pod на определенном узле, используется nodeSelector, в то время как nodeSelector для всего кластера позволяет разместить новый pod на определенном узле, присутствующем в любом месте кластера. NodeSelector проекта используется для размещения нового модуля на определенном узле в проекте.







Предпосылки

Чтобы использовать Kubernetes nodeSelector, убедитесь, что в вашей системе установлены следующие инструменты:



  • Ubuntu 20.04 или любая другая последняя версия
  • Кластер Minikube с минимум одним рабочим узлом
  • Инструмент командной строки Kubectl

Теперь мы переходим к следующему разделу, где мы покажем, как вы можете использовать nodeSelector в кластере Kubernetes.



Конфигурация nodeSelector в Kubernetes

Модуль может быть ограничен для запуска только на определенном узле с помощью nodeSelector. NodeSelector — это ограничение выбора узла, указанное в спецификации PodSpec. Проще говоря, nodeSelector — это функция планирования, которая дает вам контроль над модулем для планирования модуля на узле с той же меткой, которая указана пользователем для метки nodeSelector. Чтобы использовать или настроить nodeSelector в Kubernetes, вам понадобится кластер minikube. Запустите кластер minikube с помощью приведенной ниже команды:





> запустить миникуб

Теперь, когда кластер minikube успешно запущен, мы можем приступить к реализации конфигурации nodeSelector в Kubernetes. В этом документе мы поможем вам создать два развертывания: одно без nodeSelector, а другое с nodeSelector.



Настройка развертывания без nodeSelector

Во-первых, мы извлечем сведения обо всех узлах, которые в настоящее время активны в кластере, с помощью приведенной ниже команды:

> kubectl получить узлы

Эта команда выведет список всех узлов, присутствующих в кластере, с подробной информацией об имени, статусе, ролях, возрасте и параметрах версии. См. пример вывода, приведенный ниже:

Теперь мы проверим, какие taints активны на узлах в кластере, чтобы соответствующим образом спланировать развертывание модулей на узле. Приведенную ниже команду следует использовать для получения описания испорченных данных, примененных к узлу. На узле не должно быть активных taints, чтобы на нем можно было легко развернуть pod’ы. Итак, давайте посмотрим, какие taints активны в кластере, выполнив следующую команду:

> kubectl описывает узлы minikube | схватить порча

Из вывода, приведенного выше, мы видим, что к узлу не применяется taint, а именно то, что нам нужно для развертывания модулей на узле. Теперь следующим шагом будет создание развертывания без указания в нем какого-либо nodeSelector. В этом отношении мы будем использовать файл YAML, в котором будем хранить конфигурацию nodeSelector. Прикрепленная здесь команда будет использоваться для создания файла YAML:

> нано деплонд.yaml

Здесь мы пытаемся создать файл YAML с именем deplond.yaml с помощью команды nano.

После выполнения этой команды у нас будет файл deplond.yaml, в котором мы будем хранить конфигурацию развертывания. См. приведенную ниже конфигурацию развертывания:

Теперь мы создадим развертывание с помощью файла конфигурации развертывания. Файл deplond.yaml будет использоваться вместе с командой «создать» для создания конфигурации. См. полную команду, приведенную ниже:

> кубектл создать -f деплонд.yaml

Как показано выше, развертывание было успешно создано, но без nodeSelector. Теперь давайте проверим узлы, которые уже доступны в кластере, с помощью приведенной ниже команды:

> kubectl получить стручки

В нем будут перечислены все модули, доступные в кластере. См. вывод, приведенный ниже:

  Текстовое описание генерируется автоматически

Далее нам нужно изменить количество реплик, что можно сделать, отредактировав файл deplond.yaml. Просто откройте файл deplond.yaml и отредактируйте значение реплик. Здесь мы меняем реплики: 3 на реплики: 30. См. изменение на снимке ниже:

Теперь изменения необходимо применить к развертыванию из файла определения развертывания, и это можно сделать с помощью следующей команды:

> применить кубектл -f деплонд.yaml

  Текстовое описание генерируется автоматически

Теперь давайте проверим более подробную информацию о модулях, используя параметр -o wide:

> kubectl получить стручки -The широкий

  Текстовое описание генерируется автоматически

Из выходных данных, приведенных выше, мы видим, что новые узлы создаются и планируются на узле, поскольку на узле, который мы используем из кластера, нет активного заражения. Следовательно, нам специально нужно активировать taint, чтобы гарантировать, что модули будут запланированы только на нужном узле. Для этого нам нужно создать метку на главном узле:

> узлы метки kubectl master on-master= истинный

Настройка развертывания с помощью nodeSelector

Чтобы настроить развертывание с помощью nodeSelector, мы будем следовать тому же процессу, что и для настройки развертывания без какого-либо nodeSelector.

Сначала мы создадим файл YAML с помощью команды «nano», в котором нам нужно сохранить конфигурацию развертывания.

> нано nd.yaml

Теперь сохраните определение развертывания в файле. Вы можете сравнить оба файла конфигурации, чтобы увидеть разницу между определениями конфигурации.

Теперь создайте развертывание nodeSelector с помощью приведенной ниже команды:

> кубектл создать -f nd.yaml

Получите подробную информацию о модулях, используя флаг -o wide:

> kubectl получить стручки -The широкий

  Текст, календарь Описание генерируется автоматически со средней достоверностью

Из вывода, приведенного выше, мы можем заметить, что модули развертываются на узле minikube. Давайте изменим количество реплик, чтобы проверить, где новые модули развертываются в кластере.

Примените новые изменения к развертыванию с помощью следующей команды:

> применить кубектл -f nd.yaml

  Текстовое описание генерируется автоматически

Заключение

В этой статье мы рассмотрели ограничение конфигурации nodeSelector в Kubernetes. Мы узнали, что такое nodeSelector в Kubernetes, и с помощью простого сценария научились создавать развертывание с ограничениями конфигурации nodeSelector и без них. Если вы не знакомы с концепцией nodeSelector, вы можете обратиться к этой статье и найти всю необходимую информацию.