基于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资源应该以轻量化的方式在内部对应用程序的各关键组件进行全面检测以确保它们可正常向客户端提供完整的服务。

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

Kubernetes--Pod存活性探测(设置HTTP探针)的更多相关文章

  1. (五)Kubernetes Pod状态和生命周期管理

    什么是Pod Pod是kubernetes中你可以创建和部署的最小也是最简的单位.Pod代表着集群中运行的进程. Pod中封装着应用的容器(有的情况下是好几个容器),存储.独立的网络IP,管理容器如何 ...

  2. Kubernetes Pod中容器的Liveness、Readiness和Startup探针

    我最新最全的文章都在南瓜慢说 www.pkslow.com,欢迎大家来喝茶! 1 探针的作用 在Kubernetes的容器生命周期管理中,有三种探针,首先要知道,这探针是属于容器的,而不是Pod: 存 ...

  3. pod健康检查(liveness probe存活探针&&readiness probe 可读性探针)

    在Kubernetes集群当中,我们可以通过配置liveness probe(存活探针)和readiness probe(可读性探针)来影响容器的生存周期.参考文档:https://kubernete ...

  4. Kubernetes Pod 驱逐详解

    原文链接:Kubernetes Pod 驱逐详解 在 Kubernetes 中,Pod 使用的资源最重要的是 CPU.内存和磁盘 IO,这些资源可以被分为可压缩资源(CPU)和不可压缩资源(内存,磁盘 ...

  5. Kubernetes Pod 调度约束

    Kubernetes Pod 调度约束 可以将pod调度到指定的节点Node内 默认:根据节点资源利用率等分配Node节点. nodeName用于将Pod调度到指定的Node名称上 nodeSelec ...

  6. Kubernetes Pod故障归类与排查方法

    Pod概念 Pod是kubernetes集群中最小的部署和管理的基本单元,协同寻址,协同调度. Pod是一个或多个容器的集合,是一个或一组服务(进程)的抽象集合. Pod中可以共享网络和存储(可以简单 ...

  7. Python Django撸个WebSSH操作Kubernetes Pod(下)- 终端窗口自适应Resize

    追求完美不服输的我,一直在与各种问题斗争的路上痛并快乐着 上一篇文章Django实现WebSSH操作Kubernetes Pod最后留了个问题没有解决,那就是terminal内容窗口的大小没有办法调整 ...

  8. 拥抱K8S,Spring Boot 2.3提供K8s活性和就绪性探针

    Spring Boot 2.3将包括对Kubernetes liveness&readiness Probe的本地支持,扩展了2.2的"运行状况组"支持,允许开发人员选择运 ...

  9. Kubernetes Pod 全面知识

    Pod 是在 Kubernetes 中创建和管理的.最小的可部署的计算单元,是最重要的对象之一.一个 Pod 中包含一个或多个容器,这些容器在 Pod 中能够共享网络.存储等环境. 学习 Kubern ...

  10. Kubernetes Pod 镜像拉取策略

    Kubernetes Pod 镜像拉取策略 官方文档:https://kubernetes.io/docs/concepts/containers/images/ • IfNotPresent:默认值 ...

随机推荐

  1. Argus 与其他(非Oracle B2B)EDI 工具的集成

    Argus 是Oracle 的产品,它自然推荐使用Oracle 自己的EDI 系统,这个系统就是Oracle B2B.但是Argus 留有与其他EDI 工具的集成空间,即即使不使用Oracle B2B ...

  2. Node.js学习笔记----day05(MongonDB详情)

    认真学习,认真记录,每天都要有进步呀!!! 加油叭!!! 一.es6中的find() 方法的原理 EcmaScript 6 对数组新增了很多方法 比如,find find 接收一个方法作为参数,方法内 ...

  3. 10月31日ATM编写逻辑描述

    目录 ATM逻辑描述 三层框架简介 1.第一层(src.py) 2.第二层(interface文件夹下内容) 3.第三层(db_hanlder) 启动函数 用户注册功能 用户登录 common中的小功 ...

  4. 简单了解C语言如何构建多文件项目

    简单理解C语言如何构建工程 首先我们最好有一个好用的编辑器,vscode也好,visual studio也罢,dev也行,这里我们使用的是code::block: 一.了解C语言工程的构建原理 ​ 首 ...

  5. 有序数组的平方&长度最小的子数组&螺旋矩阵Ⅱ

    一.有序数组的平方 977.有序数组的平方 leetcode链接 1.方法概述 双"指针"解法:因为数组本来是有序的,平方后可能出现的两端大数值大的情况.所以从数组两端开始遍历,谁 ...

  6. pycharm软件的基本使用、python的注释语法、变量与常量、变量的命名风格、垃圾回收机制、数据类型、数据类型之整型、数据类型之浮点型

    一.pycharm软件的基本使用 修改主题背景 修改字体大小 切换解释器 如何新建python文件 创建后缀是py的文件 注意:pycharm的语言 一定要使用英文的 二.python语法注释 (1) ...

  7. EPICS Archiver Appliance在Centos7的定制部署

    EPICS Archiver Appliance的定制部署1 EPICS Archiver Appliance的定制部署2 上面两篇是在Centos8下成功,后来又想在Centos7下跑成功,按上面的 ...

  8. LG P4173 残缺的字符串

    \(\text{Problem}\) 大概就是带通配符的字符串匹配问题,输出所有比配位置 \(1\le n \le 3\times 10^5\) \(\text{Solution}\) 这是 \(FF ...

  9. 梅毒感染者能否应用TNF抑制剂

    对于伴发的未经控制的任何严重感染,都不适合使用TNF抑制剂.在1998年国际上首个TNF抑制剂获批治疗类风湿关节炎(RA)以来,这就是广大临床医生和风湿性疾病患者的共识.在临床实践中,需要权衡药物的利 ...

  10. CCRD_TOC_2007_EULAR专辑_1

    中信国健临床通讯 EULAR 2007专辑I 目 录 类风湿关节炎 1 TEMPO 研究第一年影像学数据显示:骨侵蚀修复 (repair) 几乎只出现在无关节肿胀或肿胀改善组 van der Heij ...