Ответ
Labels и Selectors — это ключевые механизмы организации и связывания объектов в Kubernetes. Они работают в паре.
Labels (Метки)
- Что это: Пары ключ=значение, которые присоединяются к объектам Kubernetes (Pods, Services, Deployments, Nodes и т.д.).
- Назначение: Добавлять идентифицирующие, структурированные метаданные объектам для их организации и выборки. Они не влияют на логику работы самого объекта.
- Синтаксис: Ключи могут иметь префикс (опционально, указывает на домен). Значения — произвольные строки.
- Пример в манифесте Pod:
apiVersion: v1 kind: Pod metadata: name: frontend-pod labels: app: frontend # Имя приложения tier: web # Уровень (веб-интерфейс) env: production # Окружение version: v1.2.3 # Версия spec: containers: - name: nginx image: nginx:1.21
Selectors (Селекторы)
- Что это: Условия, по которым одни объекты Kubernetes находят и выбирают другие объекты на основе их
Labels. - Назначение: Установление логических связей между объектами. Например, Service находит Pods для маршрутизации трафика, а ReplicaSet находит Pods для управления их количеством.
- Типы селекторов:
- Equality-based (
matchLabels): Выбор по точному совпадению ключа и значения. - Set-based (
matchExpressions): Более гибкие условия (In, NotIn, Exists, DoesNotExist).
- Equality-based (
- Пример Selector в Service:
apiVersion: v1 kind: Service metadata: name: frontend-service spec: selector: # Селектор определяет, какие Pods будут целевыми для этого Service app: frontend # Сервис будет направлять трафик на все Pods с label `app=frontend` tier: web ports: - port: 80 targetPort: 80
Ключевая разница:
- Label — это метка (тег), которую вы вешаете на объект.
- Selector — это запрос (фильтр), который вы используете для поиска объектов с определенными метками.
Аналогия: Представьте книги в библиотеке (Pods). Labels — это наклейки на корешках: "Жанр: Фантастика", "Автор: Иванов". Selector у библиотекаря (Service) — это запрос: "Дайте мне все книги, где Жанр=Фантастика и Автор=Иванов".