Kubernetes作业调试命令

时间:2019-10-23 09:14:18

标签: kubernetes

我写了份工作,但总是遇到初始化错误。我注意到,如果删除相关的command一切正常,并且不会收到任何初始化错误。 我的问题是:如何调试需要在作业中运行的命令?我使用pod describe,但我只能看到退出状态代码2。

apiVersion: batch/v1
kind: Job
metadata:
  name: database-import
spec:
  template:
    spec:
      initContainers:
        - name: download-dump
          image: google/cloud-sdk:alpine
           command: #####            ERROR HERE!!!
             - bash
             - -c
             - "gsutil cp gs://webshop-254812-sbg-data-input/pg/spryker-stg.gz /data/spryker-stage.gz"
      volumeMounts:
        - name: application-default-credentials
          mountPath: "/secrets/"
          readOnly: true
        - name: data
          mountPath: "/data/"
      env:
        - name: GOOGLE_APPLICATION_CREDENTIALS
          value: /secrets/application_default_credentials.json
  containers:
    - name: database-import
      image: postgres:9.6-alpine
      command:
        - bash
        - -c
        - "gunzip -c /data/spryker-stage.gz |  psql -h postgres -Uusername -W spy_ch "
      env:
        - name: PGPASSWORD
          value: password
      volumeMounts:
        - name: data
          mountPath: "/data/"
  volumes:
    - name: application-default-credentials
      secret:
        secretName: application-default-credentials
    - name: data
      emptyDir: {}
  restartPolicy: Never
backoffLimit: 4

这是工作描述:

Name:           database-import
Namespace:      sbg
Selector:       controller-uid=a70d74a2-f596-11e9-a7fe-025000000001
Labels:         app.kubernetes.io/managed-by=tilt
Annotations:    <none>
Parallelism:    1
Completions:    1
Start Time:     Wed, 23 Oct 2019 15:11:40 +0200
Pods Statuses:  1 Running / 0 Succeeded / 3 Failed
Pod Template:
Labels:  app.kubernetes.io/managed-by=tilt
       controller-uid=a70d74a2-f596-11e9-a7fe-025000000001
       job-name=database-import
Init Containers:
 download-dump:
 Image:      google/cloud-sdk:alpine
Port:       <none>
Host Port:  <none>
Command:
  /bin/bash
  -c
  gsutil cp gs://webshop-254812-sbg-data-input/pg/spryker-stg.gz /data/spryker-stage.gz
Environment:
  GOOGLE_APPLICATION_CREDENTIALS:  /secrets/application_default_credentials.json
Mounts:
  /data/ from data (rw)
  /secrets/ from application-default-credentials (ro)
Containers:
 database-import:
 Image:      postgres:9.6-alpine
 Port:       <none>
 Host Port:  <none>
 Command:
   /bin/bash
   -c
   gunzip -c /data/spryker-stage.gz |  psql -h postgres -Uusername -W 
spy_ch 
Environment:
  PGPASSWORD:  password
Mounts:
  /data/ from data (rw)
Volumes:
 application-default-credentials:
Type:        Secret (a volume populated by a Secret)
SecretName:  application-default-credentials-464thb4k85
Optional:    false
data:
 Type:       EmptyDir (a temporary directory that shares a pod's lifetime)
 Medium:     
 SizeLimit:  <unset>
 Events:
 Type    Reason            Age   From            Message
  ----    ------            ----  ----            -------
 Normal  SuccessfulCreate  2m5s  job-controller  Created pod: database-import-9tsjw
 Normal  SuccessfulCreate  119s  job-controller  Created pod: database-import-g68ld
 Normal  SuccessfulCreate  109s  job-controller  Created pod: database-import-8cx6v
 Normal  SuccessfulCreate  69s   job-controller  Created pod: database-import-tnjnh

3 个答案:

答案 0 :(得分:0)

您使用

查看日志
Kubectl logs <Pod name>

Pod名称是已完成的作业或正在运行的作业。

在日志中,您可以更多地了解错误,并且可以轻松地在Kubernetes上运行时调试作业。

如果您正在GKE上使用Kubernetes集群并启用了堆栈驱动程序监视,那么您也可以将其用于调试。

答案 1 :(得分:0)

  

Init:Error->初始化容器执行失败。

那是因为initContainers命令部分有一些错误

There您可以阅读如何准备Yaml。

我已经修复了您的yaml文件。

apiVersion: batch/v1
kind: Job
metadata:
  name: database-import
spec:
  template:
    spec:
      containers:
      - name: database-import
        image: postgres:9.6-alpine
        command:
          - bash
          - "-c"
          - "gunzip -c /data/spryker-stage.gz |  psql -h postgres -Uusername -W spy_ch "
        env:
          - name: PGPASSWORD
            value: password
        volumeMounts:
          - name: data
            mountPath: "/data/"
      initContainers:
      - name: download-dump
        image: google/cloud-sdk:alpine
        command:
          - /bin/bash
          - "-c"
          - "gsutil cp gs://webshop-254812-sbg-data-input/pg/spryker-stg.gz /data/spryker-stage.gz"
        env:
          - name: GOOGLE_APPLICATION_CREDENTIALS
            value: /secrets/application_default_credentials.json
        volumeMounts:
          - name: application-default-credentials
            mountPath: "/secrets/"
            readOnly: true
          - name: data
            mountPath: "/data/"
      volumes:
      - name: application-default-credentials
        secret:
          secretName: application-default-credentials
      - name: data
        emptyDir: {}
      restartPolicy: Never
  backoffLimit: 4

kubectl apply -f job.yaml之后的结果

job.batch/database-import created

让我知道它现在是否可以工作。

编辑

使用kubectl describe job <name of your job>并添加结果,我们将看看为什么它不起作用。

答案 2 :(得分:0)

查看作业中运行的初始化容器的日志的命令是:

kubectl logs -f <pod name>  -c <initContainer name>