Kubernetes Jobs的边车容器?

JKn*_*ght 25 monitoring kubernetes

我们Job在这里使用Kubernetes 进行大量批量计算,并且我想用监控边车来检测每个Job,以便根据作业的进度更新集中式跟踪系统.

唯一的问题是,我无法弄清楚作业中多个容器的语义是什么(或应该是什么).

无论如何我给了它一个镜头(alpine每1秒打一个"你好" 的边车),在我的主要任务完成之后,Job考虑s Successful并且kubectl get pods在Kubernetes 1.2.0中显示:

NAME                                         READY     STATUS      RESTARTS   AGE
    job-69541b2b2c0189ba82529830fe6064bd-ddt2b   1/2       Completed   0          4m
    job-c53e78aee371403fe5d479ef69485a3d-4qtli   1/2       Completed   0          4m
    job-df9a48b2fc89c75d50b298a43ca2c8d3-9r0te   1/2       Completed   0          4m
    job-e98fb7df5e78fc3ccd5add85f8825471-eghtw   1/2       Completed   0          4m
Run Code Online (Sandbox Code Playgroud)

如果我描述其中一个豆荚

State:              Terminated
  Reason:           Completed
  Exit Code:        0
  Started:          Thu, 24 Mar 2016 11:59:19 -0700
  Finished:         Thu, 24 Mar 2016 11:59:21 -0700
Run Code Online (Sandbox Code Playgroud)

然后GET,作业的yaml显示每个容器的信息:

  status:
    conditions:
    - lastProbeTime: null
      lastTransitionTime: 2016-03-24T18:59:29Z
      message: 'containers with unready status: [pod-template]'
      reason: ContainersNotReady
      status: "False"
      type: Ready
    containerStatuses:
    - containerID: docker://333709ca66462b0e41f42f297fa36261aa81fc099741e425b7192fa7ef733937
      image: luigi-reduce:0.2
      imageID: docker://sha256:5a5e15390ef8e89a450dac7f85a9821fb86a33b1b7daeab9f116be252424db70
      lastState: {}
      name: pod-template
      ready: false
      restartCount: 0
      state:
        terminated:
          containerID: docker://333709ca66462b0e41f42f297fa36261aa81fc099741e425b7192fa7ef733937
          exitCode: 0
          finishedAt: 2016-03-24T18:59:30Z
          reason: Completed
          startedAt: 2016-03-24T18:59:29Z
    - containerID: docker://3d2b51436e435e0b887af92c420d175fafbeb8441753e378eb77d009a38b7e1e
      image: alpine
      imageID: docker://sha256:70c557e50ed630deed07cbb0dc4d28aa0f2a485cf7af124cc48f06bce83f784b
      lastState: {}
      name: sidecar
      ready: true
      restartCount: 0
      state:
        running:
          startedAt: 2016-03-24T18:59:31Z
    hostIP: 10.2.113.74
    phase: Running
Run Code Online (Sandbox Code Playgroud)

所以看起来我的边车需要观看主要过程(如何?)并且一旦检测到它独自在吊舱中就会优雅地退出?如果这是正确的,那么是否有最佳实践/模式(如果sidecar退出主容器的返回代码?但它是如何得到的?)?

**更新**经过进一步的实验,我还发现了以下内容:如果一个pod中有两个容器,那么在pod中的所有容器返回退出代码0之前,它不会被视为成功.

此外,如果restartPolicy: OnFailure在pod规范上设置了,则pod中以非零退出代码终止的任何容器将在同一个pod中重新启动(这对于监视sidecar来计算重试次数并删除作业可能很有用)在一定数量之后(解决方法目前在Kubernetes工作中没有最大重试次数)).

Pra*_*h B 5

您可以使用向下的api从sidecar中找出自己的pod名称,然后从apiserver中检索自己的pod来查找存在状态。让我知道这是怎么回事。

  • @Adrian现在可能有点晚了,但是 Kubernetes 通过 `/var/secrets/` 和 `https:// 公开了 [API 信息](https://kubernetes.io/docs/admin/service-accounts-admin/) kubernetes.default/`。所以基本上,你可以通过向下的 API 将 pod 命名空间和名称暴露给容器,然后与 Kubernetes API 接口来查询其他容器的状态。 (2认同)