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 per il 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
Ciclo di vita dei container e EndpointSlice fanno parte di Endpoint diverse API. È importante orchestrare queste API. Tuttavia, quando un pod viene chiuso, l'API Kubernetes notifica contemporaneamente sia il kubelet (per il ciclo di vita del contenitore) che il controller. EndpointSlice Per ulteriori informazioni, incluso un diagramma, consulta Gestire con garbo le richieste dei clienti nella Amazon EKS Best Practices Guide.
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 richiesta elimina immediatamente e senza mezzi termini le richieste e le coincidenze in volo al momento della ricezione
SIGTERM, i clienti riscontreranno 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éiptablesle 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'SIGTERMinvio 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 applications nella Amazon EKS Best Practices Guide.
Nota
Indipendentemente dal fatto che l'applicazione si chiuda correttamente o che sia il risultato dell'preStophook, i contenitori dell'applicazione vengono terminati alla fine del periodo di prova. SIGKILL
Utilizzate l'preStophook 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