|
| 1 | +--- |
| 2 | +title: Determine a razão para a falha do Pod |
| 3 | +content_type: task |
| 4 | +weight: 30 |
| 5 | +--- |
| 6 | + |
| 7 | +<!-- overview --> |
| 8 | + |
| 9 | +Esta página mostra como escrever e ler uma mensagem de término do contêiner. |
| 10 | + |
| 11 | +Mensagens de término fornecem uma maneira para os contêineres registrarem informações sobre eventos fatais em um local onde possam ser facilmente recuperadas e exibidas por ferramentas como painéis e softwares de monitoramento. Na maioria dos casos, as informações incluídas em uma mensagem de término também devem ser registradas nos |
| 12 | +[logs do Kubernetes](/docs/concepts/cluster-administration/logging/). |
| 13 | + |
| 14 | +## {{% heading "prerequisites" %}} |
| 15 | + |
| 16 | +{{< include "task-tutorial-prereqs.md" >}} |
| 17 | + |
| 18 | +<!-- steps --> |
| 19 | + |
| 20 | +## Escrevendo e lendo uma mensagem de término |
| 21 | + |
| 22 | +Neste exercício, você cria um Pod que executa um único contêiner. |
| 23 | +O manifesto para esse Pod especifica um comando que é executado quando o contêiner é iniciado: |
| 24 | + |
| 25 | +{{% code_sample file="debug/termination.yaml" %}} |
| 26 | + |
| 27 | +1. Crie um Pod com base no arquivo de configuração YAML: |
| 28 | + |
| 29 | + ```shell |
| 30 | + kubectl apply -f https://k8s.io/examples/debug/termination.yaml |
| 31 | + ``` |
| 32 | + |
| 33 | + No arquivo YAML, nos campos `command` e `args`, é possível ver que o |
| 34 | + contêiner dorme por 10 segundos e, em seguida, escreve "Sleep expired" |
| 35 | + no arquivo `/dev/termination-log`. Após escrever a mensagem "Sleep expired", |
| 36 | + o contêiner é encerrado. |
| 37 | + |
| 38 | +1. Exiba informações sobre o Pod: |
| 39 | + |
| 40 | + ```shell |
| 41 | + kubectl get pod termination-demo |
| 42 | + ``` |
| 43 | + |
| 44 | + Repita o comando anterior até que o Pod não esteja mais em execução. |
| 45 | + |
| 46 | +1. Exiba informações detalhadas sobre o Pod: |
| 47 | + |
| 48 | + ```shell |
| 49 | + kubectl get pod termination-demo --output=yaml |
| 50 | + ``` |
| 51 | + |
| 52 | + A saída inclui a mensagem "Sleep expired": |
| 53 | + |
| 54 | + ```yaml |
| 55 | + apiVersion: v1 |
| 56 | + kind: Pod |
| 57 | + ... |
| 58 | + lastState: |
| 59 | + terminated: |
| 60 | + containerID: ... |
| 61 | + exitCode: 0 |
| 62 | + finishedAt: ... |
| 63 | + message: | |
| 64 | + Sleep expired |
| 65 | + ... |
| 66 | + ``` |
| 67 | + |
| 68 | +1. Use um template Go para filtrar a saída, de modo que inclua apenas a mensagem de término: |
| 69 | + |
| 70 | + ```shell |
| 71 | + kubectl get pod termination-demo -o go-template="{{range .status.containerStatuses}}{{.lastState.terminated.message}}{{end}}" |
| 72 | + ``` |
| 73 | + |
| 74 | +Se você estiver executando um Pod com vários contêineres, pode usar um template Go |
| 75 | +para incluir o nome do contêiner. |
| 76 | +Dessa forma, você pode descobrir qual dos contêineres está falhando: |
| 77 | + |
| 78 | +```shell |
| 79 | +kubectl get pod multi-container-pod -o go-template='{{range .status.containerStatuses}}{{printf "%s:\n%s\n\n" .name .lastState.terminated.message}}{{end}}' |
| 80 | +``` |
| 81 | + |
| 82 | +## Personalizando a mensagem de término |
| 83 | + |
| 84 | +O Kubernetes recupera mensagens de término do arquivo especificado no campo |
| 85 | +`terminationMessagePath` de um contêiner, que tem o valor padrão de `/dev/termination-log`. |
| 86 | +Ao personalizar esse campo, você pode instruir o Kubernetes a usar um arquivo diferente. |
| 87 | +O Kubernetes usa o conteúdo do arquivo especificado para preencher a mensagem de status |
| 88 | +do contêiner, tanto em casos de sucesso quanto de falha. |
| 89 | + |
| 90 | +A mensagem de término deve ser um breve status final, como uma mensagem de falha de asserção. |
| 91 | +O kubelet trunca mensagens que excedam 4096 bytes. |
| 92 | + |
| 93 | +O tamanho total da mensagem entre todos os contêineres é limitado a 12KiB, |
| 94 | +sendo dividido igualmente entre cada contêiner. |
| 95 | +Por exemplo, se houver 12 contêineres (`initContainers` ou `containers`), |
| 96 | +cada um terá 1024 bytes disponíveis para a mensagem de término. |
| 97 | + |
| 98 | +O caminho padrão para a mensagem de término é `/dev/termination-log`. |
| 99 | +Não é possível definir o caminho da mensagem de término após o lançamento de um Pod. |
| 100 | + |
| 101 | +No exemplo a seguir, o contêiner grava mensagens de término em |
| 102 | +`/tmp/my-log` para que o Kubernetes possa recuperá-las: |
| 103 | + |
| 104 | +```yaml |
| 105 | +apiVersion: v1 |
| 106 | +kind: Pod |
| 107 | +metadata: |
| 108 | + name: msg-path-demo |
| 109 | +spec: |
| 110 | + containers: |
| 111 | + - name: msg-path-demo-container |
| 112 | + image: debian |
| 113 | + terminationMessagePath: "/tmp/my-log" |
| 114 | +``` |
| 115 | + |
| 116 | +Além disso, os usuários podem definir o campo `terminationMessagePolicy` de um contêiner |
| 117 | +para uma personalização adicional. Esse campo tem como valor padrão "`File`", |
| 118 | +o que significa que as mensagens de término são recuperadas apenas do arquivo |
| 119 | +de mensagem de término. |
| 120 | +Ao definir `terminationMessagePolicy` como "`FallbackToLogsOnError`", você instrui |
| 121 | +o Kubernetes a usar o último trecho do log de saída do contêiner caso o arquivo |
| 122 | +de mensagem de término esteja vazio e o contêiner tenha encerrado com erro. |
| 123 | +A saída do log é limitada a 2048 bytes ou 80 linhas, o que for menor. |
| 124 | + |
| 125 | +## {{% heading "whatsnext" %}} |
| 126 | + |
| 127 | +* Veja o campo `terminationMessagePath` em [Container](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#container-v1-core). |
| 128 | +* Consulte [ImagePullBackOff](/docs/concepts/containers/images/#imagepullbackoff) em [Imagens](/docs/concepts/containers/images/). |
| 129 | +* Saiba mais sobre [recuperação de logs](/docs/concepts/cluster-administration/logging/). |
| 130 | +* Aprenda sobre [templates Go](https://pkg.go.dev/text/template). |
| 131 | +* Conheça mais sobre [status do Pod](/docs/tasks/debug/debug-application/debug-init-containers/#understanding-pod-status) e [fase do Pod](/docs/concepts/workloads/pods/pod-lifecycle/#pod-phase). |
| 132 | +* Entenda os [estados do contêiner](/docs/concepts/workloads/pods/pod-lifecycle/#container-states). |
0 commit comments