Kubernetes · 3 min read · Dec 08, 2025
Метки и селекторы в Kubernetes

Метки — это просто пары ключ-значение, присвоенные объектам Kubernetes, таким как Pods, Service и т. д. Метки можно использовать для организации и выбора объектов Kubernetes. Метки можно прикреплять к объектам во время их создания и изменять в любое время. Мы можем добавлять несколько меток к объектам Kubernetes.
Селекторы используются пользователями для выбора набора объектов. Селектор меток является основной группировочной примитивой в Kubernetes. API Kubernetes поддерживает два типа селекторов:
- Селекторы на основе равенства:
Это позволяет фильтровать по ключу и значению, где совпадающие объекты должны удовлетворять всем указанным меткам. - Селекторы на основе множества:
Это позволяет фильтровать ключи в соответствии с набором значений.
Чтобы узнать больше о метках и селекторах, нажмите здесь.
В этой статье мы создадим Pod с метками и перенаправим запросы к нему из сервиса, используя селектор. Мы также выполним операции получения и удаления на Pod и Service, используя метки/селекторы в командной строке.
Предварительные требования
- Кластер Kubernetes с как минимум 1 рабочим узлом.
Если вы хотите научиться создавать кластер Kubernetes, нажмите здесь. Этот гид поможет вам создать кластер Kubernetes с 1 мастером и 2 узлами на AWS Ubuntu 18.04 EC2 Instances.
Что мы будем делать
- Создать Pod и Service с метками и селектором
- Понять метки
Создание Pod и Service с метками и селекторами
Чтобы создать Pod с метками, создайте новый файл и добавьте в него следующий контент.
vim my-lable-demo-pod.ymlapiVersion: v1
kind: Pod
metadata:
name: label-demo-pod
labels:
environment: test
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
Чтобы создать сервис с селектором, создайте файл со следующим определением сервиса, который использует пространство имен по умолчанию.
vim my-selector-demo-service.ymlapiVersion: v1
kind: Service
metadata:
name: selector-demo-service
namespace: default
labels:
environment: test
app: nginx
spec:
externalTrafficPolicy: Local
ports:
- name: http
port: 80
protocol: TCP
targetPort: 80
selector:
app: nginx
type: NodePort
Чтобы создать Pod, выполните следующую команду.
kubectl create -f my-lable-demo-pod.ymlkubectl get pods
Чтобы создать сервис, выполните следующую команду.
kubectl create -f my-selector-demo-service.ymlkubectl get service
Теперь, чтобы проверить, работает ли селектор меток, попробуйте получить доступ к сервису по NodeIP:NodePort.
Здесь IP моего узла — 106.210.138.189, а сервис доступен на порту = 30385.
Поскольку мы можем получить доступ к Pod Nginx, используя созданный нами сервис, это означает, что метка и селектор сработали.
Понять метки
Теперь мы можем выполнять различные операции с Pod и Service, которые мы создали, используя метку.
Чтобы получить Pods, соответствующие метке по нашему выбору, мы можем использовать “–selector” в команде следующим образом.
kubectl get pods --selector environment=testkubectl get pods --selector app=nginx
Мы также можем использовать “-l” вместо “–selector”, чтобы получить Pods, соответствующие метке по нашему выбору.
kubectl get pods -l environment=testkubectl get pods -l environment=prod
Мы даже можем выполнить операцию удаления Pod, указав метку. Pods, соответствующие метке, можно удалить с помощью следующих команд.
kubectl get podskubectl delete pods -l environment=testkubectl get pods
Таким образом, как мы могли удалить Pods, соответствующие меткам, мы также можем удалить сервис.
Чтобы удалить сервис, соответствующий метке, используйте следующую команду. Также, если нет сервиса, соответствующего указанной метке в команде, операция удаления не будет выполнена.
kubectl get servicekubectl delete service -l environemt=testkubectl delete service -l environment=testkubectl get service
Заключение
В этой статье мы создали Pod с метками в нем и создали и указали сервис на эти Pods, соответствующие метке. Мы также увидели, как Pods и Services, соответствующие меткам, могут быть удалены.
Get new posts in your inbox
No spam. Unsubscribe anytime.