Kubernetes pods 是否支持 NoRestart 政策?

Is NoRestart policy supported for Kubernetes pods?

批量计算,Monte Carlo,使用 Docker 图像,Google 云上的多个作业 运行 并由 Kubernetes 管理。但是它(我猜是复制控制器?)由于默认的重启策略设法一次又一次地重启相同的计算。

现在有办法让pods死掉吗?或者可能有其他解决方法来执行 pods 垃圾收集?

现在 v1.0 已经发布,更好地支持批处理计算是团队的首要任务之一,但 运行 它们已经很有可能了。

如果您 运行 将某个东西作为 pod 而不是复制控制器,您可以设置 restartPolicy field on it. The OnFailure 策略可能是您想要的,这意味着 kubernetes 将重启退出的 pod使用非零退出代码,但不会重新启动退出零的 pod。

如果您使用 kubectl run 来启动您的 pods,不幸的是,我不知道有什么方法可以让它只创建一个 pod 而不是一个复制控制器。如果您想要这样的东西,如果您 opened an issue 请求它作为一个选项,那就太好了。

截至 2015 年 11 月,kubernetes v1.1.1 现在提供了一个作业 api https://github.com/kubernetes/kubernetes/blob/master/docs/user-guide/jobs.md

以下是一个简单的作业,每秒执行一次 date 命令,持续 60 秒:

$ cat job.yaml
apiVersion: extensions/v1beta1
kind: Job
metadata:
  name: example
spec:
  selector:
    matchLabels:
      app: example
  template:
    metadata:
      name: example
      labels:
        app: example
    spec:
      containers:
      - name: example
        image: debian
        command: ["timeout",  "60", "bash", "-c", "while sleep 1; do date;done"]
      restartPolicy: Never

运行 您的 kubernetes 集群上的作业:

$ cluster/kubectl.sh create -f job.yaml
job "example" created

检索广告连播 ID:

$ cluster/kubectl.sh get pods
NAME            READY     STATUS              RESTARTS   AGE
example-3nxin   1/1       Running             0          15s

现在检查 pod 的日志:

$ cluster/kubectl.sh logs example-3nxin
Sat Dec  5 04:47:12 UTC 2015
Sat Dec  5 04:47:13 UTC 2015
Sat Dec  5 04:47:14 UTC 2015
Sat Dec  5 04:47:15 UTC 2015
Sat Dec  5 04:47:16 UTC 2015
Sat Dec  5 04:47:17 UTC 2015
Sat Dec  5 04:47:18 UTC 2015
Sat Dec  5 04:47:19 UTC 2015
Sat Dec  5 04:47:20 UTC 2015
Sat Dec  5 04:47:21 UTC 2015
Sat Dec  5 04:47:22 UTC 2015
Sat Dec  5 04:47:23 UTC 2015
Sat Dec  5 04:47:24 UTC 2015
Sat Dec  5 04:47:25 UTC 2015
Sat Dec  5 04:47:26 UTC 2015
Sat Dec  5 04:47:27 UTC 2015
Sat Dec  5 04:47:28 UTC 2015
Sat Dec  5 04:47:29 UTC 2015

您可以选择将 restartPolicy 设置为 OnFailure,这样如果作业以非零退出状态退出,它会重新启动。