Hogyan fogja a Kubernetes frissíteni a titkosításokat, ha hat replikapodom van ugyanazzal a titokkal?
sobes.tech MI
Válasz az MI-től
A Kubernetes nem frissíti közvetlenül a titkos adatokat (secrets) a pod futása közben. A podok egy pontos másolatát használják a titkos adatnak, amely a futtatásuk pillanatában létezett.
Annak érdekében, hogy a podok "lássák" a frissített titkos adatot, újra kell indítani őket vagy újra kell őket létrehozni. Népszerű stratégiák erre:
-
Rolling Update (Folyamatos frissítés): A régi podokat fokozatosan helyettesítik az új, frissített titkos adatokat tartalmazó podokkal. Ez az alapértelmezett stratégia a Deployment-ok esetében.
-
Recreate (Újra létrehozás): Minden régi podot egyszerre törölnek, majd újakat hoznak létre. Ez rövid szolgáltatáskimaradást okoz.
-
Blue/Green Deployment: Egy teljesen új verzió (frissített titkos adattal) párhuzamosan fut a régi verzióval. Ellenőrzés után az összes forgalom az új verzióra irányul, a régi pedig törlésre kerül.
-
Canary Release: Egy új verzió (frissített titkos adattal) egy kis felhasználói csoportnak kerül bevezetésre, majd fokozatosan növelik a forgalmat rá.
A ConfigMap-ek és Secrets-ek fájlként való csatolásával a titkos adat változásai automatikusan frissülhetnek a már futó podon belül, de ez késleltetve történik (kubernetes.io/docs/concepts/configuration/secret/#using-secrets-as-files-from-a-pod). Azonban, például, a titkos adat környezeti változóként való használatához, a pod újraindítása szükséges.
Példa a Deployment frissítésére Rolling Update használatával:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
replicas: 6
selector:
matchLabels:
app: my-app
strategy:
type: RollingUpdate # Alapértelmezett stratégia
rollingUpdate:
maxUnavailable: 1 # Maximális nem elérhető podok száma az frissítés során
maxSurge: 1 # Maximális új podok száma a kívánt replikaszám felett
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 # A titok neve
key: my-key # A titok kulcsa
A my-secret titok módosítása után, frissíteni kell a Deployment-et (például az image verziójának módosításával vagy egy annotáció hozzáadásával), hogy elinduljon a Rolling Update:
kubectl apply -f deployment.yaml
A Kubernetes észreveszi a Deployment specifikációjában történt változásokat, és elkezdi létrehozni az új podokat, amelyek hozzáférnek a frissített titokhoz. A régi podok pedig leállnak.