Sobes.tech
Junior

Czym jest selektor?

sobes.tech AI

Odpowiedź od AI

Selekcja w kontekście Kubernetes (i nie tylko) to etykieta (lub zestaw etykiet) używana do wyboru (filtrowania) określonych zasobów. Umożliwia powiązanie zasobów ze sobą na podstawie ich metadanych.

Zastosowania selektorów w Kubernetes:

  • Pod Selector w Deployment/ReplicaSet: Określa, które pody są zarządzane przez ten kontroler.
  • Selector usługi: Wskazuje, które pody będą otrzymywać ruch skierowany do usługi.
  • Selector w Node w specyfikacji poda: Określa węzły klastra, na których może być uruchomiony pod.
  • Selector NetworkPolicy: Używany do stosowania polityk sieciowych do określonych podów lub przestrzeni nazw.
  • Selector zakresu ResourceQuota: Może ograniczać kwoty zasobów dla określonych obiektów.

Przykład selektora Pod w YAML dla usługi:

// Definicja usługi
apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app: my-app // Selekcja: usługa będzie kierować ruch do podów z etykietą app: my-app
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080

Przykład podów z odpowiednimi etykietami:

// Definicja poda 1
apiVersion: v1
kind: Pod
metadata:
  name: my-app-pod-1
  labels: // Pody z tymi etykietami będą wybrane przez usługę
    app: my-app
    version: v1
spec:
  containers:
  - name: my-container
    image: my-image

// Definicja poda 2 (również będzie wybrany przez usługę)
apiVersion: v1
kind: Pod
metadata:
  name: my-app-pod-2
  labels:
    app: my-app
    env: production
spec:
  containers:
  - name: my-container
    image: my-image

Selekcje mają dwa typy:

  • Równość (Equality-based): Oparte na dokładnym dopasowaniu klucza i/lub wartości. Przykłady operatorów: =, ==, !=.
  • Oparte na zbiorach (Set-based): Używają zbiorów wartości. Przykłady operatorów: in, notin, exists (sprawdzenie istnienia klucza), !exists (sprawdzenie braku klucza).

Przykład selektora oparty na zbiorach:

// Wybierz pody z etykietą "environment" z wartością "production" lub "staging"
selector:
  matchLabels:
    app: frontend
  matchExpressions: // Wyrażenie oparte na zbiorach
    - key: environment
      operator: In
      values:
        - production
        - staging

// Wybierz pody, które nie mają etykiety "beta"
selector:
  matchExpressions:
    - key: beta
      operator: DoesNotExist

W związku z tym selektory są podstawowym mechanizmem w Kubernetes do zapewnienia połączeń i zarządzania zasobami na podstawie ich metadanych.