Что такое селектор в Kubernetes
Что проверяют
Понимаете ли, что связи между объектами в кластере держатся на метках, а не на именах. Это основа, на которой стоят маршрутизация трафика, владение подами и сетевые политики, и ошибка тут ломает выкатку тихо.
Как отвечать
Селектор по меткам выбирает объекты по парам ключ и значение. Форм две: простое равенство, то есть карта matchLabels или флаг -l app=api в командной строке, и множественная форма matchExpressions с операторами In, NotIn, Exists, DoesNotExist. Сервис поддерживает только простую карту равенств, а контроллеры и сетевые политики умеют обе формы.
Где это применяется. Service по селектору находит поды и формирует список конечных точек, поэтому трафик идёт не через Deployment, а напрямую к подам с подходящими метками. Контроллеры (Deployment, ReplicaSet, StatefulSet, Job) по селектору определяют, какие поды считают своими, и селектор обязан совпадать с метками в шаблоне пода. В Deployment поле селектора неизменяемо после создания, смена требует пересоздания объекта. В сетевых политиках отбор идёт через podSelector и namespaceSelector, причём пустой селектор означает выбор всех объектов, а не ни одного.
Отдельная сущность это селектор по полям, --field-selector status.phase=Running, он фильтрует не по меткам, а по полям объекта, и набор доступных полей ограничен. Размещение подов по узлам это nodeSelector и более гибкие правила сродства.
Где спотыкаются
Считают, что сервис связан с деплойментом. Связи нет: сервис смотрит на метки подов. Один забытый под со старой версией и подходящей меткой продолжит принимать часть трафика, и отладка выглядит как случайные ошибки у части запросов.
Делают пересекающиеся селекторы у двух контроллеров. Оба считают одни и те же поды своими, начинают их создавать и удалять по очереди, и в кластере появляется постоянное шевеление без видимой причины.
Путают селектор по меткам с селектором по полям, пишут состояние пода в matchLabels или сокращают путь к полю до одного слова. Метка это то, что вы сами повесили на объект, а состояние это поле, которое ведёт сам кластер, и фильтровать их надо разными механизмами.