kubernetes--应用程序健康检查

 

置顶 2017年08月24日 16:16:13 lykops 阅读数:3331

 版权声明:本文属于原创,欢迎转载,转载请保留出处:http://blog.csdn.net/liyingke112 https://blog.csdn.net/liyingke112/article/details/77531584

本文基于kubernetes 1.5.2版本编写

K8S的应用程序健康检查分为livenessProbe和readinessProbe,两者相似,但两者存在着一些区别。

livenessProbe在服务运行过程中检查应用程序是否运行正常,不正常将杀掉进程;而readness Probe是用于检测应用程序启动完成后是否准备好对外提供服务,不正常继续检测,直到返回成功为止。

livenessProbe

许多应用程序经过长时间运行,最终过渡到无法运行的状态,除了重启,无法恢复。通常情况下,K8S会发现应用程序已经终止,然后重启应用程序/pod。

有时应用程序可能因为某些原因(后端服务故障等)导致暂时无法对外提供服务,但应用软件没有终止,导致K8S无法隔离有故障的pod,调用者可能会访问到有故障的pod,导致业务不稳定。K8S提供livenessProbe来检测应用程序是否正常运行,并且对相应状况进行相应的补救措施。

readinessProbe

在没有配置readinessProbe的资源对象中,pod中的容器启动完成后,就认为pod中的应用程序可以对外提供服务,该pod就会加入相对应的service,对外提供服务。但有时一些应用程序启动后,需要较长时间的加载才能对外服务,如果这时对外提供服务,执行结果必然无法达到预期效果,影响用于体验。

比如使用tomcat的应用程序来说,并不是简单地说tomcat启动成功就可以对外提供服务的,还需要等待spring容器初始化,数据库连接没连上等等。对于spring boot应用,默认的actuator带有/health接口,可以用来进行启动成功的判断。

检测方式

exec-命令

在用户容器内执行一次命令,如果命令执行的退出码为0,则认为应用程序正常运行,其他任务应用程序运行不正常。

 
  1. ……

  2. livenessProbe:

  3. exec:

  4. command:

  5. - cat

  6. - /home/laizy/test/hostpath/healthy

  7. ……

TCPSocket

将会尝试打开一个用户容器的Socket连接(就是IP地址:端口)。如果能够建立这条连接,则认为应用程序正常运行,否则认为应用程序运行不正常。

 
  1. ……

  2. livenessProbe:

  3. tcpSocket:

  4. port: 8080

  5. ……

HTTPGet

 

调用容器内Web应用的web hook,如果返回的HTTP状态码在200和399之间,则认为应用程序正常运行,否则认为应用程序运行不正常。每进行一次HTTP健康检查都会访问一次指定的URL。

 
  1. ……

  2. httpGet: #通过httpget检查健康,返回200-399之间,则认为容器正常

  3. path: / #URI地址

  4. port: 80 #端口号

  5. #host: 127.0.0.1 #主机地址

  6. scheme: HTTP #支持的协议,http或者https

  7. httpHeaders:’’ #自定义请求的header

  8. ……

部署例子

 
  1. cat << EOF > inessprobe.yaml

  2. apiVersion: v1

  3. kind: ReplicationController

  4. metadata:

  5. name: inessprobe

  6. labels:

  7. project: lykops

  8. app: inessprobe

  9. version: v1

  10. spec:

  11. replicas: 6

  12. selector:

  13. project: lykops

  14. app: inessprobe

  15. version: v1

  16. name: inessprobe

  17. template:

  18. metadata:

  19. labels:

  20. project: lykops

  21. app: inessprobe

  22. version: v1

  23. name: inessprobe

  24. spec:

  25. restartPolicy: Always

  26. containers:

  27. - name: inessprobe

  28. image: web:apache

  29. imagePullPolicy: Never

  30. command: ['sh',"/etc/run.sh" ]

  31. ports:

  32. - containerPort: 80

  33. name: httpd

  34. protocol: TCP

  35. readinessProbe:

  36. httpGet:

  37. path: /

  38. port: 80

  39. scheme: HTTP

  40. initialDelaySeconds: 120

  41. periodSeconds: 15

  42. timeoutSeconds: 5

  43. livenessProbe:

  44. httpGet:

  45. path: /

  46. port: 80

  47. scheme: HTTP

  48. initialDelaySeconds: 180

  49. timeoutSeconds: 5

  50. periodSeconds: 15

  51. EOF

  52.  
  53. cat << EOF > inessprobe-svc.yaml

  54. apiVersion: v1

  55. kind: Service

  56. metadata:

  57. name: inessprobe

  58. labels:

  59. project: lykops

  60. app: inessprobe

  61. version: v1

  62. spec:

  63. selector:

  64. project: lykops

  65. app: inessprobe

  66. version: v1

  67. ports:

  68. - name: http

  69. port: 80

  70. protocol: TCP

  71. EOF

  72.  
  73. kubectl create -f inessprobe-svc.yaml

  74. kubectl create -f inessprobe.yaml

参数说明

initialDelaySeconds:容器启动后第一次执行探测是需要等待多少秒。

periodSeconds:执行探测的频率。默认是10秒,最小1秒。

timeoutSeconds:探测超时时间。默认1秒,最小1秒。

successThreshold:探测失败后,最少连续探测成功多少次才被认定为成功。默认是1。对于liveness必须是1。最小值是1。

failureThreshold:探测成功后,最少连续探测失败多少次才被认定为失败。默认是3。最小值是1。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值