1、何为健康检查

Kubernetes架构中,每个节点都会有kubelet,容器健康检查(Container Probe)的任务就是由Kubelet定期执行的。

Kubelet会通过调用Pod中容器的Handler来执行检查动作,Handler有以下三种类型:

  • ExecAction:在容器中执行特定的命令,命令退出返回0(命令执行返回值:$?)表示成功
  • TCPSocketAction:根据容器IP地址及特定的端口进行TCP检查,端口访问/开放/暴露表示成功
  • HTTPGetAction:根据容器IP、端口及访问路径发起一次HTTP请求,如果返回状态码在200到400之间表示成功

每种检查动作都可能会有三种返回状态:

  • Success:表示通过健康检查
  • Failure:表示没有通过健康检查
  • Unknown:表示检查动作失败

2、探针分类

创建Pod时,可通过livenessreadiness两种方式来探测Pod内容器的运行情况。

2.1、LivenessProbe探针(存活性探测)

判断容器是否健康(Running状态)并反馈给Kubelet。其实有很多应用长时间的后台运行后会逐渐的转为不可用状态,并且仅能通过重启Pod操作恢复,那么存活性探针机制就可以发现此类问题,并依据探测结果结合重启策略触发后续的执行。

kubernetes存活性探针支持的检测方法为三种:ExecAction、TCPSocketAction和HTTPGetAction

如果一个容器没有LivenessProbe探针,那么kubelet就会认为该容器的LivenessProbe探针返回的值永远都会是Success。

2.2、ReadinessProbe探针(就绪型探测)

判断容器服务是否可用(Ready状态)能否对外提供服务,只有达到了Ready状态的Pod才能接收请求,当容器里跑的业务起来之后容器的状态才能为Ready,负责认为容器探测失败,如果探测失败,则系统会将Service后端Endpoint列表中移除其Pod IP,后续再恢复到Ready,则探测成功会将其Pod IP加回Endpoint列表。

3、探针实现方法

LivenessProbeReadinessProbe都可配置以下三种探针实现方式:

ReadinessProbe的配置和LivenessProbe类似,只需要将yaml中的livenessProbe修改为readinessProbe

3.1、Container Exec

创建一个容器,通过检查一个文件是否存在来判断容器运行是否正常,如果文件存在则会返回状态码为0,容器运行30秒后,会将文件删除,LivenessProbe检查失败则将重启容器。

apiVersion: v1
kind: Pod
metadata:
name: exec
spec:
containers:
- name: nginx
image: nginx:1.13
ports:
- containerPort: 80
args:
- /bin/sh
- -c
- touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 600
livenessProbe:
exec:
command:
- cat
- /tmp/healthy
initialDelaySeconds: 5
periodSeconds: 5

检测到目录不存在

[root@k8s-master01 health]# kubectl describe pod exec  |grep "Liveness"
Liveness: exec [cat /tmp/healthy] delay=5s timeout=1s period=5s #success=1 #failure=3
Warning Unhealthy 4s (x3 over 14s) kubelet, k8s-node01 Liveness probe failed: cat: /tmp/healthy: No such file or directory

3.2、HTTP Check

创建一个Nginx容器,通过访问/index.html来判断服务是否存活,通过手动移除该文件的方式,能导致检查失败,从而重启容器

apiVersion: v1
kind: Pod
metadata:
name: httpget
spec:
containers:
- name: nginx
image: nginx:1.13
ports:
- containerPort: 80
livenessProbe:
httpGet:
path: /index.html # 访问路径
port: 80 # 容器端口
initialDelaySeconds: 5
periodSeconds: 5

手动将nginx容器的index.html文件移除

[root@k8s-master01 health]# kubectl exec -it httpget bash
root@httpget:/# mv /usr/share/nginx/html/index.html /tmp/

当index.html访问返回状态码不为200时,就会重启容器

[root@k8s-master01 health]# kubectl describe pod httpget |grep "Liveness"
Liveness: http-get http://:80/index.html delay=5s timeout=1s period=5s #success=1 #failure=3
Warning Unhealthy 59s (x3 over 69s) kubelet, k8s-node01 Liveness probe failed: HTTP probe failed with statuscode: 404

3.3、TCP Socket Check

通过对IP地址(请求连接的目标IP地址,默认为Pod IP)和端口号进行TCP检查,如果可以建立TCP连接的话,则认为容器健康,它会比基于HTTP检测方式更加的高效(HTTP是七层,TCP是四层),更节约资源,但是精确度微低,能建立成功并不代表页面可展示。

apiVersion: v1
kind: Pod
metadata:
name: tcpSocket
spec:
containers:
- name: nginx
image: nginx:1.13
ports:
- containerPort: 80
livenessProbe:
tcpSocket:
port: 80
initialDelaySeconds: 3
periodSeconds: 3

4、探测行为参数

initiaDelaySeconds // 容器启动之后多久开始检测,默认为0秒
periodSeconds // 每隔多久检测一次,默认为10秒,最小为1秒
failureThreshold // 检测失败几次后则认为健康检测失败,默认为3次
successThreshold // 从检测错误到成功需要几次才认为健康检测成功,默认为1次
timeoutSeconds // 执行检测命令的最长时间,默认为1秒,最小为1秒 httpGet的属性
host:主机名或IP
scheme:链接类型,HTTP或HTTPS,默认为HTTP
path:请求路径
httpHeaders:自定义请求头
port:请求端口

Kubernetes中Pod健康检查的更多相关文章

  1. kubernetes之pod健康检查

    目录 kubernetes之pod健康检查 1.概述和分类 2.LivenessProbe探针(存活性探测) 3.ReadinessProbe探针(就绪型探测) 4.探针的实现方式 4.1.ExecA ...

  2. K8s中Pod健康检查源代码分析

    了解k8s中的Liveness和Readiness Liveness: 表明是否容器正在运行.如果liveness探测为fail,则kubelet会kill掉容器,并且会触发restart设置的策略. ...

  3. Kubernetes中Pod的健康检查

    本文介绍 Pod 中容器健康检查相关的内容.配置方法以及实验测试,实验环境为 Kubernetes 1.11,搭建方法参考kubeadm安装kubernetes V1.11.1 集群 0. 什么是 C ...

  4. 如何从Serilog请求日志记录中排除健康检查终结点

    这是在ASP.NET Core 3.X中使用Serilog.AspNetCore系列文章的第四篇文章:. 第1部分-使用Serilog RequestLogging减少日志详细程度 第2部分-使用Se ...

  5. 在.NET Core 中实现健康检查

    .NET Core中提供了开箱即用的运行状况检查,首先,我将在.NET Core API应用程序中执行运行状况检查,接下来,我们将使用DbContext集成SQL Server或数据库的运行状况检查, ...

  6. 如何在 ASP.Net Core 中实现 健康检查

    健康检查 常用于判断一个应用程序能否对 request 请求进行响应,ASP.Net Core 2.2 中引入了 健康检查 中间件用于报告应用程序的健康状态. ASP.Net Core 中的 健康检查 ...

  7. Kubernetes Pod 健康检查

    参考文档: https://jimmysong.io/kubernetes-handbook/guide/configure-liveness-readiness-probes.html 一.Pod的 ...

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

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

  9. Kubernetes中pod创建流程

    转自:https://blog.csdn.net/yan234280533/article/details/72567261 Pod是Kubernetes中最基本的部署调度单元,可以包含contain ...

随机推荐

  1. HTTP接口抓包工具之Fiddler

    Fiddler的基本功能介绍: Fiddler是最强大最好用的Web调试工具之一,它能记录所有客户端和服务器的http和https请求,允许你监视,设置断点,甚至修改输入输出数据,Fiddler包含了 ...

  2. 杂记:OSX 安装openssl

    因为工作中要用到openssl中提供的MD5.SHA等摘要算法,通过brew install openssl安装的openssl在C文件中找不到相应的头文件.按照网上的教程各种修改之后还是找不到相应的 ...

  3. sycPHPCMS v1.6 cookie sqlinjection

    ./user/index.php include "../include/conn.php"; include "../include/function.php" ...

  4. SAP CRM Transaction处理中的权限控制

    当试图打开一个Opportunity时, 系统会进行如下一系列的权限检查: 1. 检查Authorization object CRM_ORD_OP: 此处会检查当前user的partner func ...

  5. FCC 成都社区·前端周刊 第 7 期

    01. ES2016, 2017, 2018 中的新特性 文章介绍了 18 个 ECMAScript 2016,2017 和 2018 中新增加的特性,这些特性已被加入到 TC39 提案中.包括Arr ...

  6. 利用wps创建有目录的PDF/word

    为什么要创建: 在阅读一些行业规范或者很长的文件,像是项目管理方案时,非常麻烦,定位需要重新返回目录去.--->所以我想能不能创建一个带目录的PDF,可以点击直接跳转,那就方便多了. 如何创建: ...

  7. python打包py为exe程序:PyInstaller

    打包库:PyInstaller python程序编写过程中的脚本文件为py格式的文件,当我们想将编写好的程序移植到其他机器上给其他人使用时,如果目标机器没有安装python环境,py文件将无法运行,而 ...

  8. 盘点Linux运维常用工具(二)-web篇之nginx

    1.nginx的概述 .nginx是一个开源的.支持高性能.高并发的WWW服务和代理服务软件 .是由俄罗斯人Igor Sysoev开发的,具有高并发.占用系统资源少等特性 .官网:http://ngi ...

  9. ubuntu16.04 + caffe + SSD 硬件配置

    搞了几个月,终于把SSD试通了,不是科班出身的就是弯路多啊.几个月才跑通了caffe + ssd,痛苦至极,好在柳暗花明.好了,废话不多说,入正题. SSD作为object detection的论文, ...

  10. html5 中高级选择器 querySelector

    简介 HTML5向Web API新引入了document.querySelector以及document.querySelectorAll两个方法用来更方便地从DOM选取元素,功能类似于jQuery的 ...