|
| 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