Sobes.tech
Middle+

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.