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

63

我创建了一个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

似乎您的Pod尚未启动。 它无法启动。 - Shudipta Sharma
1
来自 Kubernetes 文档: "一旦 .spec.backoffLimit 达到,Job(restartPolicy=OnFailure)将被标记为失败,并且任何正在运行的 Pod 将被终止。" 在这种情况下,Pods 将已被删除。 - Hem
4个回答

68

另一种方法:

  • kubectl describe job $JOB
  • 在“事件”下方显示Pod名称
  • kubectl logs $POD

27
如果 activeDeadlineSeconds 超过了设定值,那么 Pod 将会被删除,我找不到查看日志的方法。事件记录将显示 "<none>"。 - Balazs Rau
1
如果您在“事件”下找不到Pod名称,那很可能是由于CronJob中的successfulJobsHistoryLimit:<num>配置。 - Ivan Aracki

39

您还可以执行

kubectl logs job.batch/your-job-name

如果您的工作有多个Pod,则会看到类似以下消息:

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

(已测试,使用的 kubectl 版本为 1.21.2)


迄今为止,批处理作业的最简单答案,因为我们不必查找作业的Pods。 - Anand Sunderraman
1
对我来说,返回了错误:等待条件超时。 - undefined
除非你使用的是较旧版本的kubectl,否则这应该是正确的答案。 - undefined

17

使用此命令显示所有的Pod,包括失败的Pod:

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

4
Flag --show-all已被弃用,将在即将发布的版本中删除。你知道它的替代品是什么吗? - codersofthedark
7
"A"表示所有名称空间。它不会显示与失败作业相关的Pod。 - spinkus

3
您可以通过运行以下命令获取此作业的Pods:
kubectl get pods --selector=job-name=app-raiden-migration-12-19-58-21-11-2018

但在这种情况下,我认为您找不到任何Pod,因为没有创建Pod,并且如此链接:作业终止和清理中所述,作业完成后不会删除Pod。 但我仍然不知道您如何找出为什么该Pod无法运行(但如果有Pod并且您可以找到它,则可以找到该Pod的日志)。 我也犯了同样的错误,然后我再次运行作业,作业成功运行。

编辑:

我刚刚看到您作业的事件,您的作业已经创建了Pod,您可以通过Pod名称查看您的Pod的日志,就像我上面提到的那样。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接