Sobes.tech
Middle+

Ako bude Kubernetes aktualizovať tajomstvá, ak mám šesť replík podov s rovnakým tajomstvom?

sobes.tech AI

Odpoveď od AI

Kubernetes ne aktualizuje tajné údaje priamo počas behu kontajnera. Kontajnery používajú presnú kópiu tajnej, ktorá bola platná v čase ich spustenia.

Aby kontajnery "videli" aktualizovanú tajnú, je potrebné ich reštartovať alebo znovu vytvoriť. Populárne stratégie nasadzovania pre tento účel sú:

  • Rolling Update: Staré kontajnery sa postupne nahrádzajú novými s aktualizovanou tajnou. Ide o štandardnú stratégiu pre Deploymenty.

  • Recreate: Všetky staré kontajnery sa odstránia naraz a následne sa vytvoria nové. To spôsobí krátke prestoje služby.

  • Blue/Green Deployment: Plne nová verzia aplikácie (s aktualizovanou tajnou) sa nasadí paralelne so starou. Po overení sa všetok prenos presmeruje na novú verziu a stará sa odstráni.

  • Canary Release: Nová verzia aplikácie (s aktualizovanou tajnou) sa nasadí na malej skupine používateľov, postupne zvyšujúc jej podiel.

Pri použití ConfigMaps a Secrets, ktoré sú namontované ako súbory, môžu byť zmeny v tajnej automaticky aktualizované vo vnútri už spusteného kontajnera, avšak s určitým oneskorením (kubernetes.io/docs/concepts/configuration/secret/#using-secrets-as-files-from-a-pod). Avšak, na použitie tajnej napríklad v premenných prostredia je potrebné kontajner reštartovať.

Príklad aktualizácie Deploymentu pomocou Rolling Update:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 6
  selector:
    matchLabels:
      app: my-app
  strategy:
    type: RollingUpdate # Štandardná stratégia
    rollingUpdate:
      maxUnavailable: 1 # Maximálny počet nedostupných kontajnerov počas aktualizácie
      maxSurge: 1       # Maximálny počet nových kontajnerov vytvorených nad požadovaný počet replík
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-container
        image: my-image:latest
        env:
        - name: MY_SECRET_VALUE
          valueFrom:
            secretKeyRef:
              name: my-secret # Názov tajnej
              key: my-key     # Kľúč tajnej

Po zmene tajnej my-secret je potrebné aktualizovať Deployment (napríklad zmenou verzie obrazu alebo pridaním anotácie), aby sa spustil Rolling Update:

kubectl apply -f deployment.yaml

Kubernetes zaregistruje zmeny v špecifikácii Deploymentu a začne vytvárať nové kontajnery, ktoré budú mať prístup k aktualizovanej tajnej. Staré kontajnery budú ukončené.