【问题标题】:Kubernetes Job failed with no logs, no termination reason, no eventsKubernetes 作业失败,没有日志,没有终止原因,没有事件
【发布时间】:2020-04-06 19:12:45
【问题描述】:

我在一夜之间在 Kubernetes 中运行了一个作业。当我早上检查它时,它失败了。通常,我会检查 pod 日志或事件以确定原因。但是,该 pod 已被删除,并且没有任何事件。

kubectl describe job topics-etl --namespace dnc

这是describe 的输出:

Name:           topics-etl
Namespace:      dnc
Selector:       controller-uid=391cb7e5-b5a0-11e9-a905-0697dd320292
Labels:         controller-uid=391cb7e5-b5a0-11e9-a905-0697dd320292
                job-name=topics-etl
Annotations:    kubectl.kubernetes.io/last-applied-configuration:
                  {"apiVersion":"batch/v1","kind":"Job","metadata":{"annotations":{},"name":"topics-etl","namespace":"dnc"},"spec":{"template":{"spec":{"con...
Parallelism:    1
Completions:    1
Start Time:     Fri, 02 Aug 2019 22:38:56 -0500
Pods Statuses:  0 Running / 0 Succeeded / 1 Failed
Pod Template:
  Labels:  controller-uid=391cb7e5-b5a0-11e9-a905-0697dd320292
           job-name=topics-etl
  Containers:
   docsund-etl:
    Image:      acarl005/docsund-topics-api:0.1.4
    Port:       <none>
    Host Port:  <none>
    Command:
      ./create-topic-data
    Requests:
      cpu:     1
      memory:  1Gi
    Environment:
      AWS_ACCESS_KEY_ID:      <set to the key 'access_key_id' in secret 'aws-secrets'>      Optional: false
      AWS_SECRET_ACCESS_KEY:  <set to the key 'secret_access_key' in secret 'aws-secrets'>  Optional: false
      AWS_S3_CSV_PATH:        <set to the key 's3_csv_path' in secret 'aws-secrets'>        Optional: false
    Mounts:
      /app/state from topics-volume (rw)
  Volumes:
   topics-volume:
    Type:       PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
    ClaimName:  topics-volume-claim
    ReadOnly:   false
Events:         <none>

这里是作业配置 yaml。它有restartPolicy: OnFailure,但它从未重新启动。我也没有设置 TTL,所以 pod 永远不应该被清理。

apiVersion: batch/v1
kind: Job
metadata:
  name: topics-etl
spec:
  template:
    spec:
      restartPolicy: OnFailure
      containers:
        - name: docsund-etl
          image: acarl005/docsund-topics-api:0.1.6
          command: ["./create-topic-data"]
          env:
            - name: AWS_ACCESS_KEY_ID
              valueFrom:
                secretKeyRef:
                  name: aws-secrets
                  key: access_key_id
            - name: AWS_SECRET_ACCESS_KEY
              valueFrom:
                secretKeyRef:
                  name: aws-secrets
                  key: secret_access_key
            - name: AWS_S3_CSV_PATH
              valueFrom:
                secretKeyRef:
                  name: aws-secrets
                  key: s3_csv_path
          resources:
            requests:
              cpu: 1
              memory: 1Gi
          volumeMounts:
            - name: topics-volume
              mountPath: /app/state
      volumes:
        - name: topics-volume
          persistentVolumeClaim:
            claimName: topics-volume-claim

如何调试?

【问题讨论】:

    标签: kubernetes


    【解决方案1】:

    TTL 会清理 Job 本身及其所有子对象。 ttlSecondsAfterFinished 未设置,因此作业尚未清理。

    来自job docco

    注意:如果您的作业有restartPolicy = "OnFailure",请记住,一旦达到作业退避限制,您运行作业的容器将被终止。这会使调试 Job 的可执行文件更加困难。我们建议在调试作业或使用日志系统时设置restartPolicy = "Never",以确保失败作业的输出不会意外丢失。

    您发布的 Job 规范没有 backoffLimit,因此它应该尝试运行底层任务 6 次。

    如果容器进程以非零状态退出,那么它将失败,因此可以在日志中完全保持沉默。

    规范没有指定 activeDeadlineSeconds 定义的秒数,所以我不确定你最终会遇到什么类型的超时。我认为这将是容器中的硬故障,因此不会出现超时。

    【讨论】:

    • 原来容器进程以非零值退出。它的磁盘空间不足。 Kubernetes 无法记录有关此错误的任何信息。感谢您的提示!
    猜你喜欢
    • 2014-09-18
    • 2022-01-12
    • 2016-03-23
    • 2018-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-03
    相关资源
    最近更新 更多