Labels и ReplicaSet
Labels — это произвольная пара «ключ-значение».
Labels (метки) — это метаданные в виде пар «ключ-значение» (), используемые для идентификации, организации и фильтрации ресурсов (например, виртуальных машин, подов в Kubernetes). Они позволяют гибко группировать объекты, не меняя их структуру. Метки часто используются для селекторов при мониторинге и управлении инфраструктурой.
Основные характеристики Labels:
- Гибкость: Пользователь сам определяет имена ключей и значения.
- Структура: Состоят из уникального ключа и соответствующего ему значения (например,
env=production,app=frontend). - Функциональность: Используются для фильтрации, поиска и логической группировки ресурсов.
- Изменяемость: Метки можно добавлять, удалять или изменять в процессе работы.
Selectors
Selectors (селекторы) в Kubernetes — это механизм фильтрации и группировки объектов (например, Pods, Services, Deployments) на основе их меток (labels). Они позволяют API-серверу находить наборы ресурсов, соответствующих определенным критериям, и являются ключевым инструментом для взаимодействия между компонентами кластера, обеспечивая их связность и управление.
Основные аспекты селекторов:
- Типы селекторов:
- Равенство (Equality-based): Фильтрация по точному совпадению ключа и значения метки (например,
env=production,tier!=frontend). - Набор (Set-based): Фильтрация по списку значений или наличию ключа (например,
env in (production, staging),tier notin (backend),partition).
- Равенство (Equality-based): Фильтрация по точному совпадению ключа и значения метки (например,
- Использование: Селекторы используются, например, в сервисах (
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:
- In —
labelдолжен совпадать с одним из указанных значений вvalues. - NotIn —
labelдолжен не совпадать с указанными значениями в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. В современных кластерах он используется редко, так как обладает меньшей гибкостью.
Ключевые отличия:
- Нет поддержки set-based селекторов (работает только на прямое равенство
key: value). - Умеет сам генерировать селектор, если он не указан явно в спецификации.
Манифест 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).

