美文网首页
Kubernetes Pod中容器的Liveness、Readi

Kubernetes Pod中容器的Liveness、Readi

作者: 南瓜慢说 | 来源:发表于2021-08-24 08:21 被阅读0次

1 探针的作用

Kubernetes的容器生命周期管理中,有三种探针,首先要知道,这探针是属于容器的,而不是Pod

  • 存活探针:Liveness
  • 就绪探针:Readiness
  • 启动探针:Startup

Liveness探针可以知道什么时候要重启容器,如果发现容器不健康,就会杀死并重新创建新的容器。

Readniess探针可以知道要不要访问容器,如果发现容器不健康,就不会把请求路由到该容器。

Startup探针可以知道应用程序容器什么时候启动了。 如果配置了这类探测器,就可以控制容器在启动成功后再进行存活性和就绪检查, 确保这些存活、就绪探测器不会影响应用程序的启动。 这可以用于对慢启动容器进行存活性检测,避免它们在启动运行之前就被杀掉。

2 配置示例

2.1 存活Liveness

2.1.1 命令方式

apiVersion: v1
kind: Pod
metadata:
  labels:
    test: liveness
  name: liveness-exec
spec:
  containers:
  - name: liveness
    image: k8s.gcr.io/busybox
    args:
    - /bin/sh
    - -c
    - touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 600
    livenessProbe:
      exec:
        command:
        - cat
        - /tmp/healthy
      initialDelaySeconds: 5
      periodSeconds: 5

2.1.2 HTTP方式

apiVersion: v1
kind: Pod
metadata:
  labels:
    test: liveness
  name: liveness-http
spec:
  containers:
  - name: liveness
    image: k8s.gcr.io/liveness
    args:
    - /server
    livenessProbe:
      httpGet:
        path: /healthz
        port: 8080
        httpHeaders:
        - name: Custom-Header
          value: Awesome
      initialDelaySeconds: 3
      periodSeconds: 3

2.1.3 TCP方式

apiVersion: v1
kind: Pod
metadata:
  name: goproxy
  labels:
    app: goproxy
spec:
  containers:
  - name: goproxy
    image: k8s.gcr.io/goproxy:0.1
    ports:
    - containerPort: 8080
    readinessProbe:
      tcpSocket:
        port: 8080
      initialDelaySeconds: 5
      periodSeconds: 10
    livenessProbe:
      tcpSocket:
        port: 8080
      initialDelaySeconds: 15
      periodSeconds: 20

2.2 就绪Readiness

Liveness类似:

readinessProbe:
  exec:
    command:
    - cat
    - /tmp/healthy
  initialDelaySeconds: 5
  periodSeconds: 5

2.3 使用启动探测器保护慢启动容器

幸亏有启动探测,应用程序将会有最多 5 分钟(30 * 10 = 300s) 的时间来完成它的启动。 一旦启动探测成功一次,存活探测任务就会接管对容器的探测,对容器死锁可以快速响应。 如果启动探测一直没有成功,容器会在 300 秒后被杀死,并且根据 restartPolicy 来设置 Pod 状态。

ports:
- name: liveness-port
  containerPort: 8080
  hostPort: 8080

livenessProbe:
  httpGet:
    path: /healthz
    port: liveness-port
  failureThreshold: 1
  periodSeconds: 10

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

3 Springboot应用的配置

Springboot 2.3新增了探针,具体路径如下:

存活:/actuator/health/liveness

就绪:/actuator/health/readiness

需要通过添加actuator,并通过属性配置打开对应功能:

management.endpoints.web.exposure.include="*"
management.health.livenessState.enabled=true
management.health.readinessState.enabled=true
management.endpoint.health.probes.enabled=true
management.endpoint.health.probes.show-details=always

相关文章

  • Kubernetes Pod中容器的Liveness、Readi

    1 探针的作用 在Kubernetes的容器生命周期管理中,有三种探针,首先要知道,这探针是属于容器的,而不是Po...

  • Kubernetes学习之pod

    Pod简介 Pod是kubernetes集群能够调度的最小单元。Pod是容器的封装 。在Kubernetes集群中...

  • Kubernetes-存活探针

    1 介绍 1.1 概念   存活探针(liveness probe):检查容器是否还在运行,可以为pod中的每个容...

  • Kubernetes-Pod详解

    Pod 为什么需要Pod Pod,是Kubernetes项目中的原子调度单位。容器就是未来云计算系统中的进程;容器...

  • k8s-实战入门-Pod(六)

    Pod Pod是kubernetes集群进行管理的最小单元,程序要运行必须部署在容器中,而容器必须存在于Pod中。...

  • Pod中容器健康检查和恢复机制

    健康检查 Kubernetes文档例子: 这里定义的容器liveness会创建/healthy文件,然后30秒后删...

  • K8s中Pod健康检查源代码分析

    了解k8s中的Liveness和Readiness Liveness:表明是否容器正在运行。如果liveness探...

  • 详解 Kubernetes Pod imagePullPolic

    详解 Kubernetes Pod imagePullPolicy 问题背景 Kubernetes 管理下的容器会...

  • k8s是什么

    云计算经典架构 容器Docker 容器云kubernetes kubernetes简介术语pod如何管理?serv...

  • kubernetes的pod/rc/service管理

    kubernetes的pod管理 一个Pod中的应用容器共享同一组资源: (1)PID命名空间:Pod中的不同应用...

网友评论

      本文标题:Kubernetes Pod中容器的Liveness、Readi

      本文链接:https://www.haomeiwen.com/subject/kmariltx.html