Obiectul ReplicaSet în Kubernetes (kubectl)

Obiecte Kubernetes (manifeste YAML) Kubernetes 1.9+ (apps/v1)

Menține în funcțiune un număr fix de Pod-uri identice; este creat și gestionat automat de Deployment.

Sintaxă comandă
apiVersion: apps/v1
kind: ReplicaSet

Ce face Obiectul ReplicaSet

Un ReplicaSet are o singură sarcină: să existe mereu exact replicas Pod-uri care se potrivesc selectorului lui. Dacă un Pod dispare, creează altul; dacă sunt prea multe, șterge din ele. Nu știe însă să actualizeze Pod-urile la o versiune nouă.

De aceea, în practică nu creezi ReplicaSet-uri direct, ci un Deployment. La fiecare schimbare a șablonului (de exemplu o imagine nouă), Deployment-ul creează un ReplicaSet nou și îl crește treptat, în timp ce îl micșorează pe cel vechi. ReplicaSet-urile vechi rămân cu 0 replici (implicit ultimele 10, după revisionHistoryLimit), ca kubectl rollout undo să poată reveni la ele. Numele lor are la final pod-template-hash.

Parametri

Parametru Descriere
spec.replicas Numărul dorit de Pod-uri.
spec.selector Etichetele după care ReplicaSet-ul își recunoaște Pod-urile.
spec.template Șablonul Pod-urilor create.
kubectl get rs Listează ReplicaSet-urile (rs este forma scurtă).
metadata.ownerReferences Arată Deployment-ul care deține ReplicaSet-ul.

Exemple

Exemplul 1: ReplicaSet-urile unui Deployment după două lansări

Cel nou are 3 replici; cele vechi sunt păstrate cu 0, pentru revenire.

kubectl get rs -n magazin -l app=magazin-api

Ieșire în terminal

NAME                     DESIRED   CURRENT   READY   AGE
magazin-api-5b8c9d7f4a   0         0         0       9d
magazin-api-6f4d8b9c7e   0         0         0       4d
magazin-api-7d9f8c6b5d   3         3         3       2h

Exemplul 2: Un ReplicaSet se reface singur

Ștergem un Pod; ReplicaSet-ul observă că are doar 2 din 3 și creează imediat altul.

kubectl delete pod magazin-api-7d9f8c6b5d-x2k8p -n magazin
kubectl get pods -n magazin -l app=magazin-api

Ieșire în terminal

pod "magazin-api-7d9f8c6b5d-x2k8p" deleted
NAME                           READY   STATUS              RESTARTS   AGE
magazin-api-7d9f8c6b5d-4hq9z   1/1     Running             0          2h
magazin-api-7d9f8c6b5d-9wmtc   0/1     ContainerCreating   0          2s
magazin-api-7d9f8c6b5d-r7nfd   1/1     Running             0          2h

Greșeli frecvente

  • Scalarea directă a ReplicaSet-ului unui Deployment (kubectl scale rs ...): Deployment-ul îl readuce imediat la numărul lui de replici. Scalează Deployment-ul.
  • Ștergerea manuală a ReplicaSet-urilor vechi „pentru curățenie”: pierzi istoricul folosit de kubectl rollout undo. Dacă vrei mai puține, setează revisionHistoryLimit în Deployment.

Comenzi înrudite

  • Obiectul ResourceQuota: Limitează totalul de CPU, memorie, Pod-uri sau alte obiecte pe care le poate consuma un namespace.
  • Gateway API: HTTPRoute: Regulile de rutare HTTP din Gateway API: după domeniu, cale sau antete, cerere trimisă către unul sau mai multe Service-uri.