Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Configura i ganci del ciclo di vita dei container
Durante uno spegnimento regolare del contenitore, l'applicazione dovrebbe rispondere a un SIGTERM
segnale avviandone lo spegnimento, in modo che i client non subiscano tempi di inattività. L'applicazione deve eseguire procedure di pulizia come le seguenti:
Salvataggio dei dati
Chiusura dei descrittori di file
Chiusura delle connessioni al database
Completamento delle richieste in volo con garbo
Uscire tempestivamente per soddisfare la richiesta di terminazione del pod
Imposta un periodo di grazia sufficientemente lungo per completare la pulizia. Per informazioni su come rispondere al SIGTERM
segnale, consultate la documentazione relativa al linguaggio di programmazione utilizzato per l'applicazione.
Gli hook del cicloiptables
Il ciclo di vita dei container e l'endpoint fanno parte di qualcosa di diverso. EndpointSlice APIs È importante orchestrarli. APIs Tuttavia, quando un pod viene chiuso, l'API Kubernetes notifica contemporaneamente sia il kubelet (per Container Lifecycle) che il controller. EndpointSlice
Per ulteriori informazioni, incluso un diagramma, consulta Gestire con garbo
Quando viene kubelet
inviato SIGTERM
al pod, il EndpointSlice
controller termina l'oggetto. EndpointSlice
Tale terminazione notifica ai server dell'API Kubernetes di notificare ogni nodo da aggiornare. kube-proxy
iptables
Sebbene queste azioni avvengano contemporaneamente, non vi sono dipendenze o sequenze tra di esse. È molto probabile che il contenitore riceva il SIGKILL
segnale molto prima dell'aggiornamento delle regole locali kube-proxy
iptables
su ciascun nodo. In tal caso, gli scenari possibili includono quanto segue:
-
Se la tua candidatura elimina immediatamente e senza mezzi termini le richieste e le coincidenze in volo al ricevimento dei clienti, vedi
SIGTERM,
degli errori.500
-
Se l'applicazione garantisce che tutte le richieste e le coincidenze in volo vengano elaborate completamente al momento della ricezione
SIGTERM
, durante il periodo di prova, le nuove richieste dei clienti verranno comunque inviate al contenitore dell'applicazione perchéiptables
le regole potrebbero non essere ancora aggiornate. Fino a quando la procedura di pulizia non chiuderà il socket del server sul contenitore, tali nuove richieste comporteranno nuove connessioni. Al termine del periodo di prova, le nuove connessioni stabilite dopo l'SIGTERM
invio vengono interrotte incondizionatamente.
Per risolvere gli scenari precedenti, puoi implementare l'integrazione in-app o il PreStop lifecycle hook. Per ulteriori informazioni, incluso un diagramma, consulta Gracefully shutdown
Nota: indipendentemente dal fatto che l'applicazione si chiuda correttamente o che sia il risultato dell'preStop
hook, i contenitori delle applicazioni vengono terminati alla fine del periodo di prova. SIGKILL
Utilizzate l'preStop
hook con un sleep
comando per ritardare l'invio. SIGTERM
Ciò contribuirà a continuare ad accettare le nuove connessioni mentre l'oggetto di ingresso le indirizza al pod. Verifica il valore temporale del sleep
comando per assicurarti che venga presa in considerazione l'eventuale latenza di Kubernetes e altre dipendenze dell'applicazione, come mostrato nell'esempio seguente:
apiVersion: apps/v1 kind: Deployment metadata: name: nginx spec: containers: - name: nginx lifecycle: # This "sleep" preStop hook delays the Pod shutdown until # after the Ingress Controller removes the matching Endpoint or EndpointSlice preStop: exec: command: - /bin/sleep - "20" # This period should be turned to Ingress/Service Mesh update latency
Per ulteriori informazioni, consulta Container hooks