Kubernetes 当pod包含多个容器时,K8s活性探针行为?

Kubernetes 当pod包含多个容器时,K8s活性探针行为?,kubernetes,kubernetes-pod,readinessprobe,livenessprobe,Kubernetes,Kubernetes Pod,Readinessprobe,Livenessprobe,场景:一个K8S吊舱有多个容器,每个容器都配置了活动/准备就绪探测器。现在,如果liveness探测在某些容器上成功,而在少数容器上失败,那么k8s将做什么 它是否只重新启动出现故障的容器 或 它会重新启动整个吊舱 将重新启动容器 就k8s文件而言: kubelet使用就绪探测来了解容器何时准备好开始接受流量。当一个吊舱的所有容器都准备好时,它就被认为准备好了 为了执行探测,kubelet向在容器中运行并侦听端口8080的服务器发送HTTP GET请求。如果服务器的/healthz路径的处理程序

场景:一个K8S吊舱有多个容器,每个容器都配置了活动/准备就绪探测器。现在,如果liveness探测在某些容器上成功,而在少数容器上失败,那么k8s将做什么

  • 它是否只重新启动出现故障的容器
  • 它会重新启动整个吊舱

  • 将重新启动容器

    就k8s文件而言:
    kubelet使用就绪探测来了解容器何时准备好开始接受流量。当一个吊舱的所有容器都准备好时,它就被认为准备好了

    为了执行探测,kubelet向在容器中运行并侦听端口8080的服务器发送HTTP GET请求。如果服务器的/healthz路径的处理程序返回一个成功代码,则kubelet认为容器是活动的和健康的。如果处理程序返回失败代码,kubelet将终止容器并重新启动它

    当吊舱运行时,kubelet能够重新启动集装箱以处理某种故障。在一个豆荚内,库伯内特斯跟踪不同的容器状态,并决定采取什么措施使豆荚恢复健康

    您可以查看pod事件以查看容器是否重新启动

    参考:和

    如果活动性探测在某些容器上成功,而在少数容器上失败,k8s会怎么做

    它将仅重新启动出现故障的容器。

    在中,您列出了所有3个探测:
    livity
    readiness
    startup

    livenessProbe
    :指示
    容器是否正在运行如果活动性探测失败,kubelet将杀死容器,容器将遵循其
    重启策略
    。如果容器不提供活动性探测,则默认状态为Success

    在您的示例中,提到:

    如果命令成功,它将返回0,kubelet将认为容器处于活动状态且运行正常。如果命令返回非零值,则kubelet将终止容器并重新启动它

    同样的情况也发生在以下情况:

    如果服务器的/healthz路径的处理程序返回一个成功代码,则kubelet认为容器是活动的和健康的。如果处理程序返回失败代码,kubelet将终止容器并重新启动它

    以及:

    kubelet将在容器启动15秒后运行第一个活力探测器。与就绪探测一样,这将尝试连接到端口8080上的goproxy容器。如果活动性探测失败,容器将重新启动

    测验 如果您想创建自己的测试,您可以使用以下HTTP Liveness probe示例:

    apiVersion: v1
    kind: Pod
    metadata:
      labels:
        test: liveness
      name: liveness-http-probe
    spec:
      containers:
      - name: liveness
        image: k8s.gcr.io/liveness
        args:
        - /server
        readinessProbe:
          httpGet:
            path: /healthz
            port: 8080
            httpHeaders:
            - name: X-Custom-Header
              value: Awesome
          initialDelaySeconds: 0
          periodSeconds: 5      
          timeoutSeconds: 5
          successThreshold: 1
          failureThreshold: 3
        livenessProbe:
          httpGet:
            path: /healthz
            port: 8080
            httpHeaders:
            - name: X-Custom-Header
              value: Awesome
          initialDelaySeconds: 5
          periodSeconds: 10     
          successThreshold: 1
          failureThreshold: 3 
      - name: nginx
        image: nginx
    
    过一段时间后,您将能够看到
    容器
    已重新启动,
    重新启动计数
    已增加,但
    pod
    仍然存在,因为
    Age
    仍在计数

    $ kubectl get po -w
    NAME                  READY   STATUS    RESTARTS   AGE
    liveness-http-probe   2/2     Running   0          20s
    liveness-http-probe   1/2     Running   0          23s
    liveness-http-probe   1/2     Running   1          42s
    liveness-http-probe   2/2     Running   1          43s
    liveness-http-probe   1/2     Running   1          63s
    ...
    liveness-http-probe   1/2     Running   5          3m23s
    liveness-http-probe   2/2     Running   5          3m23s
    liveness-http-probe   1/2     Running   5          3m43s
    liveness-http-probe   1/2     CrashLoopBackOff   5          4m1s
    liveness-http-probe   1/2     Running            6          5m25s
    liveness-http-probe   2/2     Running            6          5m28s
    liveness-http-probe   1/2     Running            6          5m48s
    liveness-http-probe   1/2     CrashLoopBackOff   6          6m2s
    liveness-http-probe   1/2     Running            7          8m46s
    liveness-http-probe   2/2     Running            7          8m48s
    ...
    liveness-http-probe   2/2     Running   11         21m
    liveness-http-probe   1/2     Running   11         21m
    liveness-http-probe   1/2     CrashLoopBackOff   11         22m
    liveness-http-probe   1/2     Running            12         27m
    ...
    liveness-http-probe   1/2     Running            13         28m
    liveness-http-probe   1/2     CrashLoopBackOff   13         28m
    
    在pod描述中,您将看到重复的
    警告
    ,如
    (x8超过28m)
    (x84超过24m)
    (x2超过28m)


    最近,我在线程中使用
    liveness
    readiness
    探针进行了一些测试。它可以为您提供更多信息。

    我似乎没有看到这一点。。伟大的挖掘+1
      Normal   Pulling    28m (x2 over 28m)     kubelet            Pulling image "k8s.gcr.io/liveness"
      Normal   Killing    28m                   kubelet            Container liveness failed liveness probe, will be restarted
      Normal   Started    28m (x2 over 28m)     kubelet            Started container liveness
      Normal   Created    28m (x2 over 28m)     kubelet            Created container liveness
      Normal   Pulled     28m                   kubelet            Successfully pulled image "k8s.gcr.io/liveness" in 561.418121ms
      Warning  Unhealthy  27m (x8 over 28m)     kubelet            Readiness probe failed: HTTP probe failed with statuscode: 500
      Warning  Unhealthy  27m (x4 over 28m)     kubelet            Liveness probe failed: HTTP probe failed with statuscode: 500
      Normal   Pulled     13m (x2 over 14m)     kubelet            (combined from similar events): Successfully pulled image "k8s.gcr.io/liveness" in 508.892628ms
      Warning  BackOff    3m45s (x84 over 24m)  kubelet            Back-off restarting failed container