Кластер использует метки ролей узлов Kubernetes node-role.kubernetes.io/<role> для назначения различных ролей узлам. Для удобства описания мы называем этот тип меток метками ролей.
По умолчанию в кластере содержатся два типа узлов: узлы управляющей плоскости и рабочие узлы, которые используются для размещения рабочих нагрузок управляющей плоскости и приложений соответственно.
В кластере:
Узлы управляющей плоскости помечены меткой роли node-role.kubernetes.io/control-plane.
Примечание:
До версии Kubernetes v1.24 сообщество также использовало метку
node-role.kubernetes.io/masterдля обозначения узлов управляющей плоскости. Для обратной совместимости обе метки считаются действительными для идентификации узлов управляющей плоскости.
Рабочие узлы по умолчанию не имеют меток ролей. Однако при необходимости вы можете явно назначить рабочему узлу метку роли node-role.kubernetes.io/worker.
Помимо этих стандартных меток ролей, вы также можете определить пользовательские метки ролей на рабочих узлах для их дальнейшей классификации по функциональным типам. Например:
Вы можете добавить метку роли node-role.kubernetes.io/infra, чтобы обозначить узел как infra-узел, предназначенный для размещения инфраструктурных компонентов.
Вы можете добавить метку роли node-role.kubernetes.io/log, чтобы обозначить узел как лог-узел, специализированный для размещения компонентов логирования.
В этом документе описывается процесс создания infra-узлов и узлов с пользовательскими ролями, а также миграция рабочих нагрузок на эти узлы.
По умолчанию кластер содержит только узлы управляющей плоскости и рабочие узлы. Если вы хотите назначить некоторые рабочие узлы как infra-узлы, предназначенные для размещения инфраструктурных компонентов, необходимо вручную добавить соответствующую метку роли и taint этим узлам.
Примечание:
Операции, описанные в этом разделе, применимы только к немодифицируемым кластерам. То есть следующие операции не поддерживаются в облачных кластерах (например, управляемых кластерах EKS, развернутых через
Alauda Container Platform EKS ProviderCluster Plugin), сторонних кластерах или кластерах, где узлы используют немодифицируемую ОС.
Эта команда добавляет метку роли infra к узлу 192.168.143.133: node-role.kubernetes.io/infra: "", указывая, что узел является infra-узлом.
Добавьте taint, чтобы предотвратить планирование других рабочих нагрузок на infra-узел.
Эта команда добавляет taint node-role.kubernetes.io/infra=reserved:NoSchedule к узлу 192.168.143.133, указывая, что на этот узел могут быть запланированы только приложения, которые терпят этот taint.
Проверьте, назначены ли узлу метка роли infra и taint:
Вывод показывает, что узел 192.168.143.133 настроен как infra-узел и имеет taint node-role.kubernetes.io/infra=reserved:NoSchedule.
Если вы хотите запланировать конкретный Pod на infra-узлы, необходимо выполнить следующие настройки:
Ниже приведён пример манифеста Deployment, настроенного для запуска на infra-узле.
nodeSelector гарантирует, что Pod будет запланирован только на узлах с меткой node-role.kubernetes.io/infra: "",
а toleration позволяет Pod терпеть taint node-role.kubernetes.io/infra=reserved:NoSchedule.
С такими настройками Pod будет запланирован на infra-узле.
Примечание:
Перемещение Pod, установленных через OLM Operators или Cluster Plugins, на infra-узел не всегда возможно. Возможность перемещения таких Pod зависит от конфигурации каждого Operator или Cluster Plugin.
Помимо infra-узлов, вы можете назначить рабочие узлы для других специализированных целей — например, для размещения компонентов логирования, сервисов хранения или агентов мониторинга.
Это можно сделать, назначив дополнительные пользовательские метки ролей и соответствующие taint рабочим узлам, эффективно превращая их в узлы с пользовательскими ролями.
Процесс аналогичен созданию infra-узлов.
Замените <role> на желаемое имя роли, например monitoring, storage или log.
Замените <role> на имя вашей пользовательской роли, а <value> — на осмысленное описание, например reserved или dedicated. Это значение необязательно, но полезно для документации и ясности.
Убедитесь, что поля Labels и Taints отражают вашу конфигурацию пользовательской роли.
Если вы хотите создать узел специально для установки компонентов логирования, можно добавить роль log. В этом случае создайте log-узел следующим образом.
Эта метка указывает, что узел предназначен для рабочих нагрузок, связанных с логированием.
Этот taint предотвращает развертывание незапланированных рабочих нагрузок на узле.
Это подтверждает, что узел успешно настроен как log-узел с соответствующей меткой и taint.
Следуя приведённым рекомендациям, вы сможете эффективно разделить узлы Kubernetes по их назначению, улучшить изоляцию рабочих нагрузок и обеспечить развертывание конкретных компонентов на соответствующим образом настроенных узлах.