Skip to content

Commit 010a879

Browse files
committed
Translated in italian the "Container Lifecycle Hook" chapter
1 parent 960f924 commit 010a879

File tree

1 file changed

+128
-0
lines changed

1 file changed

+128
-0
lines changed
Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,128 @@
1+
---
2+
title: Container Lifecycle Hooks
3+
content_type: concept
4+
weight: 30
5+
---
6+
7+
<!-- overview -->
8+
Questa pagina descrive come i Container gestiti con kubelet possono utilizzare il lifecycle
9+
hook framework dei Container per l'esecuzione di codice eseguito in corrispondenza di alcuni
10+
eventi durante il loro ciclo di vita.
11+
12+
<!-- body -->
13+
14+
## Overview
15+
16+
Analogamente a molti framework di linguaggi di programmazione che hanno degli hooks legati al ciclo di
17+
vita dei componenti, come ad esempio Angular, Kubernetes fornisce ai Container degli hook legati al loro ciclo di
18+
vita dei Container.
19+
Gli hook consentono ai Container di essere consapevoli degli eventi durante il loro ciclo di
20+
gestione ed eseguire del codice implementato in un handler quando il corrispondente hook viene
21+
eseguito.
22+
23+
## Container hooks
24+
25+
Esistono due tipi di hook che vengono esposti ai Container:
26+
27+
`PostStart`
28+
29+
Questo hook viene eseguito successivamente alla creazione del container.
30+
Tuttavia, non vi è garanzia che questo hook venga eseguito prima dell'ENTRYPOINT del container.
31+
Non vengono passati parametri all'handler.
32+
33+
`PreStop`
34+
35+
Questo hook viene eseguito prima della terminazione di un container a causa di una richiesta API o
36+
di un evento di gestione, come ad esempio un fallimento delle sonde di liveness/startup, preemption,
37+
risorse contese e altro. Una chiamata all'hook di `PreStop` fallisce se il container è in stato
38+
terminated o completed e l'hook deve finire prima che possa essere inviato il segnale di TERM per
39+
fermare il container. Il conto alla rovescia per la terminazione del Pod (grace period) inizia prima dell'esecuzione
40+
dell'hook `PreStop`, quindi indipendentemente dall'esito dell'handler, il container terminerà entro
41+
il grace period impostato. Non vengono passati parametri all'handler.
42+
43+
Una descrizione più dettagliata riguardante al processo di terminazione dei Pod può essere trovata in
44+
[Terminazione dei Pod](/docs/concepts/workloads/pods/pod-lifecycle/#pod-termination).
45+
46+
### Implementazione degli hook handler
47+
48+
I Container possono accedere a un hook implementando e registrando un handler per tale hook.
49+
Ci sono due tipi di handler che possono essere implementati per i Container:
50+
51+
* Exec - Esegue un comando specifico, tipo `pre-stop.sh`, all'interno dei cgroup e namespace del Container.
52+
Le risorse consumate dal comando vengono contate sul Container.
53+
* HTTP - Esegue una richiesta HTTP verso un endpoint specifico del Container.
54+
55+
### Esecuzione dell'hook handler
56+
57+
Quando viene richiamato l'hook legato al lifecycle del Container, il sistema di gestione di Kubernetes
58+
esegue l'handler secondo l'azione dell'hook, `httpGet` e `tcpSocket` vengono eseguiti dal processo kubelet,
59+
mentre `exec` è eseguito nel Container.
60+
61+
Le chiamate agli handler degli hook sono sincrone rispetto al contesto del Pod che contiene il Container.
62+
Questo significa che per un hook `PostStart`, l'ENTRYPOINT e l'hook si attivano in modo asincrono.
63+
Tuttavia, se l'hook impiega troppo tempo per essere eseguito o si blocca, il container non può raggiungere lo
64+
stato di `running`.
65+
66+
Gli hook di `PreStop` non vengono eseguiti in modo asincrono dall'evento di stop del container; l'hook
67+
deve completare la sua esecuzione prima che l'evento TERM possa essere inviato. Se un hook di `PreStop`
68+
si blocca durante la sua esecuzione, la fase del Pod rimarrà `Terminating` finchè il Pod non sarà rimosso forzatamente
69+
dopo la scadenza del suo `terminationGracePeriodSeconds`. Questo grace period si applica al tempo totale
70+
necessario per effettuare sia l'esecuzione dell'hook di `PreStop` che per l'arresto normale del container.
71+
Se, per esempio, il `terminationGracePeriodSeconds` è di 60, e l'hook impiega 55 secondi per essere completato,
72+
e il container impiega 10 secondi per fermarsi normalmente dopo aver ricevuto il segnale, allora il container
73+
verrà terminato prima di poter completare il suo arresto, poiché `terminationGracePeriodSeconds` è inferiore al tempo
74+
totale (55+10) necessario perché queste due cose accadano.
75+
76+
Se un hook `PostStart` o `PreStop` fallisce, allora il container viene terminato.
77+
78+
Gli utenti dovrebbero mantenere i loro handler degli hook i più leggeri possibili.
79+
Ci sono casi, tuttavia, in cui i comandi di lunga durata hanno senso,
80+
come il salvataggio dello stato del container prima della sua fine.
81+
82+
### Garanzia della chiamata dell'hook
83+
84+
La chiamata degli hook avviene *almeno una volta*, il che significa
85+
che un hook può essere chiamato più volte da un dato evento, come per `PostStart`
86+
o `PreStop`.
87+
Sta all'implementazione dell'hook gestire correttamente questo aspetto.
88+
89+
Generalmente, vengono effettuate singole chiamate agli hook.
90+
Se, per esempio, la destinazione di hook HTTP non è momentaneamente in grado di ricevere traffico,
91+
non c'è alcun tentativo di re invio.
92+
In alcuni rari casi, tuttavia, può verificarsi una doppia chiamata.
93+
Per esempio, se un kubelet si riavvia nel mentre dell'invio di un hook, questo potrebbe essere
94+
chiamato per una seconda volta dopo che il kubelet è tornato in funzione.
95+
96+
### Debugging Hook handlers
97+
98+
I log di un handler di hook non sono esposti negli eventi del Pod.
99+
Se un handler fallisce per qualche ragione, trasmette un evento.
100+
Per il `PostStart`, questo è l'evento di `FailedPostStartHook`,
101+
e per il `PreStop`, questo è l'evento di `FailedPreStopHook`.
102+
Puoi vedere questi eventi eseguendo `kubectl describe pod <pod_name>`.
103+
Ecco alcuni esempi di output di eventi dall'esecuzione di questo comando:
104+
105+
```
106+
Events:
107+
FirstSeen LastSeen Count From SubObjectPath Type Reason Message
108+
--------- -------- ----- ---- ------------- -------- ------ -------
109+
1m 1m 1 {default-scheduler } Normal Scheduled Successfully assigned test-1730497541-cq1d2 to gke-test-cluster-default-pool-a07e5d30-siqd
110+
1m 1m 1 {kubelet gke-test-cluster-default-pool-a07e5d30-siqd} spec.containers{main} Normal Pulling pulling image "test:1.0"
111+
1m 1m 1 {kubelet gke-test-cluster-default-pool-a07e5d30-siqd} spec.containers{main} Normal Created Created container with docker id 5c6a256a2567; Security:[seccomp=unconfined]
112+
1m 1m 1 {kubelet gke-test-cluster-default-pool-a07e5d30-siqd} spec.containers{main} Normal Pulled Successfully pulled image "test:1.0"
113+
1m 1m 1 {kubelet gke-test-cluster-default-pool-a07e5d30-siqd} spec.containers{main} Normal Started Started container with docker id 5c6a256a2567
114+
38s 38s 1 {kubelet gke-test-cluster-default-pool-a07e5d30-siqd} spec.containers{main} Normal Killing Killing container with docker id 5c6a256a2567: PostStart handler: Error executing in Docker Container: 1
115+
37s 37s 1 {kubelet gke-test-cluster-default-pool-a07e5d30-siqd} spec.containers{main} Normal Killing Killing container with docker id 8df9fdfd7054: PostStart handler: Error executing in Docker Container: 1
116+
38s 37s 2 {kubelet gke-test-cluster-default-pool-a07e5d30-siqd} Warning FailedSync Error syncing pod, skipping: failed to "StartContainer" for "main" with RunContainerError: "PostStart handler: Error executing in Docker Container: 1"
117+
1m 22s 2 {kubelet gke-test-cluster-default-pool-a07e5d30-siqd} spec.containers{main} Warning FailedPostStartHook
118+
```
119+
120+
121+
122+
## {{% heading "whatsnext" %}}
123+
124+
125+
* Approfondisci [Container environment](/docs/concepts/containers/container-environment/).
126+
* Esegui un tutorial su come
127+
[definire degli handlers per i Container lifecycle events](/docs/tasks/configure-pod-container/attach-handler-lifecycle-event/).
128+

0 commit comments

Comments
 (0)