目录
k8s中pod的重启策略
pod中一共有以下三个重启策略(restartPolicy)
健康检查:
健康检查类型
支持的检查方法:
检查示例
其他检查方式示例
k8s中pod的重启策略
pod中一共有以下三个重启策略(restartPolicy)
1、Always:当容器终止退出后,总是重启容器,默认策略。
2、OnFailure:当容器异常退出(退出状态码非0)时,才重启容器。
3、Never:当容器终止退出,从不重启容器。
三种重启策略中,Always是默认策略,即当用户在配置文件中未配置关于重启的策略,则默认为Always.
当然,几种策略也按实际情况修改,即常驻容器肯定采用Always,例如nginx与mysql等
而一些预期终止的程序
1、失败重新执行,例如定时任务,则适用于OnFailure
2、失败不重新执行,例如一次性任务Neve
健康检查:
健康检查是在pod中,可能容器进程存在,pod状态也为runing,但容器内部无法提供服务了(可能是因为堆内存溢出等)这种k8s自身无法判断,需要用户来提供检查方式从情况下使用的
健康检查类型
1、livenessProbe(存活检查):如果检查失败,将杀死容器,根据Pod 的restartPolicy来操作。
2、readinessProbe(就绪检查):如果检查失败,Kubernetes会把 Pod从service endpoints中剔除。(可以理解为提出k8s的负载均衡)
3、startupProbe(启动检查):检查成功才由存活检查接手,用于保护 慢启动容器
支持的检查方法:
• httpGet:发送HTTP请求,返回200-400范围状态码为成功。
• exec:执行Shell命令返回状态码是0为成功。
• tcpSocket:发起TCP Socket建立成功。
检查方式分同机器检查与不同机器检查(一般采用curl靠谱)
不同机器检查方式:curl、wget、telnet
同机器检查:netstat、ps
检查的实现是由kubelet实现的
检查示例
模拟http请求与存活检查
先创建一个nginx的deployment.yaml
kubectl create deployment nginx --image=nginx --dry-run=client -o yaml > deployment.yaml
如果是一个生产环境,应该需要开发人员在代码中加一个健康检查页面
修改这个yaml,在这个yaml中的pod加入了存活检查与启动检查,路径为根目录与80端口
apiVersion: apps/v1
kind: Deployment
metadata:
creationTimestamp: null
labels:
app: nginx
name: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
strategy: {}
template:
metadata:
creationTimestamp: null
labels:
app: nginx
spec:
containers:
- image: nginx
name: nginx
resources: {}
livenessProbe:
httpGet:
path: /
port: 80
initialDelaySeconds: 3 #启动容器后多少秒健康检查
periodSeconds: 10 #以后每间隔多少秒检查一次
readinessProbe:
httpGet:
path: /
port: 80
initialDelaySeconds: 3
periodSeconds: 10
启动
kubectl apply -f deployment.yaml
查看启动成功
kubectl get pods
给这个deployment添加service暴露端口
kubectl expose deployment nginx --port=80 --target-port=80
查看创建成功
kubectl get pods,svc
从日志上看检查一直在执行
此时进入一个nginx的pod中,删除他的index.html命令
从日志上看已经有了一个错误的日志
查看这个pod详情(pod名按实际生成来)
kubectl describe pod nginx-5b645dcb8b-5gwmk
发现在详情中,由出现健康检查有403的错误日志,并重建了容器
pod中的nginx也有了重启记录
删除的index.html也恢复了
注意:这里的重启,实际是重新拉取镜像帮你重建了这个容器。但pod名不变
其他检查方式示例