|
| 1 | +--- |
| 2 | +title: Depuração de Pods |
| 3 | +content_type: task |
| 4 | +weight: 10 |
| 5 | +--- |
| 6 | + |
| 7 | +<!-- overview --> |
| 8 | + |
| 9 | +Este guia foi criado para ajudar os usuários a depurar aplicações implantadas no Kubernetes |
| 10 | +que não estão se comportando corretamente. Este *não* é um guia para quem deseja depurar seu cluster. |
| 11 | +Para isso, você deve conferir [este guia](/docs/tasks/debug/debug-cluster). |
| 12 | + |
| 13 | +<!-- body --> |
| 14 | + |
| 15 | +## Diagnosticando o problema |
| 16 | + |
| 17 | +O primeiro passo na solução de problemas é a triagem. Qual é o problema? |
| 18 | +São seus Pods, seu Replication Controller ou seu Service? |
| 19 | + |
| 20 | + * [Depurando Pods](#debugging-pods) |
| 21 | + * [Depurando Replication Controllers](#debugging-replication-controllers) |
| 22 | + * [Depurando Services](#debugging-services) |
| 23 | + |
| 24 | +### Depurando Pods {#debugging-pods} |
| 25 | + |
| 26 | +O primeiro passo para depurar um Pod é examiná-lo. Verifique o estado atual |
| 27 | +do Pod e eventos recentes com o seguinte comando: |
| 28 | + |
| 29 | +```shell |
| 30 | +kubectl describe pods ${POD_NAME} |
| 31 | +``` |
| 32 | + |
| 33 | +Observe o estado dos containers no pod. Todos estão em `Running`? |
| 34 | +Houve reinicializações recentes? |
| 35 | + |
| 36 | +Continue a depuração dependendo do estado dos pods. |
| 37 | + |
| 38 | +#### Meu pod fica em estado pending |
| 39 | + |
| 40 | +Se um Pod estiver preso em `Pending`, significa que ele não pode ser alocado em um nó. |
| 41 | +Geralmente, isso ocorre porque há recursos insuficientes de algum tipo, impedindo a alocação. |
| 42 | +Verifique a saída do comando `kubectl describe ...` mencionado acima. |
| 43 | +Deve haver mensagens do escalonador explicando por que o Pod não pode ser alocado. As razões incluem: |
| 44 | + |
| 45 | +* **Você não tem recursos suficientes**: Pode ser que você tenha esgotado a capacidade de CPU ou Memória no seu cluster. |
| 46 | + Nesse caso, você precisa excluir Pods, ajustar as solicitações de recursos ou adicionar novos nós ao cluster. |
| 47 | + Consulte o documento [Recursos de Computação](/docs/concepts/configuration/manage-resources-containers/) para mais informações. |
| 48 | + |
| 49 | +* **Você está usando `hostPort`**: Quando você vincula um Pod a um `hostPort`, há um número limitado de locais onde esse Pod pode ser alocado. |
| 50 | + Na maioria dos casos, `hostPort` é desnecessário, tente usar um objeto Service para expor seu Pod. |
| 51 | + Se você realmente precisar de `hostPort`, então só poderá alocar tantos Pods quanto o número de nós no seu cluster Kubernetes. |
| 52 | + |
| 53 | + |
| 54 | +#### Meu pod fica em estado waiting |
| 55 | + |
| 56 | +Se um Pod estiver preso no estado `Waiting`, significa que ele foi alocado para um nó de trabalho, |
| 57 | +mas não pode ser executado nessa máquina. Novamente, as informações do comando `kubectl describe ...` |
| 58 | +devem fornecer detalhes úteis. |
| 59 | + |
| 60 | +A causa mais comum para Pods em estado `Waiting` é a falha ao baixar a imagem. |
| 61 | +Há três coisas que você deve verificar: |
| 62 | + |
| 63 | +* Certifique-se de que o nome da imagem está correto. |
| 64 | +* Você enviou a imagem para o registro? |
| 65 | +* Tente baixar a imagem manualmente para verificar se ela pode ser baixada. Por exemplo, |
| 66 | + se você usa Docker no seu PC, execute `docker pull `. |
| 67 | + |
| 68 | +#### Meu pod fica em estado terminating |
| 69 | + |
| 70 | +Se um Pod estiver preso no estado `Terminating`, significa que uma solicitação de exclusão foi emitida, |
| 71 | +mas a camada de gerenciamento não conseguiu remover o objeto do Pod. |
| 72 | + |
| 73 | +Isso geralmente ocorre se o Pod possui um [finalizer](/docs/concepts/overview/working-with-objects/finalizers/) |
| 74 | +e há um [admission webhook](/docs/reference/access-authn-authz/extensible-admission-controllers/) |
| 75 | +instalado no cluster que impede a camada de gerenciamento de remover o finalizer. |
| 76 | + |
| 77 | +Para identificar esse cenário, verifique se seu cluster possui algum ValidatingWebhookConfiguration ou MutatingWebhookConfiguration que tenha como alvo |
| 78 | +operações `UPDATE` para recursos `pods`. |
| 79 | + |
| 80 | +Se o webhook for fornecido por um terceiro: |
| 81 | +- Certifique-se de estar usando a versão mais recente. |
| 82 | +- Desative o webhook para operações `UPDATE`. |
| 83 | +- Relate um problema ao provedor correspondente. |
| 84 | + |
| 85 | +Se você for o autor do webhook: |
| 86 | +- Para um webhook de mutação, certifique-se de que ele nunca altere campos imutáveis |
| 87 | + em operações `UPDATE`. Por exemplo, mudanças em contêineres geralmente não são permitidas. |
| 88 | +- Para um webhook de validação, garanta que suas regras de validação se apliquem apenas a novas alterações. |
| 89 | + Em outras palavras, você deve permitir que Pods com violações existentes passem pela validação. |
| 90 | + Isso permite que Pods criados antes da instalação do webhook continuem em execução. |
| 91 | + |
| 92 | +#### Meu pod está falhando ou não está íntegro |
| 93 | + |
| 94 | +Depois que seu Pod for alocado, você pode usar os métodos descritos em |
| 95 | +[Depurando Pods em Execução](/docs/tasks/debug/debug-application/debug-running-pod/) para depuração. |
| 96 | + |
| 97 | +#### Meu pod está em execução, mas não faz o que eu defini |
| 98 | + |
| 99 | +Se o seu pod não está se comportando como esperado, pode haver um erro na descrição do pod |
| 100 | +(por exemplo, no arquivo `mypod.yaml` em sua máquina local) que foi ignorado silenciosamente |
| 101 | +ao criar o pod. Muitas vezes, uma seção da descrição do pod pode estar aninhada incorretamente |
| 102 | +ou um nome de chave pode ter sido digitado incorretamente, fazendo com que a chave seja ignorada. |
| 103 | +Por exemplo, se você digitou `commnd` em vez de `command`, o pod será criado, |
| 104 | +mas não usará o comando que você pretendia. |
| 105 | + |
| 106 | +A primeira coisa a fazer é excluir seu pod e tentar criá-lo novamente usando a opção `--validate`. |
| 107 | +Por exemplo, execute `kubectl apply --validate -f mypod.yaml`. |
| 108 | +Se você digitou `command` incorretamente como `commnd`, verá um erro como este: |
| 109 | + |
| 110 | +```shell |
| 111 | +I0805 10:43:25.129850 46757 schema.go:126] unknown field: commnd |
| 112 | +I0805 10:43:25.129973 46757 schema.go:129] this may be a false alarm, see https://github.com/kubernetes/kubernetes/issues/6842 |
| 113 | +pods/mypod |
| 114 | +``` |
| 115 | + |
| 116 | +<!-- TODO: Now that #11914 is merged, this advice may need to be updated --> |
| 117 | + |
| 118 | +A próxima coisa a verificar é se o pod no servidor da API corresponde ao pod que você pretendia criar |
| 119 | +(por exemplo, no arquivo yaml em sua máquina local). |
| 120 | +Por exemplo, execute `kubectl get pods/mypod -o yaml > mypod-on-apiserver.yaml` em seguida, |
| 121 | +compare manualmente a descrição original do pod, `mypod.yaml` com a versão obtida do servidor da API, `mypod-on-apiserver.yaml`. |
| 122 | +Normalmente, a versão do "servidor da API" terá algumas linhas extras que não estão na versão original, |
| 123 | +o que é esperado. No entanto, se houver linhas na versão original que não aparecem na versão do servidor da API, |
| 124 | +isso pode indicar um problema na especificação do seu pod. |
| 125 | + |
| 126 | +### Depurando Replication Controllers {#debugging-replication-controllers} |
| 127 | + |
| 128 | +Replication Controllers são bastante diretos. Eles podem criar pods ou não. |
| 129 | +Se não conseguirem criar pods, consulte as |
| 130 | +[instruções acima](#debugging-pods) para depurar seus pods. |
| 131 | + |
| 132 | +Você também pode usar `kubectl describe rc ${CONTROLLER_NAME}` para examinar eventos |
| 133 | +relacionados ao replication controller. |
| 134 | + |
| 135 | +### Depurando Services {#debugging-services} |
| 136 | + |
| 137 | +Os Services fornecem balanceamento de carga entre um conjunto de pods. |
| 138 | +Existem vários problemas comuns que podem fazer com que os Services não funcionem corretamente. |
| 139 | +As instruções a seguir devem ajudar na depuração de problemas com Services. |
| 140 | + |
| 141 | +Primeiro, verifique se há endpoints para o Service. |
| 142 | +Para cada objeto Service, o servidor da API disponibiliza um recurso `endpoints`. |
| 143 | + |
| 144 | +Você pode visualizar esse recurso com o seguinte comando: |
| 145 | + |
| 146 | +```shell |
| 147 | +kubectl get endpoints ${SERVICE_NAME} |
| 148 | +``` |
| 149 | + |
| 150 | +Certifique-se de que os endpoints correspondem ao número de pods que você espera que sejam membros do seu service. |
| 151 | +Por exemplo, se seu Service estiver associado a um container Nginx com 3 réplicas, |
| 152 | +você deve esperar ver três endereços IP diferentes nos endpoints do Service. |
| 153 | + |
| 154 | +#### Meu Service não possui endpoints |
| 155 | + |
| 156 | +Se os endpoints estiverem ausentes, tente listar os pods usando os rótulos que o Service utiliza. |
| 157 | +Por exemplo, imagine que você tenha um Service com os seguintes rótulos: |
| 158 | + |
| 159 | +```yaml |
| 160 | +... |
| 161 | +spec: |
| 162 | + - selector: |
| 163 | + name: nginx |
| 164 | + type: frontend |
| 165 | +``` |
| 166 | +
|
| 167 | +Você pode usar: |
| 168 | +
|
| 169 | +```shell |
| 170 | +kubectl get pods --selector=name=nginx,type=frontend |
| 171 | +``` |
| 172 | + |
| 173 | +para listar os pods que correspondem a esse seletor. Verifique se a lista corresponde aos pods que você espera que forneçam seu Service. |
| 174 | +Além disso, certifique-se de que o `containerPort` do pod corresponde ao `targetPort` do service. |
| 175 | + |
| 176 | +#### O tráfego de rede não está sendo encaminhado |
| 177 | + |
| 178 | +Consulte [Depurando Services](/docs/tasks/debug/debug-application/debug-service/) para mais informações. |
| 179 | + |
| 180 | +## {{% heading "whatsnext" %}} |
| 181 | + |
| 182 | +Se nenhuma das soluções acima resolver seu problema, siga as instruções no |
| 183 | +[documento de Depuração de Services](/docs/tasks/debug/debug-application/debug-service/) |
| 184 | +para garantir que seu `Service` está em execução, possui `Endpoints` e que seus `Pods` |
| 185 | +estão realmente respondendo; além disso, verifique se o DNS está funcionando, |
| 186 | +as regras do iptables estão configuradas corretamente e se o kube-proxy não está com problemas. |
| 187 | + |
| 188 | +Você também pode consultar o [documento de solução de problemas](/docs/tasks/debug/) para mais informações. |
0 commit comments