kubernetes-健康检查
livenessProbe
exec(命令行)
livenessProbe命令行方式检测:web-dev-cmd.yaml,在容器中执行一个命令 推出返回0 算成功。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32#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: chcgolang/frps
ports:
- containerPort: 7500
livenessProbe: # 容器存活检查探针
exec: # 通过执行shell命令来检查服务是否正常
command: #或者command["/bin/sh","-c","ps -ef|grep frps.ini|grep -v grep"]
- /bin/sh # 使用sh脚本
- -c
- ps -ef|grep frps.ini|grep -v grep # 检测frps进程
initialDelaySeconds: 10 # 表明第一次检测在容器启动后多长时间后开始(秒)
periodSeconds: 10 # 检查间隔时间 (秒)
failureThreshold: 2 #检查失败次数,超了这个次数直接根据重启策略进行操作
successThreshold: 1 #检查失败之后最小成功连续次数,默认 1,活跃度必须为 1
timeoutSeconds: 5 # 超时秒数,默认 1s,最小值为 1s执行检测的顺序
1
2ps -ef|grep frps.ini|grep -v grep
echo $? #结果为0则成功,结果为1失败
http(http请求)
通过发送http的get请求检查服务是否正常,返回
200-399状态码则表明容器健康1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34#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: httpd
ports:
- containerPort: 80
livenessProbe: # 开启健康检测
httpGet: #http的get请求
path: /index.html # 访问地址
port: 80 # 服务端口
scheme: HTTP #请求方式HTTP/HTTPS
httpHeaders:
- name: X-Custom-Header
value: Awesome
initialDelaySeconds: 5 # 表明第一次检测在容器启动后多长时间后开始(秒)
periodSeconds: 5 # 检查间隔时间 (秒)
failureThreshold: 1 #检查失败次数,超了这个次数直接根据重启策略进行操作
successThreshold: 1 #检查失败之后最小成功连续次数,默认 1,活跃度必须为 1
timeoutSeconds: 5 # 超时秒数,默认 1s,最小值为 1s
TCP Socket
通过tcp链接到指定端口来测试容器是否健康
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36apiVersion: 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: chcgolang/goproxy
ports:
- containerPort: 8080
livenessProbe:
tcpSocket: # tcpSocket的方式进行健康检测
port: 8080 # tcp端口号
initialDelaySeconds: 20
periodSeconds: 10
failureThreshold: 2
successThreshold: 1
timeoutSeconds: 5
readinessProbe: # 判断容器是否完成(Ready状态),可以接收请求
tcpSocket:
port: 8080
initialDelaySeconds: 20
periodSeconds: 10
failureThreshold: 2
successThreshold: 1
timeoutSeconds: 5
readinessProbe和livenessProbe的区别
livenessProbe用于判断容器是否存活(Running状态),如果LivenessProbe探针探测到容器不健康,则kubelet将杀掉该容器,并根据容器的重启策略做相应的处理
用与判断服务是否存活,然后进行重启策略的相关操作
readinessProbe用于判断容器是否启动完成(ready状态),可以接收请求。如果ReadinessProbe探针检测到失败,则Pod的状态被修改
用于判断服务是否可以对外提供服务
Pod重启策略基本说明和状态描述
Pod的重启策略包括:Always、OnFailure和Never,默认值为Always。
根据
RestartPolicy的设置来进行相应的操作1
2
3Always:当容器失效时,由kubelet自动重启该容器。
OnFailure:当容器终止运行且退出码不为0时,由kubelet自动重启该容器。
Never:不论容器运行状态如何,kubelet都不会重启该容器Pod的状态描述
状态值 描述 Pending API Server已经创建该Pod,但在Pod内还有一个或多个容器的镜像没有创建,包括正在下载镜像的过程。 Runnung Pod内所有容器均已创建,且至少有一个容器处于运行状态、正在启动状态或正在重启状态。 Succeeded Pod内所有容器均成功执行后退出,且不会再重启。 Failed Pod内所有容器均已退出,但至少有一个容器退出为失败状态。 Unknown 由于某种原因无法获取该Pod的状态,可能由于网络通信不畅导致。
相关配置说明
探针
探针参数 说明 initialDelaySeconds表明第一次检测在容器启动后多长时间后开始(秒) periodSeconds检查间隔时间 (秒),默认为10秒。最小值为1 failureThreshold检查失败次数,超了这个次数将被标记为未准备好,默认为3.最小值为1 successThreshold检查失败之后最小成功连续次数,默认 1,活跃度必须为 1 timeoutSeconds超时秒数,默认 1s,最小值为 1s http
Http Get 说明 host要连接的主机名,默认为pod IP。您可能希望在httpHeaders中设置“主机” scheme用于连接主机(HTTP或HTTPS)的方案。默认为HTTP pathHTTP服务器上的访问路径 httpHeaders要在请求中设置的自定义标头。HTTP允许重复标头 port容器上要访问的端口的名称或编号。数字必须在1到65535的范围内
问题解决
容器不停的重启,启动不起来
可以使用
command的ls等方式不让容器重启,然后使用exec进入容器当中查看启动状况readinessProbe和livenessProbe的执行顺序先
readinessProbe后livenessProbe
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Chc-个人数据程序主页!





