Lab 10 – ReplicaSets

Lab 10 – ReplicaSets

Cíl: vidět reconciliation smyčku při práci a selektor, který váže pody. Kapitola: ReplicaSets

# 1 – ReplicaSet ručně (jediná situace, kdy ho budete psát)
cd ~
cat > web-rs.yaml <<'YAML'
apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: web-rs
spec:
  replicas: 3
  selector:
    matchLabels:
      app: web
  template:
    metadata:
      labels:
        app: web
    spec:
      containers:
        - name: web
          image: nginx:1.27
          resources:
            requests: { cpu: "20m", memory: "32Mi" }
YAML
kubectl apply -f web-rs.yaml
kubectl get rs,pods -l app=web -o wide

Všimněte si jmen podů: web-rs- plus hash šablony plus náhodná přípona. Vlastní je kontroler, což potvrdí kubectl get pod <jméno> -o yaml | grep -A5 ownerReferences.

# 2 – samoléčení
kubectl delete pod "$(kubectl get pods -l app=web -o name | head -1)"
kubectl get pods -l app=web

Náhrada se objevila během sekundy. Nic si výpadku „nevšimlo“ nijak zvlášť – tatáž smyčka, která pody vytvořila, napočítala tři, našla dva a jeden dotvořila.

# 3 – škálování je stejná smyčka s jiným číslem
kubectl scale rs web-rs --replicas=5
kubectl get pods -l app=web --no-headers | wc -l
kubectl scale rs web-rs --replicas=2
kubectl get pods -l app=web --no-headers | wc -l
# 4 – pody váže selektor, ne jméno
kubectl run stray --image nginx:1.27 --labels app=web
kubectl get pods -l app=web
kubectl get events --sort-by=.lastTimestamp | tail -5

Zatoulaný pod byl adoptován, protože sedí labely, takže ReplicaSet napočítal tři a jeden smazal, aby se vrátil na dva. Labely nejsou dekorace: náhodná shoda je náhodné převzetí.

# 5 – změna šablony se běžících podů NEDOTKNE
sed -i 's/nginx:1.27/nginx:1.28/' web-rs.yaml
kubectl apply -f web-rs.yaml
kubectl get pods -l app=web -o jsonpath='{.items[*].spec.containers[0].image}{"\n"}'

Pořád 1.27. ReplicaSet neumí rollout – nové pody by novou šablonu použily, stávající zůstanou. Tuhle mezeru zaplňuje Deployment.

Úklid

# 6 –
kubectl delete -f web-rs.yaml
kubectl delete pod stray --ignore-not-found