Kubernetes 作业 pod 成功完成,但其中一个容器未准备好

Chr*_*ski 4 kubernetes

我有一些奇怪的行为。

当 ajob运行时,它成功完成,但其中一个容器说它没有(或没有......)准备好:

NAMESPACE     NAME                                                 READY     STATUS      RESTARTS   AGE       IP           NODE
default       **********-migration-22-20-16-29-11-2018-xnffp       1/2       Completed   0          11h       10.4.5.8     gke-******
Run Code Online (Sandbox Code Playgroud)

工作yaml:

apiVersion: batch/v1
kind: Job
metadata:
  name: migration-${timestamp_hhmmssddmmyy}
  labels:
    jobType: database-migration
spec:
  backoffLimit: 0
  template:
    spec:
      restartPolicy: Never
      containers:
      - name: app
        image: "${appApiImage}"
        imagePullPolicy: IfNotPresent
        command:
          - php
          - artisan
          - migrate
      - name: cloudsql-proxy
        image: gcr.io/cloudsql-docker/gce-proxy:1.11
        command: ["/cloud_sql_proxy",
                  "-instances=${SQL_INSTANCE_NAME}=tcp:3306",
                  "-credential_file=/secrets/cloudsql/credentials.json"]
        securityContext:
          runAsUser: 2  # non-root user
          allowPrivilegeEscalation: false
        volumeMounts:
          - name: cloudsql-instance-credentials
            mountPath: /secrets/cloudsql
            readOnly: true
      volumes:
        - name: cloudsql-instance-credentials
          secret:
            secretName: cloudsql-instance-credentials
Run Code Online (Sandbox Code Playgroud)

这种行为的原因可能是什么?容器上没有定义就绪或活跃度探测器。

如果我在 pod 上做一个描述,相关信息是:

...
Command:
  php
  artisan
  migrate
State:          Terminated
  Reason:       Completed
  Exit Code:    0
  Started:      Thu, 29 Nov 2018 22:20:18 +0000
  Finished:     Thu, 29 Nov 2018 22:20:19 +0000
Ready:          False
Restart Count:  0
Requests:
  cpu:  100m
...
Run Code Online (Sandbox Code Playgroud)

Clo*_*hel 5

具有Ready状态的 Pod意味着它“能够处理请求,应该添加到所有匹配服务的负载平衡池中”,请参阅https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#豆荚条件

在您的情况下,您不想为请求提供服务,而只想执行php artisan migrate一次并完成。所以你不必担心这个状态,重要的部分是State: Terminated带有一个Reason: Completed和一个零的退出代码:你的命令做了什么然后成功退出。

如果命令的结果不是您所期望的,您必须调查运行此命令的容器的日志kubectl logs your-pod -c appapp您定义的容器的名称在哪里),和/或您希望php artisan migrate命令不会发出零退出代码。