Основные объекты Kubernetes: Labels, ReplicaSet и Selectors

Основные объекты Kubernetes: Labels, ReplicaSet и Selectors

Labels и ReplicaSet

Labels — это произвольная пара «ключ-значение».

Labels (метки) — это метаданные в виде пар «ключ-значение» (), используемые для идентификации, организации и фильтрации ресурсов (например, виртуальных машин, подов в Kubernetes). Они позволяют гибко группировать объекты, не меняя их структуру. Метки часто используются для селекторов при мониторинге и управлении инфраструктурой.

Основные характеристики Labels:

  • Гибкость: Пользователь сам определяет имена ключей и значения.
  • Структура: Состоят из уникального ключа и соответствующего ему значения (например, env=productionapp=frontend).
  • Функциональность: Используются для фильтрации, поиска и логической группировки ресурсов.
  • Изменяемость: Метки можно добавлять, удалять или изменять в процессе работы.

Selectors

Selectors (селекторы) в Kubernetes — это механизм фильтрации и группировки объектов (например, Pods, Services, Deployments) на основе их меток (labels). Они позволяют API-серверу находить наборы ресурсов, соответствующих определенным критериям, и являются ключевым инструментом для взаимодействия между компонентами кластера, обеспечивая их связность и управление.

Основные аспекты селекторов:

  • Типы селекторов:
    • Равенство (Equality-based): Фильтрация по точному совпадению ключа и значения метки (например, env=productiontier!=frontend).
    • Набор (Set-based): Фильтрация по списку значений или наличию ключа (например, env in (production, staging)tier notin (backend)partition).
  • Использование: Селекторы используются, например, в сервисах (selector в Service) для выбора подов, на которые нужно перенаправлять трафик, или в контроллерах (labelSelector в Deployment) для управления подами.
  • Логика: Селектор может содержать несколько условий, разделенных запятыми, что работает как логическое И (&&) — объект должен соответствовать всем условиям.
  • Node Selector: Специальный вид селектора (nodeSelector в спецификации пода) позволяет указать, что под должен быть запущен только на узлах с определенными метками. 

Селекторы — это основа для организации логической структуры и взаимодействия приложений в Kubernetes, связывая вместе разные, но связанные объекты.

ReplicaSet

ReplicaSet (RS) в Kubernetes — это контроллер, гарантирующий постоянную работу заданного количества реплик (экземпляров) пода. Он следит за тем, чтобы указанное число подов всегда было активно: если под падает, RS создает новый, а при избытке — удаляет лишние. Это основа для обеспечения отказоустойчивости и масштабирования приложений. 

Ключевые особенности и функции ReplicaSet:

  • Гарантия репликации: ReplicaSet обеспечивает поддержку нужного числа подов, указанного в конфигурации (поле replicas).
  • Управление через метки (Selectors): RS использует селекторы для идентификации подов, которыми он управляет.
  • Самолечение (Self-healing): Если узел, на котором запущен под, выходит из строя, ReplicaSet автоматически запускает замену на другом рабочем узле.
  • Масштабирование: Можно легко изменить количество реплик (увеличить или уменьшить), просто отредактировав конфигурацию ReplicaSet.
  • Связь с Deployment: В современной практике редко используют ReplicaSet напрямую. Обычно им управляет ресурс более высокого уровня — Deployment, который обеспечивает удобные обновления приложений. 

Пример использования:
Если у вас есть приложение, требующее высокого уровня доступности, вы создаете ReplicaSet с replicas: 3. Если один из трех подов будет удален или зависнет, ReplicaSet немедленно создаст новый, чтобы их снова стало трое.

ReplicaSet vs ReplicationController: Разбор контроллеров в Kubernetes

В Kubernetes контроллеры отвечают за поддержание нужного количества запущенных подов. Рассмотрим два основных типа и разберем, в чем их принципиальная разница.

ReplicaSet

ReplicaSet — это современный стандарт обеспечения отказоустойчивости. Его главное преимущество — поддержка set-based селекторов, которые позволяют гибко выбирать группы подов.

Операторы matchExpressions:

  • Inlabel должен совпадать с одним из указанных значений в values.
  • NotInlabel должен не совпадать с указанными значениями в values.
  • Exists — под должен содержать метку с указанным ключом (значение не важно).
  • DoesNotExist — под не должен содержать метку с указанным ключом.

Пример селектора:

selector:
  matchExpressions:
    - key: app
      operator: In
      values:
        - nginx

Манифест ReplicaSet

apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: nginx
  labels:
    app: nginx
    cluster: prod
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx:latest

ReplicationController

ReplicationController — это предшественник ReplicaSet. В современных кластерах он используется редко, так как обладает меньшей гибкостью.

Ключевые отличия:

  1. Нет поддержки set-based селекторов (работает только на прямое равенство key: value).
  2. Умеет сам генерировать селектор, если он не указан явно в спецификации.

Манифест ReplicationController

apiVersion: v1
kind: ReplicationController
metadata:
  name: nginx
spec:
  replicas: 3
  selector:
    app: nginx
  template:
    metadata:
      name: nginx
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx:latest

Важно: В реальных проектах рекомендуется использовать Deployment. Он работает "поверх" ReplicaSet, добавляя механизмы стратегий развертывания (RollingUpdate) и возможность отката версий (Rollback).

Labels and Selectors
Labels are key/value pairs that are attached to objects such as Pods. Labels are intended to be used to specify identifying attributes of objects that are meaningful and relevant to users, but do not directly imply semantics to the core system. Labels can be used to organize and to select subsets of objects. Labels can be attached to objects at creation time and subsequently added and modified at any time.