В чем разница между Label и Selector в Kubernetes?

«В чем разница между Label и Selector в Kubernetes?» — вопрос из категории Kubernetes, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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 для управления их количеством.
  • Типы селекторов:
    1. Equality-based (matchLabels): Выбор по точному совпадению ключа и значения.
    2. Set-based (matchExpressions): Более гибкие условия (In, NotIn, Exists, DoesNotExist).
  • Пример 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) — это запрос: "Дайте мне все книги, где Жанр=Фантастика и Автор=Иванов".