ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

k8s的健康性检查-Health Check

2021-08-31 10:00:44  阅读:229  来源: 互联网

标签:容器 readness 重启 liveness 探测 Health k8s Check


1、k8s健康性检查的默认方式
k8s默认的健康检查机制:基于Dockerfile文件中的CMD或者ENTRYPOINT,如果进程退出时返回码为非零,则认为容器发生故障,k8s就会根据restartPolicy重启容器。

1)docker的restartPolicy有一下4种:
always:(无论以什么码退出,docker daemon都会尝试重启退出的容器,手动停止后,策略不再生效);

OnFailure:因出错停止的容器(非零退出)。可以max-retries指定最大尝试重启的限制次数;

unless-stopped:与always类似,区别在于手动停止容器后,就算重启docker deemon,容器策略也不再生效。

no:不自动重启(默认模式)

2)k8s中的格式
...
spec:
restartPolicy: OnFailure #重启策略
containers:
...


3)缺陷
这种机制的缺点就是在于:有时候容器发生故障,但进程并未退出,如容器的内部web服务显示500,或者系统超载,但此时的httpd的进程并没有异常退出,所以就容器依然正常运行。简而言之就是无法判断容器内的服务释放正常。

2、Health Check-> liveness探测
1)liveness的目的
用户可以自定义判断容器是否健康为条件,如果探测失败,k8s就会重启容器,从而告诉k8s什么时候重启容器实现自愈。

2)livenessProbe的关键字
...
spec:
containers:
...
livenessProbe: #Health Check的机制
httpGet: #探测方式:http的方式
path:/example/index.html #默认的索引目录
port: 8080 #服务的端口
scheme: http #用到的协议
initialDelaySeconds: 5 #容器启动10秒后开始执行liveness探测;若某个容器启动需要30秒,则这个值就要设置大于30秒
periodSeconds: 10 #每次执行liveness探测的时间间隔
failureThreshold: 3 #liveness探测失败的次数;如果连续三次失败,就会杀掉进程重启容器
successThreshold: 1 #liveness探测成功的次数;如果成功1次,就表示容器正常
timeoutSeconds: 5 #执行livesness的超时时间,如果执行后5秒没有结果,则重启执行liveness


3、Health Check-> readness探测
1)readness的目的
Readness探测是告诉什么时候可以将容器加入到svc负载均衡池中,对外提供服务
Readness探测的配置语法和liveness完全一样

 

4、总结
1、若不特意配置liveness和readness,k8s则会采用默认的方式。即通过判断容器启动进程的返回值是否为零来判断探测是否成功。
2、Livess和readness配置完全一样,语法和参数也一样,不同之处在于探测失败后的行为:livess探测是重启容器;而readness探测则是将容器设置为不可用,不接受service转发的请求
3、 Liveness和readness是独立执行的,二者之间没有依赖,可单独使用可同时使用:
       Liveness探测判断的是容器是否需要重启实现自愈;
  Readness探测判断的是容器是否已准备好对外提供服务。


5、Liveness和readness的探测手段方法
http Get:返回200-400算成功,别的算失败;

 

 

 

 

tcp socket:你指定的tcp端口打开,比如能telnet 上;
cmd exec:在容器中执行一个命令 推出返回0 算成功。

 

 

 

————————————————
版权声明:本文为CSDN博主「最美dee时光」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_44729138/article/details/105863966

标签:容器,readness,重启,liveness,探测,Health,k8s,Check
来源: https://www.cnblogs.com/tsaiccj/p/15208949.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有