Sobes.tech
Middle+

Πώς θα ενημερώσει το Kubernetes τα μυστικά αν έχω έξι αντίγραφα pods με το ίδιο μυστικό;

sobes.tech AI

Απάντηση από AI

Το Kubernetes δεν ενημερώνει τα μυστικά (secrets) απευθείας κατά τη διάρκεια λειτουργίας ενός pod. Τα pods χρησιμοποιούν ένα ακριβές αντίγραφο του μυστικού που υπήρχε τη στιγμή της εκκίνησής τους.

Για να δουν τα pods το ενημερωμένο μυστικό, πρέπει να τα επανεκκινήσετε ή να τα δημιουργήσετε ξανά. Οι δημοφιλείς στρατηγικές για αυτό είναι:

  • Rolling Update (Σταδιακή ενημέρωση): Τα παλιά pods αντικαθίστανται σταδιακά με νέα με το ενημερωμένο μυστικό. Αυτή είναι η προεπιλεγμένη στρατηγική για τις αναπτύξεις (Deployments).

  • Recreate (Δημιουργία ξανά): Όλα τα παλιά pods διαγράφονται ταυτόχρονα και δημιουργούνται νέα. Αυτό προκαλεί μια σύντομη διακοπή υπηρεσίας.

  • Blue/Green Deployment: Μια πλήρως νέα έκδοση της εφαρμογής (με το ενημερωμένο μυστικό) αναπτύσσεται παράλληλα με την παλιά. Μετά την επαλήθευση, όλη η κίνηση (traffic) μεταφέρεται στη νέα έκδοση και η παλιά διαγράφεται.

  • Canary Release: Μια νέα έκδοση της εφαρμογής (με το ενημερωμένο μυστικό) αναπτύσσεται σε μια μικρή υποομάδα χρηστών, αυξάνοντας σταδιακά την κίνηση προς αυτή.

Χρησιμοποιώντας ConfigMaps και Secrets που έχουν προσαρτηθεί ως αρχεία, οι αλλαγές στο μυστικό μπορούν να ενημερώνονται αυτόματα μέσα στο ήδη τρέχον pod, αλλά αυτό συμβαίνει με μια καθυστέρηση (kubernetes.io/docs/concepts/configuration/secret/#using-secrets-as-files-from-a-pod). Ωστόσο, για τη χρήση ενός μυστικού, π.χ., σε μεταβλητές περιβάλλοντος, απαιτείται επανεκκίνηση του pod.

Παράδειγμα ενημέρωσης ενός Deployment με χρήση Rolling Update:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 6
  selector:
    matchLabels:
      app: my-app
  strategy:
    type: RollingUpdate # Προεπιλεγμένη στρατηγική
    rollingUpdate:
      maxUnavailable: 1 # Μέγιστος αριθμός μη διαθέσιμων pods κατά την ενημέρωση
      maxSurge: 1       # Μέγιστος αριθμός νέων pods που δημιουργούνται πάνω από τον επιθυμητό αριθμό
  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 # Όνομα του μυστικού
              key: my-key     # Κλειδί του μυστικού

Μετά την αλλαγή του μυστικού my-secret, πρέπει να ενημερώσετε το Deployment (π.χ., αλλάζοντας την έκδοση της εικόνας ή προσθέτοντας μια ετικέτα) για να ενεργοποιήσετε το Rolling Update:

kubectl apply -f deployment.yaml

Το Kubernetes θα ανιχνεύσει τις αλλαγές στην προδιαγραφή του Deployment και θα αρχίσει να δημιουργεί νέα pods που θα έχουν πρόσβαση στο ενημερωμένο μυστικό. Τα παλιά pods θα τερματιστούν.