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é.