web-dev-qa-db-fra.com

kubernetes - comment voir les journaux des pods terminés:

J'utilise des concentrateurs Selenium et mes modules se terminent fréquemment. Je voudrais consulter les journaux des pods terminés. Comment faire ?

NAME                                               READY     STATUS              RESTARTS   AGE
chrome-75-0-0e5d3b3d-3580-49d1-bc25-3296fdb52666   0/2       Terminating         0          49s
chrome-75-0-29bea6df-1b1a-458c-ad10-701fe44bb478   0/2       Terminating         0          23s
chrome-75-0-8929d8c8-1f7b-4eba-96f2-918f7a0d77f5   0/2       ContainerCreating   0          7s

kubectl logs chrome-75-0-8929d8c8-1f7b-4eba-96f2-918f7a0d77f5
Error from server (NotFound): pods "chrome-75-0-8929d8c8-1f7b-4eba-96f2-918f7a0d77f5" not found
$ kubectl logs chrome-75-0-8929d8c8-1f7b-4eba-96f2-918f7a0d77f5 --previous
Error from server (NotFound): pods "chrome-75-0-8929d8c8-1f7b-4eba-96f2-918f7a0d77f5" not found```
8
Sunil Saggar

Vous pouvez afficher les journaux du pod terminé précédent comme ceci:

kubectl logs -p <terminated pod name>

Cependant, dans la plupart des cas, en cas de problème de configuration ou de secrets ou de volumes persistants, l'exécution

kubectl describe deployment <deployment name>

Aidera à déboguer davantage.

5
Malathi

Depuis les documents kubernetes:

Exemples

# Return snapshot logs from pod nginx with only one container
kubectl logs nginx

# Return snapshot of previous terminated Ruby container logs from pod web-1
kubectl logs -p -c Ruby web-1

# Begin streaming the logs of the Ruby container in pod web-1
kubectl logs -f -c Ruby web-1

# Display only the most recent 20 lines of output in pod nginx
kubectl logs --tail=20 nginx

# Show all logs from pod nginx written in the last hour
kubectl logs --since=1h nginx

Les options

 -c, --container="": Print the logs of this container
  -f, --follow[=false]: Specify if the logs should be streamed.
      --limit-bytes=0: Maximum bytes of logs to return. Defaults to no limit.
  -p, --previous[=false]: If true, print the logs for the previous instance of the container in a pod if it exists.
      --since=0: Only return logs newer than a relative duration like 5s, 2m, or 3h. Defaults to all logs. Only one of since-time / since may be used.
      --since-time="": Only return logs after a specific date (RFC3339). Defaults to all logs. Only one of since-time / since may be used.
      --tail=-1: Lines of recent log file to display. Defaults to -1, showing all log lines.
      --timestamps[=false]: Include timestamps on each line in the log output

C'est juste une façon simple de le faire. Mais dans production, j'enverrais tous les journaux de tous les pods à un système de gestion des journaux central tel que ELK en déployant un client d'envoi de journaux sur le cluster kubernetes en tant que démon- défini comme fluentbit, qui continuera à envoyer des journaux à ELk où je pourrai filtrer les éléments de base de l'espace de noms, du pod, du conteneur ou de toute autre étiquette.

3
Ijaz Ahmad Khan

Fonctionnement kubectl logs -p récupérera les journaux des ressources existantes au niveau de l'API. Cela signifie que les journaux des pods terminés ne seront pas disponibles à l'aide de cette commande.

Comme mentionné dans d'autres réponses, la meilleure façon est de centraliser vos journaux via agents de journalisation ou pousser directement ces journaux dans un service externe .

Alternativement et compte tenu de architecture de journalisation dans Kubernetes , vous pourrez peut-être récupérer les journaux directement à partir des fichiers de rotation des journaux dans le nœud hébergeant les pods. Cependant, cette option peut dépendre de l'implémentation de Kubernetes car les fichiers journaux peuvent être supprimés lorsque l'éviction du pod est déclenchée.

1
yyyyahir