Sobes.tech
Middle+

Kuidas uuendab Kubernetes salajasi, kui mul on kuus sama salajase replikatiga poodi?

sobes.tech AI

Vastus AI-lt

Kubernetes ei uuenda saladusi otse töö ajal. Podid kasutavad täpset koopiat saladusest, mis oli olemas nende käivitamise ajal.

Et podid "näeksid" uuendatud saladuse, tuleb neid taaskäivitada või uuesti luua. Populaarsed strateegiad selleks on:

  • Rolling Update: Vanad podid asendatakse järk-järgult uute, uuendatud saladusega. See on standardne strateegia Deployment'ide jaoks.

  • Recreate: Kõik vanad podid kustutatakse korraga ja luuakse uued. See põhjustab lühiajalise teenuse katkestuse.

  • Blue/Green Deployment: Täielikult uus rakenduse versioon (uuendatud saladusega) paigaldatakse paralleelselt vana versiooniga. Pärast kontrolli suunatakse kogu liiklus uuele versioonile ja vana eemaldatakse.

  • Canary Release: Uus rakenduse versioon (uuendatud saladusega) paigaldatakse väikesele kasutajagrupile, järk-järgult suurendades liiklust sellele.

Konfiguratsioonikaardid ja saladused, mis on monteeritud failidena, võivad automaatselt uuendada juba töötava podi sees, kuid see toimub teatud viivitusega (kubernetes.io/docs/concepts/configuration/secret/#using-secrets-as-files-from-a-pod). Kuid näiteks keskkonnamuutujates kasutamiseks on vaja pod taaskäivitada.

Näide, kasutades Rolling Update'i Deployment'i uuendamiseks:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 6
  selector:
    matchLabels:
      app: my-app
  strategy:
    type: RollingUpdate # Standardne strateegia
    rollingUpdate:
      maxUnavailable: 1 # Maksimaalne mitteenõutavate podide arv uuendamise ajal
      maxSurge: 1       # Maksimaalne uute podide arv, mis luuakse üle soovitud replikate arvu
  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 # Saladuse nimi
              key: my-key     # Saladuse võti

Pärast saladuse my-secret muutmist on vaja uuendada Deployment (näiteks muuta pildi versiooni või lisada annotatsioon), et alustada Rolling Update:

kubectl apply -f deployment.yaml

Kubernetes märkab Deployment'i spetsiifikas tehtud muudatusi ja hakkab looma uusi podisid, mis saavad juurdepääsu uuendatud saladusele. Vanad podid lõpetatakse.