Middle
Kas nutiks, jei liveness-testas Kubernetes'e nepavyks?
sobes.tech AI
Atsakymas iš AI
Jei pod nepraeina liveness bandymą, Kubernetes vykdys nurodytą veiksmą pod'o manifest'e. Paprastai tai yra konteinerio perkrovimas:
Galimi veiksmai, kai liveness bandymas nepavyksta:
- Perkrauti: konteinerio perkrovimas pod'o viduje. Šis veiksmas naudojamas kaip numatytasis.
- Nieko: Kubernetes neims jokių veiksmų, kai nepavyksta liveness bandymas. Konteineris liks dabartinėje būklėje (
RunningarbaCrashing). - Vykdyti komandą: vykdyti tam tikrą komandą konteineryje. Jei komanda baigiasi su neigiamu grąžos kodu, liveness bandymas laikomas nesėkmingu.
Scenarijus su numatytuoju veiksmu (Perkrauti):
- kubelet reguliariai tikrina konteinerį naudodamas liveness bandymą.
- Jei liveness bandymo sąlyga nėra įvykdyta (pavyzdžiui, HTTP serveris neatsako, komanda baigiasi klaida):
- kubelet užregistruoja gedimą.
- Po kelių nesėkmingų bandymų (
failureThreshold,initialDelaySeconds,periodSeconds,timeoutSecondsparametrų nustatyta): - kubelet siunčia
SIGKILLsignalą neveikiančiam konteineriui. - Konteineris užbaigia darbą.
- kubelet perkrauna tą patį pod'ą.
- Liveness bandymo procesas atnaujinamas.
Svarbu atskirti liveness bandymą nuo readiness bandymo. Readiness bandymas nustato, ar konteineris yra pasiruošęs priimti srautą. Jei readiness bandymas nepavyksta, Service neperadresuos srauto į šį pod'ą, tačiau konteineris nebus perkrautas. Liveness bandymo nesėkmė rodo gedimą ir poreikį perkrauti.
# Pavyzdys liveness bandymo spec.containers dalyje
containers:
- name: my-container
image: my-image:latest
livenessProbe:
httpGet:
path: /healthz
port: 8080
initialDelaySeconds: 15 # Uždelstas laikas prieš pirmą patikrinimą
periodSeconds: 20 # Patikrinimų intervalas
timeoutSeconds: 5 # Atsakymo laukimo laikas
failureThreshold: 3 # Nesėkmių skaičius prieš perkrovimą