labels
Labels (метки) - пары ключ-значение, созданы для того, чтобы присваивать те или иные отметки пользовательским ресурсам кластера k8s. Размеченные ресурсы удобно выбирать с помощью селекторов.
Каждый размечаемый объект кластера может быть отмечен несколькими labels. В контексте разметки отдельного объекта каждый ключ должен иметь уникальное значение.
Метка - дополнительный идентификатор ресурса
Самым простым примером использования меток является: service, который создает сетевую связь с deployment, используя selector по назначенным подам меткам.
# Отмечаем deployment с помощью определенной метки
apiVersion: apps/v1
kind: Deployment
metadata:
name: deploy-name
spec:
replicas: 1
selector: # Указываем поды скакими метками нужно искать
matchLabels:
app: my-label1
template:
metadata:
labels: # Назначаем метки создаваемым подам
app: my-label1
spec:
...
# Сервису указываем поды с какими метками ему следует искать
apiVersion: v1
kind: Service
metadata:
name: service-name
spec:
selector: # В блоке селектор указываем поды с какими метками следует искать
app: my-label1
ports:
- port: 81
targetPort: 80
# Назначаем метки конкретному поду из командной строки
kubectl label pod <pod-name> key1=value1 key2=value2
# Просматриваем метки конкретного ресурса
kubectl get pod <pod-name> --show-labels
# Производим просмотр ресурсов, фильтрую их с помощью меток
kubectl get pods -l key1=value1
# Удаляем конкретную метку
kubectl label pod <pod-name> key1-
# Уточняем выбор указывая несколько меток в селекторе
kubectl get pods -l app=web,env=production
# Исключаем из набора с пощью !=
kubectl get pods -l app!=demo
annotations
Annotations - так же являются парами ключ-значение, но в отличии от меток, информация записанная в аннотациях не несет полезной нагрузки внутри кластера k8s (не используется кубером для управления ресурсами), и применяется лишь в сторонних инструментах.
Примеры использования аннотаций:
- В аннотациях может быть размещена информация полезная для ci/cd систем
- Кастомизация настроек внешних контроллеров