Kubernetes中配置livenessProbe、ReadinessProbe和StartupProbe_2023推荐

   2023-03-08 大化工佚名20
核心提示:livenessProbe、readinessProbe和startupProbe作用kubelet使用liveness

livenessProbe、readinessProbe和startupProbe作用

kubelet使用livenessProbe(存活探针)来判断何时重启容器。例如,当程序中产生死锁的时候,程序还在运行,通过livenessProbe可以检测到程序已不能正常提供服务。这种情况下重启容器可以让程序恢复可用的状态(虽然程序中存在会导致死锁的bug)。如果没有配置livenessProbe,则默认状态为Success。

kubelet使用readinessProbe(就绪探针)来判断容器何时准备好了接受流量。当Pod中的所有容器都准备好时,Pod就被认为准备好了。最重要的用途是用来控制哪些pod被用作服务的后端。当一个Pod未准备好时,在负载均衡中会被移除。如果没有配置readinessProbe,则默认状态为Success。

Kube.NETes从1.17版本开始新增了startupProbe(启动探针),kubelet使用startupProbe来判断容器应用程序何时启动。如果配置了startupProbe,等启动成功后才会进行livenessProbe和readinessProbe。这样可以避免应用程序在启动过程被livenessProbe和readinessProbe影响。如果没有配置startupProbe,则默认状态为Success。

k8s中的四种健康检查方式

livenessProbe、readinessProbe和startupProbe都可以称为健康检查,这几种健康检查类型都支持四种检查方式:exec命令、httpGet、tcpSocket和grpc。其中exec命令行方式通用性最强,适用于大部分场景,tcpSocket方式适用于TCP类型的服务,httpGet方式适用于http类型的服务,grpc方式适用于grpc类型的服务。

exec:可以将自定义的健康检查方法封装成命令行(CLI)工具使用exec来执行,如果检测结果是正常,命令行返回0值,否则返回非0值。httpGet:通过容器的IP地址、端口及服务提供的http接口路径,发起一个HTTP Get请求,如果响应的状态码大于等于200且小于400,则认为服务是健康的。tcpSocket:通过容器的IP地址和端口,发起一个tcp请求,能建立连接则认为服务是健康的。grpc:通过容器的IP地址和端口,发起一个grpc请求(前提是服务实现了grpc健康检查协议),返回服务健康的结果正常则认为服务是健康的。

配置探针的常用可选参数如下:

参数名称

默认值

最小值

描述

initialDelaySeconds

0秒

0秒

容器启动后多久开始进行第一次探测。

periodSeconds

10秒

1秒

探测频度,频率过高会对pod带来较大的额外开销,频率过低则无法及时反映容器真实情况。

timeoutSeconds

1秒

1秒

探测超时时间。

failureThreshold

3

1

处于成功状态时,探测连续失败几次可被认为失败。

successThreshold

1

1

处于失败状态时,探测连续成功几次,被认为成功。

配置示例

livenessProbe、readinessProbe和startupProbe的配置方法基本类似,下面就以配置livenessProbe为例。

exec方式
apiVersion: v1kind: Podmetadata:  labels:    test: liveness  name: liveness-execspec:  containers:  - name: liveness    image: registry.k8s.io/busybox    args:    - /bin/sh    - -c    - touch /tmp/healthy; sleep 30; rm -f /tmp/healthy; sleep 600    livenessProbe:      exec:        command:        - cat        - /tmp/healthy      initialDelaySeconds: 5      periodSeconds: 5
httpGet方式
apiVersion: v1kind: Podmetadata:  labels:    test: liveness  name: liveness-httpspec:  containers:  - name: liveness    image: registry.k8s.io/liveness    args:    - /server    livenessProbe:      httpGet:        path: /healthz        port: 8080        httpHeaders:        - name: Custom-Header          value: Awesome      initialDelaySeconds: 3      periodSeconds: 3
tcpSocket方式
apiVersion: v1kind: Podmetadata:  name: goproxy  labels:    App: goproxyspec:  containers:  - name: goproxy    image: registry.k8s.io/goproxy:0.1    ports:    - containerPort: 8080    readinessProbe:      tcpSocket:        port: 8080      initialDelaySeconds: 5      periodSeconds: 10    livenessProbe:      tcpSocket:        port: 8080      initialDelaySeconds: 15      periodSeconds: 20
grpc方式
apiVersion: v1kind: Podmetadata:  name: etcd-with-grpcspec:  containers:  - name: etcd    image: registry.k8s.io/etcd:3.5.1-0    command: [ "/usr/local/bin/etcd", "--data-dir",  "/var/lib/etcd", "--listen-client-urls", "http://0.0.0.0:2379", "--advertise-client-urls", "http://127.0.0.1:2379", "--log-level", "debug"]    ports:    - containerPort: 2379    livenessProbe:      grpc:        port: 2379      initialDelaySeconds: 10

更多关于健康检查配置的说明可以参考kubernetes官方文档:
https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/。

 
 
反对 0举报 0 收藏 0 打赏 0
 
更多>同类工业新闻
推荐图文
推荐工业新闻
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  RSS订阅  |  违规举报