Kubernetes

селектор меток Kubernetesс объяснением каждого условия

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

селектор меток Kubernetes

Метки или ресурсы в JSON

Результаты сопоставления

Данные остаются в браузере. Подключения к кластеру, загрузки на сервер и сетевых запросов нет.

Формат входных данных и синтаксис

= · == · != · in · notin · key · !key. Запятая означает И; пустой селектор выбирает все объекты.

Пределы: JSON — 500 000 символов, селектор — 8 192, ресурсы — 500, условия — 64, метки на ресурс — 256.

Семантика: Kubernetes 1.35 / apimachinery v0.35.0; равенство, наборы и наличие ключа.

Ввод изменился. Перед экспортом повторите проверку.

Иногда селектор меток Kubernetes выбирает больше Pod, чем ожидалось. Условие env!=prod допускает и объект, у которого вообще нет ключа env. Прежде чем менять запрос или Service, полезно посмотреть результаты отдельных условий, а не только итоговое число совпадений.

В режиме меток читается весь объект, в режиме ресурсов — только metadata.labels. Ввод для каждого режима сохраняется отдельно. Поэтому метка с именем metadata не будет ошибочно принята за оболочку ресурса.

Зачем проверять селектор меток Kubernetes?

Найдите условие, исключившее объект

Этот селектор меток Kubernetes вычисляет все условия, даже если первое уже не выполнено. Pod веб-приложения в среде development может пройти app=web и !paused, но не попасть в набор окружений. Отчёт помогает найти конкретное расхождение, не удаляя фильтры наугад.

Три карточки ресурсов проходят цепочку условий; в итоговую группу попадает только карточка, удовлетворяющая всем проверкам.

Отличайте пустое значение от отсутствия ключа

Метка со значением "" существует. У отсутствующего ключа значения нет вовсе. Эти состояния показаны отдельно, поэтому отрицательное условие не придётся ошибочно трактовать как проверку наличия метки.

Карточки с заполненным полем, пустым полем и без поля связаны с разными путями проверки.

Три проверки перед использованием запроса

01

Укажите источник меток

Режим ресурсов принимает объект, массив или тип List либо *List с массивом items. Используется только metadata.labels. Метки из шаблона Pod внутри Deployment автоматически не извлекаются.

02

Проверьте случай без ключа

Замените production на development, затем удалите environment и сравните in с notin. Автопроверка запускается через 350 мс после остановки ввода. В ручном режиме доступны кнопка и Ctrl/Cmd + Enter.

03

Откройте подробности до экспорта

Разверните ресурс, чтобы увидеть метки и все условия. На экран выводится по 50 объектов, но копирование и скачивание включают весь отчёт. Любое изменение ввода блокирует экспорт до получения нового результата.

Синтаксис меток и причины выбора в одном отчёте

Разные правила для ключей и значений

Необязательный DNS-префикс состоит из строчных символов и не превышает 253 знака. Имя содержит 1–63 допустимых ASCII-символа; прописные буквы разрешены. Значение может быть пустым или содержать до 63 символов. Зарезервированный префикс сам по себе не нарушает синтаксис.

Равенство, наборы и наличие ключа

Селекторы меток поддерживают =, ==, !=, in и notin. Запятая между условиями означает И. Условие на основе набора позволяет перечислить альтернативы одного ключа внутри in. Несколько равенств с одним ключом сужают выбор, а не заменяют ИЛИ.

Отдельный результат для каждого ресурса

Сохраняются индекс, JSON-путь и переданные тип, пространство имён и имя. Отсутствующее или null-поле metadata либо labels считается пустым набором меток. Ресурсы с одинаковыми именами не объединяются, поэтому ни один объект не исчезает из отчёта.

Без незаметного преобразования типов

При проверке «метки и селекторы» строки "01" и "1" остаются разными. Числа, логические значения и null не преобразуются в строки, а вызывают ошибку. Повторяющиеся ключи JSON тоже отклоняются, чтобы позднее значение не скрыло исходное.

Границы входных данных и выводов

Определённая часть строкового синтаксиса
Основа — Kubernetes 1.35 / apimachinery v0.35.0 для равенства, наборов и наличия ключа. Числовые < и >, ИЛИ между ключами, шаблоны, регулярные выражения, field selectors и правила node affinity не поддерживаются.
Строгий JSON и явный выбор режима
Комментарии и завершающие запятые запрещены. YAML, файлы, URL и структурированные matchLabels или matchExpressions не принимаются. Для типа List нужен массив items. У обычного ресурса проверяется только собственное metadata.labels, без поиска подходящих полей в глубине объекта.
Ошибка останавливает весь пакет
Пределы: 500 000 символов JSON, 8 192 символа селектора, 500 ресурсов, 64 условия, 256 меток на ресурс. Символы считаются в кодовых единицах UTF-16. Также действуют глубина 100, 50 000 узлов и 1 000 символов на число. Недопустимые объекты не пропускаются ради частичного результата.
Пустая строка не универсальна для всех API
Здесь пустой селектор выбирает все допустимые объекты, включая пустой набор меток. Пустое поле JSON означает отсутствие ввода; для пустого объекта нужен {}. У Service и структурированных null-селекторов возможны другие правила, которые этот отчёт не проверяет.
Снимок проверки вместо манифеста
Экспорт содержит идентификационные поля, метки и результаты условий; остальные поля ресурса исключаются. Инструмент не исправляет метки и не проверяет готовность Pod, endpoints, маршрутизацию или владельца-контроллер. Получите объекты через kubectl и отдельно проверьте фактическое состояние кластера.

Вопросы по теме «селектор меток Kubernetes»

Как выбрать Pod по нескольким меткам?

Разделите условия запятыми: app=web,environment=production. Должны выполняться оба. Если у ключа есть DNS-префикс, сохраните его: app.kubernetes.io/name и name — разные метки.

Можно ли соединить условия через ИЛИ?

Между разными ключами — нет. Для нескольких значений одного ключа используйте environment in (production,staging). Два равенства через запятую означают одновременное выполнение и могут не дать ни одного совпадения.

Допустима ли метка с ключом, но без значения?

Да: в JSON это {"maintenance":""}. maintenance проверяет наличие ключа, maintenance= — наличие пустой строки, !maintenance — отсутствие ключа. Строковое maintenance in () тоже содержит одну пустую строку, а не набор без элементов.

Как посчитать ресурсы без определённой метки?

Используйте !key и посмотрите число совпадений. Это отсутствие конкретного ключа, а не обязательно всех меток. Здесь считаются только переданные объекты; для общего числа по кластеру сначала получите полный список нужных ресурсов.

Почему env!=prod подходит объекту без env?

!= и notin допускают отсутствующий ключ. Если env должен существовать и отличаться от prod, напишите env,env!=prod. Объяснение условий показывает отдельно отсутствие ключа и наличие другого значения.

Остался вопрос о селекторе?

Проверьте реальные метки из входных данных

Запустите селектор меток Kubernetes для текущего JSON и разберите невыполненные условия перед изменением конфигурации рабочей нагрузки.