DevOps-bootcamp · leksjon

Helsesjekker: liveness- og readiness-prober

Konfigurer liveness- og readiness-prober for å sikre at applikasjonene er friske og klare til å håndtere trafikk.

Leksjon 3 av 412 trinn

Helsesjekker: liveness- og readiness-prober er en gratis leksjon i DevOps-bootcamp på CoddyKit. Dette er leksjon 3 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i DevOps-bootcamp, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i DevOps-bootcamp inneholder totalt 4 leksjoner.

Holde apper sunne

Hvordan vet Kubernetes om applikasjonen Deres faktisk fungerer? Det er ikke nok at en container bare kjører; den må være sunn og klar til å håndtere trafikk.

Kubernetes bruker spesielle kontroller som kalles prober for å overvåke applikasjonene Deres. Disse probene bidrar til å sikre at brukerne alltid får en pålitelig tjeneste.

Hva er liveness-prober?

En liveness-probe kontrollerer om applikasjonen fortsatt er aktiv og svarer. Hvis en liveness-probe mislykkes, antar Kubernetes at containeren er usunn og starter den på nytt.

Tenk på det som en pulsmåler: Hvis hjertet stopper, trengs en omstart! Dette bidrar til å gjenopprette etter vranglåser eller krasj i applikasjonen.

Grunnleggende om liveness-prober

De kan konfigurere liveness-prober ved hjelp av ulike metoder:

  • HTTP GET: Sender en HTTP-forespørsel til en angitt bane.
  • TCP Socket: Kontrollerer om det kan opprettes en TCP-tilkobling til en port.
  • Exec Command: Kjører en kommando inne i containeren.

For webapplikasjoner er HTTP GET svært vanlig. Her er et utdrag som viser hvordan De kan definere en slik probe i YAML-filen til en Pod:

livenessProbe:
  httpGet:
    path: /healthz
    port: 8080
  initialDelaySeconds: 5
  periodSeconds: 5

Liveness-probe i praksis

Denne Python Flask-appen simulerer en usunn tilstand ved å krasje etter to forespørsler til /healthz. Kubernetes-proben oppdager dette og starter containeren på nytt.

Lagre først dette som app.py:

from flask import Flask, Response
import os
import time

app = Flask(__name__)
request_count = 0

@app.route('/healthz')
def health_check():
    global request_count
    request_count += 1
    if request_count > 2:
        print("Liveness probe failing! Exiting...")
        os._exit(1) # Simulate a crash
    print(f"Liveness probe successful (count: {request_count})")
    return Response("OK", status=200)

@app.route('/')
def home():
    return "Hello from the Liveness Probe Demo!"

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8080)

Kjøre en liveness-probe

La oss nå se hvordan Kubernetes bruker liveness-proben. Hvis De ruller ut dette med følgende YAML, starter Kubernetes Pod-en på nytt når helsekontrollen mislykkes:

apiVersion: v1
kind: Pod
metadata:
  name: liveness-demo
spec:
  containers:
  - name: liveness-container
    image: python:3.9-slim-buster
    command: ["python", "app.py"]
    ports:
    - containerPort: 8080
    livenessProbe:
      httpGet:
        path: /healthz
        port: 8080
      initialDelaySeconds: 5
      periodSeconds: 5
      failureThreshold: 1
    volumeMounts:
    - name: app-volume
      mountPath: /app
  volumes:
  - name: app-volume
    configMap:
      name: liveness-app-config

# (You'd need a ConfigMap for app.py, omitted for brevity)

Etter utrulling vil den tredje kontrollen mislykkes etter to vellykkede kontroller, og Kubernetes starter containeren på nytt.

Hva er readiness-prober?

En readiness-probe kontrollerer om applikasjonen Deres er klar til å håndtere trafikk. Hvis en readiness-probe mislykkes, slutter Kubernetes å sende trafikk til Pod-en, men starter den ikke på nytt.

Dette er avgjørende under oppstart (for eksempel mens applikasjonen venter på en databasetilkobling) eller ved kontrollert avslutning. Tenk: «Er butikken åpen for kunder?»

Grunnleggende om readiness-prober

Readiness-prober konfigureres på lignende måte som liveness-prober, ved hjelp av HTTP GET, TCP Socket eller Exec-kommandoer. Den viktigste forskjellen er virkningen:

  • Liveness: Starter containeren på nytt ved feil.
  • Readiness: Fjerner Pod-en fra tjenestens endepunkter ved feil (ingen trafikk).

Her er et utdrag for en readiness-probe:

readinessProbe:
  httpGet:
    path: /ready
    port: 8080
  initialDelaySeconds: 10
  periodSeconds: 5

Readiness-probe i praksis

Denne Flask-appen simulerer en applikasjon som trenger litt tid på å initialiseres (for eksempel for å koble til en database). Den rapporterer «ready» først etter 5 sekunder.

Lagre dette som ready_app.py:

from flask import Flask, Response
import time

app = Flask(__name__)
start_time = time.time()
READY_AFTER_SECONDS = 5

@app.route('/ready')
def readiness_check():
    if time.time() - start_time > READY_AFTER_SECONDS:
        print("Readiness probe successful: App is ready!")
        return Response("READY", status=200)
    else:
        print("Readiness probe failing: App not ready yet...")
        return Response("NOT READY", status=503)

@app.route('/')
def home():
    return "Hello from the Readiness Probe Demo!"

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8080)

Kjøre readiness-probe

Når Pod-en distribueres med denne YAML-konfigurasjonen, vil den ikke motta trafikk i de første initialDelaySeconds-sekundene, pluss tiden det tar før /ready returnerer 200 OK.

apiVersion: v1
kind: Pod
metadata:
  name: readiness-demo
spec:
  containers:
  - name: readiness-container
    image: python:3.9-slim-buster
    command: ["python", "ready_app.py"]
    ports:
    - containerPort: 8080
    readinessProbe:
      httpGet:
        path: /ready
        port: 8080
      initialDelaySeconds: 10
      periodSeconds: 3
    volumeMounts:
    - name: app-volume
      mountPath: /app
  volumes:
  - name: app-volume
    configMap:
      name: readiness-app-config

# (You'd need a ConfigMap for ready_app.py, omitted for brevity)

Dette sikrer at trafikken bare går til instanser som faktisk er klare.

Liveness-probe kontra readiness-probe

Det er viktig å bruke begge probe-typene riktig:

  • Liveness-probe: Brukes til å oppdage om applikasjonen har krasjet eller er i en tilstand den ikke kan komme seg ut av. Hvis den mislykkes, starter Kubernetes containeren på nytt.
  • Readiness-probe: Brukes til å oppdage om applikasjonen er klar til å motta og behandle forespørsler. Hvis den mislykkes, slutter Kubernetes å sende trafikk til Pod-en.

De har ulike, men utfyllende formål som bidrar til å holde applikasjonene robuste.

Test forståelsen

Hvilke av følgende påstander om liveness- og readiness-prober er SANNE?

Prober: Viktigste punkter

I denne leksjonen har du lært om liveness- og readiness-prober i Kubernetes. Disse helsesjekkene er avgjørende for å opprettholde påliteligheten og tilgjengeligheten til applikasjonene dine:

  • Liveness-prober oppdager usunne containere og utløser omstarter.
  • Readiness-prober styrer når en Pod er klar til å motta nettverkstrafikk.

Effektiv bruk av dem sikrer at applikasjonene alltid svarer og tåler problemer.

Gratis å komme i gang

Lær deg DevOps-bootcamp med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
142
Leksjoner
568

Ofte stilte spørsmål

Er leksjonen «Helsesjekker: liveness- og readiness-prober» gratis?

Ja – du kan lese valgfritt 3 av leksjonene i læringsstien DevOps-bootcamp, inkludert «Helsesjekker: liveness- og readiness-prober», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i DevOps-bootcamp inneholder totalt 4 leksjoner.

Hva lærer jeg i «Helsesjekker: liveness- og readiness-prober»?

Konfigurer liveness- og readiness-prober for å sikre at applikasjonene er friske og klare til å håndtere trafikk. Du øver på DevOps-bootcamp med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med DevOps-bootcamp?

Ingen tidligere erfaring er nødvendig. DevOps-bootcamp på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 3 av 4.

Hvor lang tid tar leksjonen «Helsesjekker: liveness- og readiness-prober»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne DevOps-bootcamp-leksjonen?

Ja. Alle DevOps-bootcamp-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Logging med kubectl logs
  2. Måltall med Prometheus og Grafana
  3. Helsesjekker: liveness- og readiness-prober
  4. Distribuert sporing og hendelser
← Tilbake til DevOps-bootcamp