在 v1.12 中增加 k8s 容器的启动门槛

Increase startup threshold for k8s container in v1.12

按照文档 here,我可以像这样设置容器启动的阈值:

startupProbe:
  httpGet:
    path: /healthz
    port: liveness-port
  failureThreshold: 30
  periodSeconds: 10

很遗憾,startupProbe.failureThreshold 似乎与我们当前的 k8s 版本 (1.12.1) 不兼容:

unknown field "startupProbe" in io.k8s.api.core.v1.Container; if you choose to ignore these errors, turn validation off with --validate=false

有解决办法吗?我想给容器一个大约 40 分钟以上的启动时间。

是的,startupProbeintroduced with 1.16 - 所以你不能在 Kubernetes 1.12 中使用它。

我猜您正在定义 livenessProbe - 因此解决问题的最简单方法是删除 livenessProbe。大多数应用程序不需要(有些甚至不需要 readinessProbe)。另请参阅这篇优秀文章:Liveness Probes are Dangerous.

如果您有探测器,您可以指定 initialDelaySeconds 并使其成为足以让您的容器启动的大值。

如果你根本不关心探测器,那么你可以让它执行一个永远不会失败的命令,例如whoami

从下面的示例中获取您需要的内容:

readinessProbe:
  exec:
    command:
    - whoami
  initialDelaySeconds: 2400
  periodSeconds: 5

如果需要,您可以为 livenessProbe 执行相同的配置。

我知道这不是这个问题的答案,但可能会有用...

“startupProbes”随 k8s 1.16+ 一起提供。

如果你起诉 helm,你可以在你的模板中用这个包围你的块 startupProbes:

{{- if (semverCompare ">=1.16-0" .Capabilities.KubeVersion.GitVersion) }}
startupProbe:
  httpGet:
    path: /healthz
    port: liveness-port
  failureThreshold: 30
  periodSeconds: 10
{{- end }}