Ответ
Лейблы (Labels) — это пары ключ-значение, которые присваиваются объектам Kubernetes (подам, нодам, сервисам, деплойментам и т.д.) для организации и селекции. Они не несут семантического значения для ядра Kubernetes, но позволяют пользователям и инструментам структурировать свои объекты.
Основное применение:
- Идентификация и группировка: Например, для обозначения компонентов приложения (
app: frontend,tier: backend). - Управление жизненным циклом: Разделение по окружениям (
env: production,env: staging). - Выбор объектов: Селекторы (Selectors) в деплойментах, сервисах и DaemonSets используют лейблы для определения, с какими подами они работают.
- Масштабирование и отладка: Упрощают фильтрацию объектов в командах
kubectl get pods -l app=api.
Пример в манифесте пода:
apiVersion: v1
kind: Pod
metadata:
name: my-app-pod
labels:
app: my-application
version: "v1.2"
environment: production
spec:
containers:
- name: nginx
image: nginx:1.21
Пример селектора в сервисе:
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: my-application # Сервис будет направлять трафик на все поды с этим лейблом
ports:
- protocol: TCP
port: 80
targetPort: 9376
Аннотации (Annotations) — это схожий механизм для хранения произвольной нефункциональной метаинформации (описание, контактные данные, контрольные суммы), которая не используется для селекции.