-
零停机部署
-
避免部署无效的镜像
-
更加安全的滚动升级
一、Liveness探测 VS Readiness探测
-
Liveness探测和Readiness探测是两种healthy check机制,若不特意配置,kubernetes将对两种探测采取相同的默认行为,即通过判断容器启动进程的返回值( echo $?)是否为零来判断探测是否成功。
-
两种探测的配置方法完全一样,支持的配置参数也一样。 不同之处在于探测失败后的行为:Liveness 探测是重启容器;Readiness 探测则是将容器设置为不可用,不接收 Service 转发的请求。
-
Liveness 探测和 Readiness 探测是独立执行的,二者之间没有依赖,所以 可以单独使用,也可以同时使用。 用 Liveness 探测判断容器是否需要重启以实现自愈;用 Readiness 探测判断容器是否已经准备好对外提供服务。
1.1、每类探针都支持三种探测方法
-
exec: 通过执行命令来检查服务是否正常, 针对复杂检测或无 HTTP 接口的服务, 命 令返回值为 0 则表示容器健康。
-
httpGet : 通过发送 http 请求检查服务是否正常, 返回 200-400 状态码则表明容器健 康。
-
tcpSocket : 通过容器的 IP 和 Port 执行 TCP 检查, 如果能够建立 TCP 连接, 则表明 容器健康。
1.2、探针探测的结果
-
Success: Container 通过了检查。
-
Failure: Container 未通过检查。
-
Unknown: 未能执行检查, 因此不采取任何措施。
1.3、Pod 重启策略 restartpolicy
-
Always: 总是重启
-
OnFailure: 如果失败就重启
-
Never: 永远不重启
二、默认的健康检查
apiVersion: v1
kind: Pod
metadata:
name: healthcheck
labels:
test: healthcheck
spec:
restartPolicy: OnFailure # 默认为Always
containers:
- name: healthcheck
image: busybox
args:
- /bin/sh
- -c
- sleep 10; exit 1 # 模拟容器启动 10 秒后发生故障
2.1、Liveness探测
apiVersion: v1
kind: Pod
metadata:
name: liveness
labels:
test: liveness
spec:
restartPolicy: OnFailure # 默认为Always
containers:
- name: liveness
image: busybox
args:
- /bin/sh
- -c
- touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 600
livenessProbe:
exec:
command:
- cat
- /tmp/healthy
initialDelaySeconds: 10 # 指定容器启动10s后开始执行Liveness探测
periodSeconds: 5 # 指定每5s执行一次Liveness探测,默认是10s,最小是1s
timeoutSeconds: 1 # 探测超时时间,默认是1s,最小是1s
启动进程首先创建文件/tmp/healthy,30s后删除,如果/tmp/healthy文件存在,则认为容器处于正常状态,反之则发生故障。文章来源地址https://www.toymoban.com/news/detail-468782.html
-
探测的方法:通过cat检查/tmp/healthy文件是否存在。若命令执行成功,返回值为0,kubernetes则认为本次Liveness探测成功;若命令返回值非0,本次Liveness探测失败;
-
initialDelaySeconds:10,指定容器启动10s后开始执行Liveness探测,一般会根据应用启动的准备时间来设置。比如某个应用正常启动要花 30 秒,那么 initialDelaySeconds 的值就应该大于 30;
-
periodSeconds:5,指定每5s执行一次Liveness探测。 Kubernetes 如果连续执行 3 次 Liveness 探测均失败,则会杀掉并重启容器。
2.2、Readiness探测
-
exec,通过命令的方式
-
httpGet,判断成功的方法是http请求返回的代码在200-400之间,若不在此范围,则不接收service请求;每隔 periodSeconds时间探测一次,连续 3次探测失败,容器会从负载均衡中移除,直到下次探测成功加入。探测方式http://[container_ip]:8080/path返回值
apiVersion: v1
kind: Pod
metadata:
name: readiness
labels:
test: readiness
spec:
restartPolicy: OnFailure # 默认为Always
containers:
- name: readiness
image: busybox
args:
- /bin/sh
- -c
- touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 600
readinessProbe:
exec:
command:
- cat
- /tmp/healthy
initialDelaySeconds: 10 # 指定容器启动10s后开始执行Readiness探测
periodSeconds: 5 # 指定每5s执行一次Liveness探测
-
刚被创建时,READY状态为不可用;
-
15s后( initialDelaySeconds+ periodSeconds),第一次进行Readiness探测并成功返回,设置READY为可用;
-
30s后,/tmp/healthy被删除,连续3次 Readiness探测均失败后,READY被设置为不可用。
三、在scale up中使用Healthy Check
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-deployment
spec:
selector: # 通过标签选择被控制的pod
matchLabels:
app: web
replicas: 2
template:
metadata:
labels:
app: web
spec:
containers:
- name: web
image: web:1.0
ports:
- containerPort: 8080 # 转发到后端pod的端口号
readinessProbe:
httpGet:
scheme: HTTP
path: /python
port: 8080
initialDelaySeconds: 10
periodSeconds: 5
---
apiVersion: v1
kind: Service
metadata:
name: web-svc
spec:
type: NodePort # 添加NodePort类型的Service
selector:
app: web
ports: # 将 Service 的 8080 端口映射到 Pod 的 8080 端口,使用 TCP 协议
- protocol: TCP
port: 8080 # service监听端口
targetPort: 8080 # 转发到后端pod的端口号
-
schema 指定协议,支持 HTTP(默认值)和 HTTPS。
-
path 指定访问路径。
-
port 指定端口。
-
容器启动10s后开始探测;
-
如果http://container_ip:8080/python返回代码不是200-400,表示容器没有就绪,不接收Service web-svc的请求;
-
每隔5s再探测一次;
-
直至代码返回200-400,表明容器已经就绪,然后将其加入到web-svc的负载均衡中,开始处理客户请求;
-
探测会继续以5s的间隔请求,若连续3次失败,容器又会从负载均衡中移除。直到下次探测成功重新加入。
四、在Rolling Update中使用Healthy Check
-
正常情况下新副本需要 10 秒钟完成准备工作,在此之前无法响应业务请求。
-
但由于人为配置错误,副本始终无法完成准备工作(比如无法连接后端数据库)。
apiVersion: apps/v1
kind: Deployment
metadata:
name: app
spec:
selector: # 通过标签选择被控制的pod
matchLabels:
app: app
replicas: 10
template:
metadata:
labels:
app: app
spec:
containers:
- name: app
image: busybox
args:
- /bin/sh
- -c
- sleep 10; touch /tmp/healthy; sleep 30000
readinessProbe:
exec:
command:
- cat
- /tmp/healthy
initialDelaySeconds: 10
periodSeconds: 5
文章来源:https://www.toymoban.com/news/detail-468782.html
到了这里,关于17、Health Check 健康检查的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!