使用K8S检查Istio Service流量健康讲析
admin
2023-04-08 16:43:28
0次

本文主要给大家介绍使用K8S检查Istio Service流量健康讲析,文章内容都是笔者用心摘选和编辑的,使用K8S检查Istio Service流量健康讲析具有一定的针对性,对大家的参考意义还是比较大的,下面跟笔者一起了解下主题内容吧。

Istio利用k8s的探针对service进行流量健康检查,有两种探针可供选择,分别是liveness和readiness:

liveness探针用来侦测什么时候需要重启容器。比如说当liveness探针捕获到程序运行时出现的一个死锁,这种情况下重启容器可以让程序更容易可用。

readiness探针用来使容器准备好接收流量。当所有容器都ready时被视为pod此时ready。比如说用这种信号来控制一个后端服务,当pod没有到ready状态时,服务会从负载均衡被移除。

使用场景:

liveness探针被用来移除异常的pod,不重启pod就无法恢复的应用常使用liveness探针。比如前文提到的死锁,进程会一直处于活跃状态,k8s会认为正常并继续发送流量。但使用liveness探针之后会发现应用已经不再处理请求,继而重启异常pod。

readiness探针被用来控制流量进入pod。比如应用程序需要加载一个大的文件或者需要启动后进行一些配置。但默认只要容器进程启动完成就会有流量发送过来。使用readiness探针会一直等待直到完成所有加载或配置再让流量进入。

两种探针的配置相似,区别在于使用livenessProbe还是readinessProbe字段

探针配置参数:

探针有以下几个参数:

initialDelaySeconds:容器启动之后到启动探针之间的时延

periodSeconds:探针的循环执行时间,最小单位为1秒

timeoutSeconds:探针超时时间,默认值1秒

successThreshold: 成功阈值数,失败之后最小的连续成功信号数,liveness必须是1

failureThreshold:失败阈值数,当探针失败之后,在放弃之前k8s尝试重新执行探针次数,如果是liveness探针放弃意味着重启容器,readiness探针意味着pod标记为unready,默认值为3次。

HTTP探针还有以下额外的参数:

host: 所连接主机名,默认值是pod IP

scheme: HTTP或者HTTPS

path: 访问HTTP 云服务器的路径

httpHeaders: 访问HTTP的报头

port:访问容器的端口

探针可以进行三种操作:

命令行:在容器中执命令行操作,exit 0为成功状态

HTTP请求:向容器发送HTTP GET请求,如果返回值为200-400之间为成功状态

TCP 请求:向指定端口发送TCP请求,如果该端口开放监听,则为成功

下面我们来演示以下健康检查的操作:

命令行操作

首先准备busybox镜像,设置如下的yaml配置文件:

使用K8S检查Istio Service流量健康讲析

在配置文件中我们设置了一个liveness探针,在容器启动之后的5s,每隔5s去执行一下访问/tmp/healthy这个文件的操作,如果操作成功返回0,则为容器健康,如果返回值不为0, 会重启容器。

当容器启动之后会执行:

touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 600

前30s会建立/tmp/healthy文件,30s之后删除,此时访问会返回错误.

使用kubectl create -f ./your-exec-liveness.yaml建立pod
使用K8S检查Istio Service流量健康讲析

在30s之内通过kubectl describe pod liveness-exec来查看pod状态,为健康:

使用K8S检查Istio Service流量健康讲析

在30s之后查看pod的状态,发现无法访问文件,返回不健康:

使用K8S检查Istio Service流量健康讲析

之后查看pod的状态,pod的重启次数为1,此时通过liveness探针检测到不健康状态已经重启pod。

使用K8S检查Istio Service流量健康讲析

如果使用readiness探针,需要修改上文your-exec-liveness.yaml的红框字段:

使用K8S检查Istio Service流量健康讲析

通过与上文相同的方法,在30s之前查看pod的状态,为ready:

使用K8S检查Istio Service流量健康讲析

在30s之后查看pod状态,readiness探针将应用容器置为unready, ready的容器是istio-proxy:

使用K8S检查Istio Service流量健康讲析

可以看到readiness探针并不会重启容器。

HTTP请求

另一种使用liveness探针的方法是HTTP GET请求,可以用来监测网页的运行状态,我们用google liveness镜像来进行演示:

使用K8S检查Istio Service流量健康讲析

这里我们让HTTP的云服务器/healthz路径前10s返回200 的OK状态,10s之后返回状态500。

设置如下的配置文件:

使用K8S检查Istio Service流量健康讲析

liveness探针会向容器的8080端口发送请求访问/healthz, 在容器启动3s之后每隔3s发送一次。我们建立pod并查看pod的运行状态kubectl describe pod liveness-http:

使用K8S检查Istio Service流量健康讲析

会发现10s之后 liveness探针监测到了返回值是500,状态标记为不健康。

TCP请求

两种探针还可以共同使用,下面以TCP请求为例,TCP和HTTP连接类似。使用google的goproxy镜像,该镜像会在8080端口开放TCP socket连接,使用如下的配置文件:

使用K8S检查Istio Service流量健康讲析

我们用探针去访问8000端口查看pod状态;此时理论上应该无法连接:

使用K8S检查Istio Service流量健康讲析

可以看到readiness探针会每隔10s监测,无法访问时会将pod置于unready状态,liveness探针20s监测,无法成功则重启pod。

通过以上演示我们了解了如何配置两种探针和执行三种操作。通过合理的探针配置,可以实时监控Istio各个pod的运行状态,提供方便的应用治理手段。

看完以上关于使用K8S检查Istio Service流量健康讲析,很多读者朋友肯定多少有一定的了解,如需获取更多的行业知识信息 ,可以持续关注我们的行业资讯栏目的。

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...