Skip to content

Commit f557998

Browse files
[pt-br] Add /tasks/run-application/force-delete-stateful-set-pod.md
1 parent d21b9d7 commit f557998

File tree

1 file changed

+104
-0
lines changed

1 file changed

+104
-0
lines changed
Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
---
2+
title: Forçar a Exclusão de Pods de um StatefulSet
3+
content_type: task
4+
weight: 70
5+
---
6+
7+
<!-- overview -->
8+
Esta página mostra como excluir Pods que fazem parte de um
9+
{{< glossary_tooltip text="StatefulSet" term_id="StatefulSet" >}} e
10+
explica as considerações que devem ser levadas em conta ao fazer isso.
11+
12+
## {{% heading "prerequisites" %}}
13+
14+
- Esta é uma tarefa relativamente avançada e pode violar algumas das propriedades
15+
inerentes ao StatefulSet.
16+
- Antes de prosseguir, familiarize-se com as considerações listadas abaixo.
17+
18+
<!-- steps -->
19+
20+
## Considerações sobre StatefulSet
21+
22+
Na operação normal de um StatefulSet, **nunca** há necessidade de forçar a exclusão de um Pod.
23+
O [controlador de StatefulSet](/docs/concepts/workloads/controllers/statefulset/) é responsável por criar,
24+
escalar e excluir os membros do StatefulSet. Ele tenta garantir que o número especificado de Pods,
25+
do ordinal 0 até N-1, esteja ativo e pronto. O StatefulSet garante que, a qualquer momento,
26+
exista no máximo um Pod com uma determinada identidade em execução no cluster. Isso é chamado de semântica
27+
*no máximo um* fornecida por um StatefulSet.
28+
29+
A exclusão forçada manual deve ser realizada com cautela, pois tem o potencial de violar a semântica de *no máximo um*
30+
inerente ao StatefulSet. StatefulSets podem ser usados para executar aplicações distribuídas e em cluster que
31+
necessitam de uma identidade de rede estável e armazenamento estável. Essas aplicações frequentemente possuem
32+
configurações que dependem de um conjunto fixo de membros com identidades fixas. Ter múltiplos membros com a mesma
33+
identidade pode ser desastroso e pode levar à perda de dados (por exemplo, cenário de split brain em sistemas baseados em quórum).
34+
35+
## Excluir Pods
36+
37+
Você pode realizar uma exclusão graciosa de um Pod com o seguinte comando:
38+
39+
```shell
40+
kubectl delete pods <pod>
41+
```
42+
43+
Para que o procedimento acima resulte em uma finalização graciosa, o Pod **não deve** especificar um
44+
`pod.Spec.TerminationGracePeriodSeconds` igual a 0. A prática de definir `pod.Spec.TerminationGracePeriodSeconds`
45+
como 0 segundos é insegura e fortemente desaconselhada para Pods de StatefulSet.
46+
A exclusão graciosa é segura e garantirá que o Pod
47+
[seja finalizado de forma adequada](/docs/concepts/workloads/pods/pod-lifecycle/#pod-termination) antes que o
48+
kubelet remova o nome do Pod do servidor de API.
49+
50+
Um Pod não é excluído automaticamente quando um nó se torna inacessível. Os Pods em execução em um Nó
51+
inacessível entram no estado 'Terminating' ou 'Unknown' após um [timeout](/docs/concepts/architecture/nodes/#condition).
52+
Os Pods também podem entrar nesses estados quando o usuário tenta realizar a exclusão graciosa de um Pod em um Nó inacessível.
53+
As únicas formas de remover um Pod nesse estado do servidor de API são as seguintes:
54+
55+
- O objeto Node é excluído (por você ou pelo [Node Controller](/docs/concepts/architecture/nodes/#node-controller)).
56+
- O kubelet no Nó sem resposta volta a responder, encerra o Pod e remove a entrada do servidor de API.
57+
- Exclusão forçada do Pod pelo usuário.
58+
59+
A prática recomendada é utilizar a primeira ou a segunda abordagem. Se um Nó for confirmado como morto
60+
(por exemplo, desconectado permanentemente da rede, desligado, etc.), exclua o objeto Node.
61+
Se o Nó estiver sofrendo uma partição de rede, tente resolver o problema ou aguarde até que ele seja resolvido.
62+
Quando a partição for sanada, o kubelet concluirá a exclusão do Pod e liberará seu nome no servidor de API.
63+
64+
Normalmente, o sistema conclui a exclusão assim que o Pod não está mais em execução
65+
em um Nó ou quando o Nó é excluído por um administrador.
66+
Você pode substituir esse comportamento forçando a exclusão do Pod.
67+
68+
### Exclusão Forçada
69+
70+
Exclusões forçadas **não** aguardam a confirmação do kubelet de que o Pod foi encerrado.
71+
Independentemente de uma exclusão forçada ser bem-sucedida em encerrar um Pod, o nome será
72+
imediatamente liberado no servidor de API. Isso permitirá que o controlador do StatefulSet crie
73+
um Pod de substituição com a mesma identidade; isso pode levar à duplicação de um Pod ainda em execução e,
74+
se esse Pod ainda puder se comunicar com os outros membros do StatefulSet, irá violar a semântica de
75+
*no máximo um* que o StatefulSet foi projetado para garantir.
76+
77+
Ao forçar a exclusão de um Pod de um StatefulSet, você está afirmando que o Pod em questão nunca mais
78+
fará contato com outros Pods do StatefulSet e que seu nome pode ser liberado com segurança para
79+
que uma substituição seja criada.
80+
81+
Se você deseja excluir um Pod forçadamente usando o kubectl versão >= 1.5, faça o seguinte:
82+
83+
```shell
84+
kubectl delete pods <pod> --grace-period=0 --force
85+
```
86+
87+
Se você estiver usando qualquer versão do kubectl <= 1.4, deve omitir a opção `--force` e usar:
88+
89+
```shell
90+
kubectl delete pods <pod> --grace-period=0
91+
```
92+
93+
Se mesmo após esses comandos o Pod permanecer no estado `Unknown`, utilize o seguinte comando
94+
para remover o Pod do cluster:
95+
96+
```shell
97+
kubectl patch pod <pod> -p '{"metadata":{"finalizers":null}}'
98+
```
99+
100+
Sempre realize a exclusão forçada de Pods de StatefulSet com cautela e total conhecimento dos riscos envolvidos.
101+
102+
## {{% heading "whatsnext" %}}
103+
104+
Saiba mais sobre [depuração de um StatefulSet](/docs/tasks/debug/debug-application/debug-statefulset/).

0 commit comments

Comments
 (0)