Skip to content

Commit d79edc1

Browse files
authored
Merge pull request #27110 from edsoncelio/pt_m1_containers_lifecycle_hooks
Add content/pt/docs/concepts/containers/container-lifecycle-hooks.md
2 parents 9951697 + b12cbb5 commit d79edc1

File tree

1 file changed

+114
-0
lines changed

1 file changed

+114
-0
lines changed
Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
---
2+
title: Hooks de Ciclo de Vida do Contêiner
3+
content_type: concept
4+
weight: 30
5+
---
6+
7+
<!-- overview -->
8+
9+
Essa página descreve como os contêineres gerenciados pelo _kubelet_ podem usar a estrutura de _hook_ de ciclo de vida do contêiner para executar código acionado por eventos durante seu ciclo de vida de gerenciamento.
10+
11+
12+
<!-- body -->
13+
14+
## Visão Geral
15+
16+
Análogo a muitas estruturas de linguagem de programação que tem _hooks_ de ciclo de vida de componentes, como angular,
17+
o Kubernetes fornece aos contêineres _hooks_ de ciclo de vida.
18+
Os _hooks_ permitem que os contêineres estejam cientes dos eventos em seu ciclo de vida de gerenciamento
19+
e executem código implementado em um manipulador quando o _hook_ de ciclo de vida correspondente é executado.
20+
21+
## Hooks do contêiner
22+
23+
Existem dois _hooks_ que são expostos para os contêiners:
24+
25+
`PostStart`
26+
27+
Este _hook_ é executado imediatamente após um contêiner ser criado.
28+
Entretanto, não há garantia que o _hook_ será executado antes do ENTRYPOINT do contêiner.
29+
Nenhum parâmetro é passado para o manipulador.
30+
31+
`PreStop`
32+
33+
Esse _hook_ é chamado imediatamente antes de um contêiner ser encerrado devido a uma solicitação de API ou um gerenciamento de evento como liveness/startup probe failure, preemption, resource contention e outros.
34+
Uma chamada ao _hook_ `PreStop` falha se o contêiner já está em um estado finalizado ou concluído e o _hook_ deve ser concluído antes que o sinal TERM seja enviado para parar o contêiner. A contagem regressiva do período de tolerância de término do Pod começa antes que o _hook_ `PreStop` seja executado, portanto, independentemente do resultado do manipulador, o contêiner será encerrado dentro do período de tolerância de encerramento do Pod. Nenhum parâmetro é passado para o manipulador.
35+
36+
Uma descrição mais detalhada do comportamento de término pode ser encontrada em [Término de Pods](/docs/concepts/workloads/pods/pod-lifecycle/#pod-termination).
37+
38+
### Implementações de manipulador de hook
39+
40+
Os contêineres podem acessar um _hook_ implementando e registrando um manipulador para esse _hook_.
41+
Existem dois tipos de manipuladores de _hooks_ que podem ser implementados para contêineres:
42+
43+
* Exec - Executa um comando específico, como `pre-stop.sh`, dentro dos cgroups e Namespaces do contêiner.
44+
* HTTP - Executa uma requisição HTTP em um endpoint específico do contêiner.
45+
46+
### Execução do manipulador de hook
47+
48+
49+
Quando um _hook_ de gerenciamento de ciclo de vida do contêiner é chamado, o sistema de gerenciamento do Kubernetes executa o manipulador de acordo com a ação do _hook_, `httpGet` e `tcpSocket` são executados pelo processo kubelet e `exec` é executado pelo contêiner.
50+
51+
As chamadas do manipulador do _hook_ são síncronas no contexto do Pod que contém o contêiner.
52+
Isso significa que para um _hook_ `PostStart`, o ENTRYPOINT do contêiner e o _hook_ disparam de forma assíncrona.
53+
No entanto, se o _hook_ demorar muito para ser executado ou travar, o contêiner não consegue atingir o estado `running`.
54+
55+
56+
Os _hooks_ `PreStop` não são executados de forma assíncrona a partir do sinal para parar o contêiner, o _hook_ precisa finalizar a sua execução antes que o sinal TERM possa ser enviado.
57+
Se um _hook_ `PreStop` travar durante a execução, a fase do Pod será `Terminating` e permanecerá até que o Pod seja morto após seu `terminationGracePeriodSeconds` expirar. Esse período de tolerância se aplica ao tempo total necessário
58+
para o _hook_ `PreStop`executar e para o contêiner parar normalmente.
59+
Se por exemplo, o `terminationGracePeriodSeconds` é 60, e o _hook_ leva 55 segundos para ser concluído, e o contêiner leva 10 segundos para parar normalmente após receber o sinal, então o contêiner será morto antes que possa parar
60+
normalmente, uma vez que o `terminationGracePeriodSeconds` é menor que o tempo total (55 + 10) que é necessário para que essas duas coisas aconteçam.
61+
62+
Se um _hook_ `PostStart` ou `PreStop` falhar, ele mata o contêiner.
63+
64+
Os usuários devem tornar seus _hooks_ o mais leve possíveis.
65+
Há casos, no entanto, em que comandos de longa duração fazem sentido, como ao salvar o estado
66+
antes de parar um contêiner.
67+
68+
### Garantias de entrega de _hooks_
69+
70+
A entrega do _hook_ é destinada a acontecer *pelo menos uma vez*,
71+
o que quer dizer que um _hook_ pode ser chamado várias vezes para qualquer evento,
72+
como para `PostStart` ou `PreStop`.
73+
Depende da implementação do _hook_ lidar com isso corretamente.
74+
75+
Geralmente, apenas entregas únicas são feitas.
76+
Se, por exemplo, um receptor de _hook_ HTTP estiver inativo e não puder receber tráfego,
77+
não há tentativa de reenviar.
78+
Em alguns casos raros, no entanto, pode ocorrer uma entrega dupla.
79+
Por exemplo, se um kubelet reiniciar no meio do envio de um _hook_, o _hook_ pode ser
80+
reenviado depois que o kubelet voltar a funcionar.
81+
82+
### Depurando manipuladores de _hooks_
83+
84+
Os logs para um manipulador de _hook_ não são expostos em eventos de Pod.
85+
Se um manipulador falhar por algum motivo, ele transmitirá um evento.
86+
Para `PostStart` é o evento `FailedPostStartHook` e para `PreStop` é o evento
87+
`FailedPreStopHook`.
88+
Você pode ver esses eventos executando `kubectl describe pod <nome_do_pod>`.
89+
Aqui está um exemplo de saída de eventos da execução deste comando:
90+
91+
```
92+
Events:
93+
FirstSeen LastSeen Count From SubObjectPath Type Reason Message
94+
--------- -------- ----- ---- ------------- -------- ------ -------
95+
1m 1m 1 {default-scheduler } Normal Scheduled Successfully assigned test-1730497541-cq1d2 to gke-test-cluster-default-pool-a07e5d30-siqd
96+
1m 1m 1 {kubelet gke-test-cluster-default-pool-a07e5d30-siqd} spec.containers{main} Normal Pulling pulling image "test:1.0"
97+
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]
98+
1m 1m 1 {kubelet gke-test-cluster-default-pool-a07e5d30-siqd} spec.containers{main} Normal Pulled Successfully pulled image "test:1.0"
99+
1m 1m 1 {kubelet gke-test-cluster-default-pool-a07e5d30-siqd} spec.containers{main} Normal Started Started container with docker id 5c6a256a2567
100+
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
101+
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
102+
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"
103+
1m 22s 2 {kubelet gke-test-cluster-default-pool-a07e5d30-siqd} spec.containers{main} Warning FailedPostStartHook
104+
```
105+
106+
107+
108+
## {{% heading "whatsnext" %}}
109+
110+
111+
* Saiba mais sobre o [Ambiente de contêiner](/docs/concepts/containers/container-environment/).
112+
* Obtenha experiência prática
113+
[anexando manipuladores a eventos de ciclo de vida do contêiner](/docs/tasks/configure-pod-container/attach-handler-lifecycle-event/).
114+

0 commit comments

Comments
 (0)