Hoe zal Kubernetes de geheimen bijwerken als ik zes replica-pods heb met hetzelfde geheim?
sobes.tech AI
Antwoord van AI
Kubernetes werkt secrets niet direct bij het draaien van een pod bij. Pods gebruiken een exacte kopie van het secret die op het moment van starten bestond.
Om dat de pods het bijgewerkte secret "zien", moeten ze worden herstart of opnieuw worden gemaakt. Populaire strategieën hiervoor zijn:
-
Rolling Update: Oude pods worden geleidelijk vervangen door nieuwe met het bijgewerkte secret. Dit is de standaardstrategie voor Deployments.
-
Recreate: Alle oude pods worden gelijktijdig verwijderd en vervolgens nieuwe gemaakt. Dit leidt tot een korte onderbreking van de service.
-
Blue/Green Deployment: Er wordt een volledig nieuwe versie van de applicatie (met het bijgewerkte secret) parallel aan de oude uitgerold. Na verificatie wordt al het verkeer omgeleid naar de nieuwe versie en de oude verwijderd.
-
Canary Release: Een nieuwe versie van de applicatie (met het bijgewerkte secret) wordt uitgerold naar een kleine subset van gebruikers, waarbij het verkeer geleidelijk wordt verhoogd.
Bij gebruik van ConfigMaps en Secrets die als bestanden zijn gemonteerd, kunnen wijzigingen in het secret automatisch worden bijgewerkt binnen de al draaiende pod, maar dit gebeurt met enige vertraging (kubernetes.io/docs/concepts/configuration/secret/#using-secrets-as-files-from-a-pod). Echter, om een secret bijvoorbeeld te gebruiken in omgevingsvariabelen, is het nodig om de pod opnieuw te starten.
Voorbeeld van het bijwerken van een Deployment met behulp van Rolling Update:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
replicas: 6
selector:
matchLabels:
app: my-app
strategy:
type: RollingUpdate # Standaardstrategie
rollingUpdate:
maxUnavailable: 1 # Maximaal aantal niet-beschikbare pods tijdens de update
maxSurge: 1 # Maximaal aantal nieuwe pods dat boven het gewenste aantal wordt gemaakt
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 # Naam van het secret
key: my-key # Sleutel van het secret
Na het wijzigen van het secret my-secret, moet je de Deployment bijwerken (bijvoorbeeld door de afbeeldingsversie te wijzigen of een annotatie toe te voegen) om de Rolling Update te activeren:
kubectl apply -f deployment.yaml
Kubernetes detecteert de wijzigingen in de specificatie van de Deployment en begint nieuwe pods te maken die toegang krijgen tot het bijgewerkte secret. Oude pods worden beëindigd.