Sobes.tech
Junior

O que é um seletor?

sobes.tech IA

Resposta da IA

O seletor no contexto do Kubernetes (e não só) é uma etiqueta (ou conjunto de etiquetas) usada para selecionar (filtrar) certos recursos. Permite ligar recursos entre si com base nos seus metadados.

Aplicações de seletores no Kubernetes:

  • Selector de Pod em Deployment/ReplicaSet: Define quais os pods geridos por este controlador.
  • Selector de Serviço: Indica quais os pods receberão o tráfego dirigido ao serviço.
  • Selector de Nó na Especificação do Pod: Define os nós do cluster nos quais um pod pode ser executado.
  • Selector de NetworkPolicy: Usado para aplicar políticas de rede a pods ou espaços de nomes específicos.
  • Selector de Escopo de ResourceQuota: Pode limitar as quotas de recursos para objetos específicos.

Exemplo de Selector de Pods em YAML de Serviço:

// Definição do serviço
apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app: my-app // Selector: o serviço irá direcionar o tráfego para pods com a etiqueta app: my-app
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080

Exemplo de Pods com etiquetas correspondentes:

// Definição do Pod 1
apiVersion: v1
kind: Pod
metadata:
  name: my-app-pod-1
  labels: // Pods com estas etiquetas serão selecionados pelo serviço
    app: my-app
    version: v1
spec:
  containers:
  - name: my-container
    image: my-image

// Definição do Pod 2 (também será selecionado pelo serviço)
apiVersion: v1
kind: Pod
metadata:
  name: my-app-pod-2
  labels:
    app: my-app
    env: production
spec:
  containers:
  - name: my-container
    image: my-image

Os seletores têm dois tipos:

  • Igualdade (Baseado em igualdade): Baseados numa correspondência exata de chave e/ou valor. Exemplos de operadores: =, ==, !=.
  • Baseados em conjuntos (Set-based): Utilizam conjuntos de valores. Exemplos de operadores: in, notin, exists (verificação da existência de chave), !exists (verificação da ausência de chave).

Exemplo de seletor baseado em conjuntos:

// Selecionar pods com a etiqueta "environment" com valor "production" ou "staging"
selector:
  matchLabels:
    app: frontend
  matchExpressions: // Expressão baseada em conjuntos
    - key: environment
      operator: In
      values:
        - production
        - staging

// Selecionar pods que não têm a etiqueta "beta"
selector:
  matchExpressions:
    - key: beta
      operator: DoesNotExist

Assim, os seletores são um mecanismo fundamental no Kubernetes para garantir ligações e gestão de recursos com base nos seus metadados.