重启策略:
• Always:当容器终止退出后,总是重启容器,默认策略。
• OnFailure:当容器异常退出(退出状态码非0)时,才重启容器。
• Never:当容器终止退出,从不重启容器。
健康检查有以下两种类型:
• livenessProbe(存活检查):如果检查失败,将杀死容器,根据Pod的restartPolicy来操作。(失败就重启pod)
• readinessProbe(就绪检查):如果检查失败,Kubernetes会把Pod从service endpoints中剔除。
(service相当于负载均衡,剔除掉不正常pod,使service往后端转发的时候就转不到那个不正常pod上了)
• startupProbe(启动检查)
支持以下三种检查方法:
• httpGet:发送HTTP请求,返回200-400范围状态码为成功。
• exec:执行Shell命令返回状态码是0为成功。
• tcpSocket:发起TCP Socket建立成功
例子:
livenessProbe(存活检查)为例
采用livenessProbe存活检测,启动容器后,检测/tmp/healthy是否存在,不存在代表挂掉。默认自动重启容器。这儿是exec命令 方式检测。
1.exec方式
配置:
livenessProbe:
exec:
command:
- cat
- /tmp/healthy
initialDelaySeconds: 50 #启动容器后多少秒健康检查
periodSeconds: 20 #以后间隔多少秒检查一次
测试:
pod状态(第一个是刚创建的):
[root@k8s-master pod_yml]# kubectl get pod
NAME READY STATUS RESTARTS AGE
pod-check-test 1/1 Running 0 12m
pod-data-test 2/2 Running 0 70m
pod-net-test 2/2 Running 0 89m
进入pod删除掉tmp/healthy,等一分钟看效果
2.httpget方式
配置:
livenessProbe:
httpGet:
path: /index.html
port: web
initialDelaySeconds: 50 #启动容器后多少秒健康检查
periodSeconds: 20 #以后间隔多少秒检查一次
测试: 进入容器删除/默认页/usr/share/nginx/html/index.html,一分钟后看效果
3.tcpSocket(端口探测)
livenessProbe:
tcpSocket:
port: 80
initialDelaySeconds: 30 #启动容器后多少秒健康检查
periodSeconds: 10 #以后间隔多少秒检查一次
livenessProbe与readinessProbe配置一样。他俩区别只在于检查后处理方式不同,liveness 是将挂掉的重启,readiness是将挂掉的在service(负载均衡)后端列表中剔掉。