Sobes.tech
Junior

Какво е селектор?

sobes.tech AI

Отговор от AI

Селекторът в контекста на Kubernetes (и не само) е етикет (или набор от етикети), използван за избор (филтриране) на определени ресурси. Той позволява да се свържат ресурси въз основа на техните метаданни.

Използване на селектори в Kubernetes:

  • Pod Selector в Deployment/ReplicaSet: Определя кои подове се управляват от този контролер.
  • Service Selector: Посочва кои подове ще получават трафик, насочен към услугата.
  • Node Selector в Pod Specification: Определя възлите на клъстера, на които може да бъде стартиран под.
  • NetworkPolicy Selector: Използва се за прилагане на мрежови политики към определени подове или пространства от имена.
  • ResourceQuota Scope Selector: Може да ограничи квоти за ресурси за определени обекти.

Пример за Pod Selector в YAML на Service:

// Дефиниция на Service
apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app: my-app // Селектор: услугата ще насочва трафик към подове с етикет app: my-app
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080

Пример за Pods с съответните етикети:

// Дефиниция на Pod 1
apiVersion: v1
kind: Pod
metadata:
  name: my-app-pod-1
  labels: // Подовете с тези етикети ще бъдат избрани от услугата
    app: my-app
    version: v1
spec:
  containers:
  - name: my-container
    image: my-image

// Дефиниция на Pod 2 (също ще бъде избран от услугата)
apiVersion: v1
kind: Pod
metadata:
  name: my-app-pod-2
  labels:
    app: my-app
    env: production
spec:
  containers:
  - name: my-container
    image: my-image

Селекторите са два вида:

  • Равенство (Equality-based): Основават се на точно съвпадение на ключ и/или стойност. Примери за оператори: =, ==, !=.
  • Основавани на множества (Set-based): Използват набори от стойности. Примери за оператори: in, notin, exists (проверка за наличие на ключ), !exists (проверка за липса на ключ).

Пример за Set-based селектор:

// Избира подове с етикет "environment" със стойност "production" или "staging"
selector:
  matchLabels:
    app: frontend
  matchExpressions: // Set-based израз
    - key: environment
      operator: In
      values:
        - production
        - staging

// Избира подове, които нямат етикет "beta"
selector:
  matchExpressions:
    - key: beta
      operator: DoesNotExist

Така селекторите са фундаментален механизъм в Kubernetes за осигуряване на връзки и управление на ресурси въз основа на техните метаданни.