k8s部署-36-k8s的健康检查带你了解下

网友投稿 759 2022-11-05

本站部分文章、图片属于网络上可搜索到的公开信息,均用于学习和交流用途,不能代表睿象云的观点、立场或意见。我们接受网民的监督,如发现任何违法内容或侵犯了您的权益,请第一时间联系小编邮箱jiasou666@gmail.com 处理。

k8s部署-36-k8s的健康检查带你了解下

上一篇的问题

上一篇中针对不同的deployment,运行相同的标签,我们最后的建议是不建议那么配置,但是在有些情况中也是可以这么操作的哈,不能说直接定论就不行。

例如:我们在不同版本的时候,就可以按照这种方式来配置哈。

默认的健康检查

k8s默认的健康检查就是简单的判断下你容器中启动的程序是否存在,如果存在,pod就正常运行,但是这种判断很多情况下并不满足我们的实际需求,比如说进程存在但是无法提供服务的情况(服务假死),像这种就无法准确的判断了。那么我们来看下k8s提供的常见健康检查方式都有什么。

cmd命令检测

[root@node1 ~]# cd namespace/[root@node1 namespace]# mkdir healthcheck/[root@node1 namespace]# cd healthcheck/[root@node1 healthcheck]# vim healthcheck-cmd.yaml apiVersion: apps/v1kind: Deploymentmetadata: name: web-demo namespace: devspec: selector: matchLabels: app: web-demo replicas: 1 template: metadata: labels: app: web-demo spec: containers: - name: web-demo image: yunweijia.com/kubernetes/web:v1 ports: - containerPort: 8080 livenessProbe: exec: command: - /bin/sh - -c - ps -ef|grep java|grep -v grep          initialDelaySeconds: 10  # 等待时长,即pod容器启动多少秒之后检查          periodSeconds: 10  # 健康检查的间隔时长          failureThreshold: 2  # 失败几次认为完全失败,然后重启pod          successThreshold: 1  # 成功几次认为没问题,正常          timeoutSeconds: 5  # 执行命令的超时时间[root@node1 healthcheck]# kubectl apply -f healthcheck-cmd.yaml

这个探针的意义相当于,执行如下命令:

/bin/sh -c ps -ef|grep java|grep -v grep

如果返回执行正常,则表示程序存活,如果失败两次,则重启该pod。

http请求检测

[root@node1 healthcheck]# vim healthcheck-http.yaml#deployapiVersion: apps/v1kind: Deploymentmetadata: name: web-demo namespace: devspec: selector: matchLabels: app: web-demo replicas: 1 template: metadata: labels: app: web-demo spec: containers: - name: web-demo image: yunweijia.com/kubernetes/web:v1 ports: - containerPort: 8080 livenessProbe: httpGet: path: examples/index.html port: 8080 scheme: HTTP initialDelaySeconds: 5 periodSeconds: 5 failureThreshold: 1 successThreshold: 1 timeoutSeconds: 5[root@node1 healthcheck]#

这个探针的意思是相当于执行了如下命令:

curl http://127.0.0.1:8080/examples/index.html

如果能正常返回就表示正常,反之则失败。需要注意的是一定要能返回200状态码。

Port端口检测

[root@node1 healthcheck]# vim healthcheck-port.yaml apiVersion: apps/v1kind: Deploymentmetadata: name: web-demo namespace: devspec: selector: matchLabels: app: web-demo replicas: 1 template: metadata: labels: app: web-demo spec: containers: - name: web-demo image: yunweijia.com/kubernetes/web:v1 ports: - containerPort: 8080 livenessProbe: tcpSocket: port: 8080 initialDelaySeconds: 20 periodSeconds: 10 failureThreshold: 2 successThreshold: 1 timeoutSeconds: 5[root@node1 healthcheck]#

这个探针的意思是说检测自己的8080端口是否存活,相当于执行了如下命令:

netstat -tunlp | grep 8080

如果存在该端口就表示正常,反之则认为异常,就会重启pod来解决该问题。

服务准备

[root@node1 healthcheck]# vim healthcheck-read.yamlapiVersion: apps/v1kind: Deploymentmetadata: name: web-demo namespace: devspec: selector: matchLabels: app: web-demo replicas: 1 template: metadata: labels: app: web-demo spec: containers: - name: web-demo image: yunweijia.com/kubernetes/web:v1 ports: - containerPort: 8080 livenessProbe: tcpSocket: port: 8080 initialDelaySeconds: 20 periodSeconds: 10 failureThreshold: 2 successThreshold: 1 timeoutSeconds: 5 readyinessProbe: httpGet: path: examples/index.html port: 8080 scheme: HTTP initialDelaySeconds: 20 periodSeconds: 10 failureThreshold: 2 successThreshold: 1 timeoutSeconds: 5[root@node1 healthcheck]#

什么叫服务准备呢?就是说经过我们 readyinessProbe 配置的检测之后,才会对外提供服务,而避免那种服务还未成功启动就已经被调用造成的异常。他的方式也是命令行、http、tcp三种方式都可以使用。

至此,本文结束。

往期推荐如何安装nginx,并根据不同的项目读取不同的配置文件五分钟学会linux磁盘共享之nfs技术磁盘的动态扩容和缩减

上一篇:微信日志告警(什么是微信日志)
下一篇:软件测试培训之单元测试用例相关概念
相关文章

 发表评论

暂时没有评论,来抢沙发吧~