Kubernetes · 3 min read · Dec 08, 2025

Метки и селекторы в Kubernetes

Метки — это просто пары ключ-значение, присвоенные объектам Kubernetes, таким как Pods, Service и т. д. Метки можно использовать для организации и выбора объектов Kubernetes. Метки можно прикреплять к объектам во время их создания и изменять в любое время. Мы можем добавлять несколько меток к объектам Kubernetes.

Селекторы используются пользователями для выбора набора объектов. Селектор меток является основной группировочной примитивой в Kubernetes. API Kubernetes поддерживает два типа селекторов:

  1. Селекторы на основе равенства:
    Это позволяет фильтровать по ключу и значению, где совпадающие объекты должны удовлетворять всем указанным меткам.
  2. Селекторы на основе множества:
    Это позволяет фильтровать ключи в соответствии с набором значений.

Чтобы узнать больше о метках и селекторах, нажмите здесь.

В этой статье мы создадим Pod с метками и перенаправим запросы к нему из сервиса, используя селектор. Мы также выполним операции получения и удаления на Pod и Service, используя метки/селекторы в командной строке.

Предварительные требования

  1. Кластер Kubernetes с как минимум 1 рабочим узлом.
    Если вы хотите научиться создавать кластер Kubernetes, нажмите здесь. Этот гид поможет вам создать кластер Kubernetes с 1 мастером и 2 узлами на AWS Ubuntu 18.04 EC2 Instances.

Что мы будем делать

  1. Создать Pod и Service с метками и селектором
  2. Понять метки

Создание Pod и Service с метками и селекторами

Чтобы создать Pod с метками, создайте новый файл и добавьте в него следующий контент.

vim my-lable-demo-pod.yml
apiVersion: 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

label-demo-pod

Чтобы создать сервис с селектором, создайте файл со следующим определением сервиса, который использует пространство имен по умолчанию.

vim my-selector-demo-service.yml
apiVersion: 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

selector-demo-service

Чтобы создать Pod, выполните следующую команду.

kubectl create -f my-lable-demo-pod.yml
kubectl get pods

create-pod-with-label

Чтобы создать сервис, выполните следующую команду.

kubectl create -f my-selector-demo-service.yml
kubectl get service

create-service-with-selector

Теперь, чтобы проверить, работает ли селектор меток, попробуйте получить доступ к сервису по NodeIP:NodePort.

Здесь IP моего узла — 106.210.138.189, а сервис доступен на порту = 30385.

Поскольку мы можем получить доступ к Pod Nginx, используя созданный нами сервис, это означает, что метка и селектор сработали.

Понять метки

Теперь мы можем выполнять различные операции с Pod и Service, которые мы создали, используя метку.

Чтобы получить Pods, соответствующие метке по нашему выбору, мы можем использовать “–selector” в команде следующим образом.

kubectl get pods --selector environment=test
kubectl get pods --selector app=nginx

get-pods-with-matching-labels

Мы также можем использовать “-l” вместо “–selector”, чтобы получить Pods, соответствующие метке по нашему выбору.

kubectl get pods -l environment=test
kubectl get pods -l environment=prod

alternative-to-selector-command

Мы даже можем выполнить операцию удаления Pod, указав метку. Pods, соответствующие метке, можно удалить с помощью следующих команд.

kubectl get pods
kubectl delete pods -l environment=test
kubectl get pods

delete-pods-with-matching-label

Таким образом, как мы могли удалить Pods, соответствующие меткам, мы также можем удалить сервис.

Чтобы удалить сервис, соответствующий метке, используйте следующую команду. Также, если нет сервиса, соответствующего указанной метке в команде, операция удаления не будет выполнена.

kubectl get service
kubectl delete service -l environemt=test
kubectl delete service -l environment=test
kubectl get service

delete-service-with-matching-label

Заключение

В этой статье мы создали Pod с метками в нем и создали и указали сервис на эти Pods, соответствующие метке. Мы также увидели, как Pods и Services, соответствующие меткам, могут быть удалены.

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.