文章目录
- 一 . 资源限制
- 资源限制,官方网站介绍
- Pod和Container的资源请求和限制:
- 我们可以在yaml中进行限制:如下
- 创建资源
- 发现有一个mysql失败
- 进行修改mysql 的资源限制
- 重新启动,发现正常了
- 查看具体事件
- 二 . 重启策略
- 重启策略:Pod在遇到故障之后重启的动作
- 1:Always:当容器终止退出后,总是重启容器,默认策略
- 2:OnFailure:当容器异常退出(退出状态码非0)时,重启容器
- 3:Never:当容器终止退出,从不重启容器。
- 查看重启次数加1
- 修改参数,让其不自动重启
- 三 . 探针创建及检查方式
- 健康检查:又称为探针(Probe)
- 探针的类型分为两类:
- 1、亲和性探针(LivenessProbe)
- 2、就绪性探针(ReadinessProbe)
- 探针(Probe)支持三种检查方法:
- httpGet 发送http请求,返回200-400范围状态码为成功。
- exec 执行Shell命令返回状态码是0为成功。
- tcpSocket 发起TCP Socket建立成功
- 探针 官网介绍地址
- 示例1:exec方式 (适合基本服务,检查PID文件存在)
- 编辑yaml文件
- 创建资源
- 查看资源状态
- 修改参数,继续测试
- 示例2:httpGet方式
- 编辑yaml文件
- 查看重启状态
- 查看详细信息
- 因为path 路径不对,下面创建一个正确的
- 查看状态,运行正常,探测正常
- 查看详细事件信息
- 示例3 . 使用tcpSocket方式检查
- 编写yaml文件
- 查看状态
- 四 . tcp socket方式,这个方式比较好理解(适合web 测试)
- 实例一
- 创建资源
- 查看信息,不断重启,因为端口设置的不对
- 实例二
- 创建YAML文件
- 创建资源
- 实例三
- 正常配置模拟测试案例
- 配置参数说明:
- 查看资源详细信息
- 可以看到,nginx进程杀死后,pod自动重启.
Docker中我们可以对容器进行资源控制,在k8s中当然也有对pod资源进行控制
https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/
资源限制
1:Always:当容器终止退出后,总是重启容器,默认策略
2:OnFailure:当容器异常退出(退出状态码非0)时,重启容器
3:Never:当容器终止退出,从不重启容器。
(注意:k8s中不支持重启Pod资源,只有删除重建)
因为exit 退出的返回码非0 值,检测到非正常退出,控制器会自动重启pode
[
(注意:)规则可以同时定义
livenessProbe 如果检查失败,将杀死容器,根据Pod的restartPolicy来操作。
ReadinessProbe 如果检查失败,kubernetes会把Pod从service endpoints中剔除。
pod的健康检查又被称为探针,来检查pod资源,探针的规则可以同时定义
1、亲和性探针(LivenessProbe)
判断容器是否存活(running),若不健康,则kubelet杀死该容器,根据Pod的restartPolicy来操作。
若容器中不包含此探针,则kubelet人为该容器的亲和性探针返回值永远是success
2、就绪性探针(ReadinessProbe)
判断容器服务是否就绪(ready),若不健康,kubernetes会把Pod从service endpoints中剔除,后续在把恢复到Ready状态的Pod加回后端的Endpoint列表。这样就能保证客户端在访问service’时不会转发到服务不可用的pod实例上
endpoint是service负载均衡集群列表,添加pod资源的地址
httpGet 发送http请求,返回200-400范围状态码为成功。
exec 执行Shell命令返回状态码是0为成功。
tcpSocket 发起TCP Socket建立成功
https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/
编辑yaml文件
创建资源
查看资源状态
修改参数,继续测试
编辑yaml文件
查看重启状态
查看详细信息
因为path 路径不对,下面创建一个正确的
查看状态,运行正常,探测正常
查看详细事件信息
编写yaml文件
查看状态
比如说,起一个nginx容器,nginx服务提供的端口是80端口.
配置tcp socket 探针,设定隔一个时间,用tcp方式连接80端口,如果连接成功,就返回容器健康或者就绪,如果连接失败,返回容器不健康或者不就绪,kubelet重启容器.
逆向思维示例:
简单思路:探针tcp socket连接不存在的8080端口,必然连接失败报错,从而实现pod不断重启.
创建资源
查看信息,不断重启,因为端口设置的不对
起一个nginx的pod容器,提供服务端口80.
配置探针连接端口8080,第一次监测时间为pod容器启动后的45s,第一次监测后每隔20s监测一次.
测试结果,pod容器一直在重启.
describe报错
探针自动tcp连接容器ip:8080端口,失败.所以容器一直重启.
正常配置示例
正常配置是连接提供服务的80端口
简单思路:理论上来说,长时间运行的应用程序最终会过渡到中断状态,除非重新启动,否则无法恢复.Kubernetes提供了活性探针来检测和补救这种情况.这是配置探针的根本原因,以防万一.
创建YAML文件
创建资源
正常配置模拟测试案例
简单思路:起nginx容器,然后执行命令杀死nginx进程,设定探针监测连接tcp socket 80端口,当nginx进程被杀死后,tcp socket连接失败,探针监测容器为不健康不就绪,kubelet重启容器.
配置参数说明:
容器启动后,执行nginx -s quit杀死Nginx进程
容器启动20s后开始执行readiness和liveness检测
容器启动后35s左右
探针监测到nginx进程已经死掉,无法连接到80端口,报警见下: