如何使用 kubectl 查看失败作业的日志?

How to view logs of failed jobs with kubectl?

我创建了一个 Kubernetes 作业,但现在失败了。在哪里可以找到此作业的日志?

我不确定如何找到关联的 pod(我假设作业失败后它会删除 pod)?

运行 kubectl describe job 似乎没有显示任何相关信息:

Name:           app-raiden-migration-12-19-58-21-11-2018
Namespace:      localdev
Selector:       controller-uid=c2fd06be-ed87-11e8-8782-080027eeb8a0
Labels:         jobType=database-migration
Annotations:    kubectl.kubernetes.io/last-applied-configuration={"apiVersion":"batch/v1","kind":"Job","metadata":{"annotations":{},"labels":{"jobType":"database-migration"},"name":"app-raiden-migration-12-19-58-21-1...
Parallelism:    1
Completions:    1
Start Time:     Wed, 21 Nov 2018 12:19:58 +0000
Pods Statuses:  0 Running / 0 Succeeded / 1 Failed
Pod Template:
  Labels:  controller-uid=c2fd06be-ed87-11e8-8782-080027eeb8a0
           job-name=app-raiden-migration-12-19-58-21-11-2018
  Containers:
   app:
    Image:  pp3-raiden-app:latest
    Port:   <none>
    Command:
      php
      artisan
      migrate
    Environment:
      DB_HOST:        local-mysql
      DB_PORT:        3306
      DB_DATABASE:    raiden
      DB_USERNAME:    <set to the key 'username' in secret 'cloudsql-db-credentials'>  Optional: false
      DB_PASSWORD:    <set to the key 'password' in secret 'cloudsql-db-credentials'>  Optional: false
      LOG_CHANNEL:    stderr
      APP_NAME:       Laravel
      APP_KEY:        ABCDEF123ERD456EABCDEF123ERD456E
      APP_URL:        http://192.168.99.100
      OAUTH_PRIVATE:  <set to the key 'oauth_private.key' in secret 'laravel-oauth'>  Optional: false
      OAUTH_PUBLIC:   <set to the key 'oauth_public.key' in secret 'laravel-oauth'>   Optional: false
    Mounts:           <none>
  Volumes:            <none>
Events:
  Type     Reason                Age   From            Message
  ----     ------                ----  ----            -------
  Normal   SuccessfulCreate      2m    job-controller  Created pod: app-raiden-migration-12-19-58-21-11-2018-pwnjn
  Warning  BackoffLimitExceeded  2m    job-controller  Job has reach the specified backoff limit

使用此命令显示所有 pods,甚至失败的:

kubectl get pods -A

然后会出现一个pod,如下所示:

app-raiden-migration-12-19-58-21-11-2018-pwnjn   0/1       Error     0          6m

然后使用:

kubectl logs lighthouse-timer-1553800620-pwssv

您可以通过运行宁获得此职位的pods:

kubectl get pods --selector=job-name=app-raiden-migration-12-19-58-21-11-2018

但在这种情况下,我认为您不会找到任何 pods,因为没有创建 pod,并且如 this link: Job Termination and Cleanup 中所述,pods 在作业完成后不会被删除。 但我仍然不知道你如何找出那个 pod 失败的原因 运行(但如果有一个 pod 并且你可以找到它,你可以找到那个 pod 的日志)。我犯了同样的错误,我 运行 再次完成工作,工作成功。

编辑:

我只看到你的工作的事件,你的工作已经创建了 pod,你可以按照我上面提到的 pod 名称查看你的 pod 的日志。

另一种方法:

  • kubectl describe job $JOB
  • Pod 名称显示在 "Events"
  • kubectl logs $POD

你也可以执行

kubectl logs job.batch/your-job-name

如果您的作业有多个 pod,您将看到类似于以下内容的消息:

Found X pods, using pod/your-job-name-xxxxx

(使用 kubectl 版本 = 1.21.2 测试)