Sobes.tech
Junior

Cos'è un selettore?

sobes.tech AI

Risposta dell'AI

Lo selector nel contesto di Kubernetes (e non solo) è un'etichetta (o un insieme di etichette) utilizzata per selezionare (filtrare) determinate risorse. Permette di collegare risorse tra loro in base ai loro metadati.

Applicazioni degli selector in Kubernetes:

  • Selector di Pod in Deployment/ReplicaSet: Definisce quali pod sono gestiti da questo controller.
  • Selector di Service: Indica quali pod riceveranno il traffico diretto al servizio.
  • Selector di Nodo nella Specifica del Pod: Definisce i nodi del cluster su cui può essere eseguito un pod.
  • Selector di NetworkPolicy: Viene usato per applicare politiche di rete a determinati pod o namespace.
  • Selector di Scope ResourceQuota: Può limitare le quote di risorse per oggetti specifici.

Esempio di Selector di Pod in YAML di Service:

// Definizione del servizio
apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app: my-app // Selector: il servizio indirizzerà il traffico ai pod con l'etichetta app: my-app
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080

Esempio di Pod con etichette corrispondenti:

// Definizione del Pod 1
apiVersion: v1
kind: Pod
metadata:
  name: my-app-pod-1
  labels: // Pod con queste etichette saranno selezionati dal servizio
    app: my-app
    version: v1
spec:
  containers:
  - name: my-container
    image: my-image

// Definizione del Pod 2 (anch'esso sarà selezionato dal servizio)
apiVersion: v1
kind: Pod
metadata:
  name: my-app-pod-2
  labels:
    app: my-app
    env: production
spec:
  containers:
  - name: my-container
    image: my-image

I selector hanno due tipi:

  • Uguaglianza (Equality-based): Basati su una corrispondenza esatta di chiave e/o valore. Esempi di operatori: =, ==, !=.
  • Basati su set (Set-based): Utilizzano insiemi di valori. Esempi di operatori: in, notin, exists (controllo della presenza della chiave), !exists (controllo dell'assenza della chiave).

Esempio di selector basato su set:

// Selezionare pod con etichetta "environment" con valore "production" o "staging"
selector:
  matchLabels:
    app: frontend
  matchExpressions: // Espressione basata su set
    - key: environment
      operator: In
      values:
        - production
        - staging

// Selezionare pod che non hanno l'etichetta "beta"
selector:
  matchExpressions:
    - key: beta
      operator: DoesNotExist

Pertanto, gli selector sono un meccanismo fondamentale in Kubernetes per garantire connessioni e gestione delle risorse in base ai loro metadati.