Java >> Java tutorial >  >> Tag >> Spring

Undgå, at Spring Boot-applikationen lukker, indtil alle aktuelle anmodninger er afsluttet

Du kan øge terminationGracePeriodSeconds , standard er 30 sekunder. Men desværre er der intet, der forhindrer en klyngeadministrator i at tvinge sletning af din pod, og der er alle mulige årsager til, at hele noden kan forsvinde.


Vi lavede en kombination af ovenstående for at løse vores problem.

  • hævede opsigelsenGracePeriodSeconds til det absolutte maksimum, vi forventer at se i produktionen
  • tilføjede livenessProbe for at forhindre Traefik-routing til vores pod for tidligt
  • introducerede en pre-stop hook, der injicerer en pause og kalder et overvågningsscript:
    1. Overvåget netstat for ETABLISTERDE forbindelser til vores proces (pid 1) med en udenlandsk adresse på vores klynge Traefik-tjeneste
    2. sendte TERM til pid 1

Bemærk, at fordi vi sender TERM til pid 1 fra overvågningsscriptet, vil poden afsluttes på dette tidspunkt, og termineringen GracePeriodSeconds bliver aldrig ramt (den er der som en sikkerhedsforanstaltning)

Her er scriptet:

#!/bin/sh

while [ "$(/bin/netstat -ap 2>/dev/null | /bin/grep http-alt.*ESTABLISHED.*1/java | grep -c traefik-ingress-service)" -gt 0 ]
do
  sleep 1
done

kill -TERM 1

Her er den nye pod-specifikation:

containers:
  - env:
    - name: spring_profiles_active
      value: dev
    image: container.registry.host/project/app:@@[email protected]@
    imagePullPolicy: Always
    lifecycle:
      preStop:
        exec:
          command:
          - /bin/sh
          - -c
          - sleep 5 && /monitoring.sh
    livenessProbe:
      httpGet:
        path: /actuator/health
        port: 8080
      initialDelaySeconds: 60
      periodSeconds: 20
      timeoutSeconds: 3
    name: app
    ports:
    - containerPort: 8080
    readinessProbe:
      httpGet:
        path: /actuator/health
        port: 8080
      initialDelaySeconds: 60
    resources:
      limits:
        cpu: 2
        memory: 2Gi
      requests:
        cpu: 2
        memory: 2Gi
  imagePullSecrets:
  - name: app-secret
  serviceAccountName: vault-auth
  terminationGracePeriodSeconds: 86400

Java tag