Что такое 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, вы можете обратиться к этой статье и найти всю необходимую информацию.