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 path
HTTP服务器上的访问路径 httpHeaders
要在请求中设置的自定义标头。HTTP允许重复标头 port
容器上要访问的端口的名称或编号。数字必须在1到65535的范围内
问题解决
容器不停的重启,启动不起来
可以使用
command
的ls
等方式不让容器重启,然后使用exec进入容器当中查看启动状况readinessProbe
和livenessProbe
的执行顺序先
readinessProbe
后livenessProbe
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Chc-个人数据程序主页!