【问题标题】:Kubernetes job pod completed successfully but one of the containers were not readyKubernetes 作业 pod 已成功完成,但其中一个容器尚未准备好
【发布时间】:2022-05-19 19:57:56
【问题描述】:

我有一些奇怪的行为。

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

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-******

工作 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

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

如果我对 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
...

【问题讨论】:

    标签: kubernetes


    【解决方案1】:

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

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

    如果命令的结果不是您所期望的,您必须调查使用kubectl logs your-pod -c app 运行此命令的容器的日志(其中app 是您定义的容器的名称),并且/ 或者您会期望 php artisan migrate 命令不会发出零退出代码。

    【讨论】:

      【解决方案2】:

      在我的例子中,我使用的是 istio,并且遇到了同样的问题,从作业 pod 中删除 istio-sidecar 解决了这个问题。

      如果使用 istio,我的解决方案:

        spec:
          template:
            metadata:
              annotations:
                sidecar.istio.io/inject: "false"
      

      【讨论】:

      猜你喜欢
      • 2020-02-28
      • 2014-10-13
      • 1970-01-01
      • 2022-08-24
      • 2020-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-03
      相关资源
      最近更新 更多