默认情况下,Kubelet是否会重复重新启动Pod?

时间:2020-04-11 17:15:56

标签: kubernetes

我正在开始使用Kubernetes,并且我正在尝试了解有关活动性探针的更多信息。

某些文档和文章将failureThreshold的默认值设为3倍。并且当您不指定failureThreshold时,Kubernetes将在重新启动容器之前进行3次探测。

我的问题是,kubelet会重新启动pod容器多少次?

这是一个示例livenessprobe-execaction.yaml:

apiVersion: v1
kind: Pod
metadata:
  labels:
    test: liveness
  name: liveness-exec
spec:
  containers:
  - name: liveness
    image: k8s.gcr.io/busybox
    args: # command to be executed when the container starts
    - /bin/sh
    - -c
    - touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 600 # during first 30 seconds there will be a file and cat will return success, when removed, a failure
    livenessProbe:
      exec:
        command: # in the first probe there will be a file within 30 seconds, and no errors
                 # and after 35 seconds a nex probe is done but the file is gone, and error will show up and machine will be restarted
                 # several restarts should happen or restarts only 3 times?
        - cat
        - /tmp/healthy
      initialDelaySeconds: 5 # kubelet waits 5 seconds before first probe
      periodSeconds: 5 # kubelet checks every 5 seconds
      #failureThreshold: 3 is the default number of times, after the 3rd liveness probe the container is restarted? forever?

创建广告连播后:

$ kubectl apply -f livenessprobe-execaction.yaml

运行手表:

$ kubectl get pod liveness-exec --watch

输出为:

    NAME            READY   STATUS    RESTARTS   AGE
    liveness-exec   1/1     Running   0          4s
    liveness-exec   1/1     Running   1          75s
    liveness-exec   1/1     Running   2          2m29s
    liveness-exec   1/1     Running   3          3m44s
    liveness-exec   1/1     Running   4          5m
    liveness-exec   1/1     Running   5          6m14s
    liveness-exec   0/1     CrashLoopBackOff   5          7m29s
    liveness-exec   1/1     Running            6          8m57s
    liveness-exec   1/1     Running            7          10m
    liveness-exec   0/1     CrashLoopBackOff   7          11m
    liveness-exec   1/1     Running            8          16m
    liveness-exec   1/1     Running            9          17m
    liveness-exec   0/1     CrashLoopBackOff   9          18m

2 个答案:

答案 0 :(得分:0)

这取决于PodSpec中的restartPolicy

PodSpec具有一个restartPolicy字段,其可能值为AlwaysOnFailureNever。默认值为AlwaysrestartPolicy适用于Pod中的所有容器。 restartPolicy仅指通过kubelet在同一节点上重新启动容器。通过kubelet重新启动的退出容器将以指数退避延迟(10s,20s,40s…)重新启动,上限为五分钟,并在成功执行十分钟后重置

答案 1 :(得分:0)

感谢您的回复。我已经看到了一些类似的答案,但这并不能很好地解释将Pod重新启动多少次。答案是,从今天开始,它将以默认模式“始终”永远重启。

似乎无法设置最大重新启动次数。

您可以“总是”,“失败”或“从不重启”。在始终和失败模式下,这5分钟只是重试启动容器之间的最长等待时间。

“从不”不会重新启动容器。

因此,尚无选项可以帮助我们设置最大重试次数。

引用Dan Wahlin的课程为主题,该课程:

首先,5分钟是重新启动之间的最大上限时间。 如果再次运行它,您肯定会发现它肯定开始变慢 重新启动的次数很多(请参见下文),并且只会重新启动 每5分钟尝试一次。它坚持那个数字,除非容器 是健康的(在这种情况下,它将重置事物)。

关于最大重新启动次数(这是您的问题是什么 我现在才意识到),看起来他们仍在努力 我可以在github网站上看到的功能。我不正常 必须处理这种情况(通常是集群管理员) 但是,如果我遇到其他任何问题,我会通知您。

https://github.com/kubernetes/kubernetes/issues/49466 https://github.com/kubernetes/kubernetes/pull/79334

看起来像是将解决该请求的特定拉取请求:

https://github.com/kubernetes/kubernetes/pull/79334/files/db71ebf0ec9bc04c48542059ccd46a34a2abcc16#diff-e281c21e93f01ecc8cf12e4ff535b3e5