基于HTTP的探测(HTTPGetAction)向目标容器发起一个HTTP请求,根据其响应码进行结果判定,响应码形如2xx或者3xx时表示检测通过。“sepc.containers.livenessProbe.httpGet”字段用于定义此类检测,它的可用配置字段包括如下几个。

  • host < string > :请求的主机地址,默认为Pod IP,也可以在httpHeaders中使用“Host:”来定义。
  • port < string > :请求的端口,必选字段。
  • httpHeaders < []Object >:自定义的请求报文首部。
  • path < string >:请求的HTTP资源路径,即URL path。
  • scheme:建立连接使用的协议,仅可为HTTP或者HTTPS,默认为HTTP。

下面是定义在资源清单文件liveness-http.yaml中的示例,它通过lifecycle中的postStart hook创建了一个专用于httpGet测试的页面文件healthz:

apiVersion: v1
kind: Pod
metadata:
labels:
test: liveness
name: liveness-http
spec:
containers:
- name: liveness-http-demo
image: nginx:1.12-alpine
ports:
- name: http
containerPort: 80
lifecycle:
postStart:
exec:
command: ["/bin/sh", "-c", "echo Healthy > /usr/share/nginx/html/healthz"]
livenessProbe:
httpGet:
path: /healthz
port: http
scheme: HTTP

  上面资源清单文件定义的httpGet测试中,请求的资源路径为“/heathz”,地址默认为Pod IP,端口使用了容器中定义的端口名称HTTP这也是明确为容器指明要暴露的端口的用途之一。首先创建此Pod对象:

]$ kubectl apply -f liveness-http.yaml
pod “liveness-http” created

  而后查看其健康状态检测相关信息,健康状态检测正常时,容器也将正常运行:

]$ kubectl describe pods liveness-http
······
Containers:
liveness-http-demo:
······
Port: 80/TCP
State: Running
Started: Sat, 08 Oct 2022 09:37:52 +0800
Ready: True
Restart Count: 0
Liveness: http-get http://:http/healthz delay=0s timeout=1s period=10s #success=1 #failure=3
······

  接下来借助于“kubectl exec”命令删除经由postStart hook创建的测试页面healthz:

kubectl exec liveness-http rm /usr/share/nginx/html/healthz

  

而后再次使用“kubectl describe pods liveness-http”查看其详细的状态信息,事件输出中的信息可以表明探测测试失败,容器被杀掉后进行了重新创建:

一般来说,HTTP类型的探测操作应该针对专用的URL路径进行,例如前面示例中特别为其准备的“/healthz”。另外,此URL路径对应的Web资源应该以轻量化的方式在内部对应用程序的各关键组件进行全面检测以确保它们可正常向客户端提供完整的服务。

需要注意的是,这种检测方式仅对分层架构中的当前一层有效,例如它能检测应用程序工作正常与否的状态,但重启操作却无法解决其后端服务(如数据库或缓存服务)导致的故障。此时,容器可能会被一次次的重启,直到后端服务恢复正常为止。其他两种检测方式也存在类似的问题。

最新文章

  1. PCI Express(六) - Simple transactions
  2. PostgreSQL表空间、数据库、模式、表、用户/角色之间的关系
  3. nginx日志中文变成类似\xE9\xA6\x96\xE9\xA1\xB5-\xE6\x8E\xA8\xE8\x8D\x90的东西,治本方案
  4. 通过git rebase修改commit message
  5. MBR主引导扇区解析
  6. JAVA中日期处理
  7. 【Web学习日记】——C#引用WebService,从配置文件改变引用地址
  8. 浅谈Hash函数
  9. ONE WIRE
  10. 《高性能Javascript》读书笔记-1
  11. 第7章 一个java源文件中只能有一个public类
  12. python socketserver监听多端口多进程
  13. Oarcle之序列
  14. ReentrantLock和condition源码浅析(二)
  15. 使用Sublime Text 3进行Markdown 编辑+实时预览
  16. [JAVA]JAVA章3 如何获取及查看DUMP文件
  17. 【模板】kmp
  18. MT【172】内外圆
  19. MPVUE多环境定义后台URL
  20. Android开发:keytool&#39; 不是内部或外部命令 也不是可运行的程序

热门文章

  1. Longbow.Tasks
  2. 数据湖Hudi与对象存储Minio及Hive\Spark\Flink的集成
  3. Ubuntu下安装cURL库用于libcurl开发
  4. vue学习笔记(一)---- vue指令(浪起来~~~哦耶 的案例)
  5. 12月6日内容总结——BOM、DOM、两者查找标签的方式和操作标签的方式、操作class和css的方法、事件、jQuery类库
  6. springboot跨域解决
  7. Vue36 hash模式和history模式
  8. Vue3 组件之间的数据传递
  9. bat想要写一个卸载软件的脚本,最后宣布失败[未完待续...]
  10. cmd数字雨原代码