代码之家  ›  专栏  ›  技术社区  ›  Chris Stryczynski

Kubernetes作业舱已成功完成,但其中一个容器未就绪

  •  1
  • Chris Stryczynski  · 技术社区  · 5 年前

    我有一些奇怪的行为。

    当A 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
    

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

    如果我在吊舱上做了描述,相关信息是:

    ...
    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
    ...
    
    1 回复  |  直到 5 年前
        1
  •  2
  •   Clorichel    5 年前

    带吊舱的吊舱 Ready 地位意味着 “能够为请求提供服务,应将其添加到所有匹配服务的负载平衡池中” https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#pod-conditions

    在您的情况下,您不想服务请求,而只想执行 php artisan migrate 一次,完成。所以你不必担心这种状况,重要的是 State: Terminated 用一个 Reason: Completed 以及零退出代码:您的命令执行了任何操作,然后成功退出。

    如果命令的结果不是您所期望的,则必须从运行此命令的容器中调查日志 kubectl logs your-pod -c app (何处) app 是您定义的容器的名称),和/或您希望 php Artisan迁移 不发出零退出代码的命令。