Sobes.tech
Middle

Co oznacza termin 'eviction' lub 'evict' w kontekście DevOps?

sobes.tech AI

Odpowiedź od AI

W kontekście DevOps, szczególnie podczas pracy z systemami orkiestracji kontenerów takich jak Kubernetes, "eviction" (lub proces "evict") oznacza wymuszone usunięcie (eksmisję) Pod z węzła.

Zazwyczaj dzieje się to z powodu braku zasobów na węźle, takich jak:

  • Przestrzeń dyskowa: Węzeł zbliża się do wyczerpania przestrzeni dyskowej potrzebnej do działania Podów, logów, obrazów kontenerów itp.
  • Pamięć: System na węźle napotyka na niedobór pamięci RAM.

Gdy węzeł osiąga określony próg wykorzystania zasobów (ustawiony w Kubelet), rozpoczyna się proces wymuszonego usunięcia, aby zapobiec całkowitemu awarii węzła i utrzymać jego stabilność. Priorytet w wymuszeniu usunięcia mają Pod-y z niższym priorytetem (PriorityClass) oraz te, które zużywają więcej zasobów, przekraczając ustawione limity (QoS typu burstable lub best-effort).

// Przykład manifestu Pod z określonymi zasobami
apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
  - name: my-container
    image: nginx
    resources:
      requests:
        memory: "64Mi"
        cpu: "250m"
      limits:
        memory: "128Mi"
        cpu: "500m"
  priorityClassName: high-priority // Przykład użycia PriorityClass

Wymuszony Pod jest oznaczony jako Evicted, po czym kontroler (np. Deployment) tworzy nową instancję Pod na innym węźle z odpowiednimi zasobami.

Zarządzanie progami wymuszenia (eviction thresholds) jest ważnym elementem utrzymania stabilności klastra. Konfiguruje się je za pomocą parametrów Kubelet, takich jak:

  • --eviction-hard
  • --eviction-soft
  • --eviction-pressure-transition-period

Monitorowanie zużycia zasobów na węzłach i ustawione polityki wymuszenia pomagają zapobiegać degradacji wydajności i awariom aplikacji.