k8s部署-36-k8s的健康检查带你了解下
Posted 公号运维家
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了k8s部署-36-k8s的健康检查带你了解下相关的知识,希望对你有一定的参考价值。
怎么判断我们的pod运行正常呢?怎么判断pod里面运行的程序正常呢?是由什么逻辑来判断的呢?到底是什么情况下会通过重启来验证服务的可用性呢?下来我们看看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/v1
kind: Deployment
metadata:
name: web-demo
namespace: dev
spec:
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
#deploy
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-demo
namespace: dev
spec:
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/v1
kind: Deployment
metadata:
name: web-demo
namespace: dev
spec:
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端口是否存活,相当于执行了如下命令:
剩余内容请转至VX公众号 “运维家” ,回复 “143” 查看。
以上是关于k8s部署-36-k8s的健康检查带你了解下的主要内容,如果未能解决你的问题,请参考以下文章