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. grep显示前后几行信息

    显示foo及前5行 1 grep -B 5 foo file 显示foo及后5行 1 大专栏  grep显示前后几行信息ode"> grep -A 5 foo file 显示 file ...

  2. 在python中使用json

    在服务器和客户端的数据交互的时候,要找到一种数据格式,服务端好处理,客户端也好处理,这种数据格式应该是一种统一的标准,不管在哪里端处理起来都是统一的,现在这种数据格式非常的多,比如最早的xml,再后来 ...

  3. 添砖加瓦:MySQL分布式部署

    1.集群环境  管理节点(MGM):这类节点的作用是管理MySQLCluster内的其他节点,如提供配置数据,并停止节点,运行备份等.由于这类节点负责管理其他节点的配置,应该在启动其他节点之前启动这类 ...

  4. Python-rediscluster客户端

    # -*- coding: UTF-8 -*- import redis import sys from rediscluster import StrictRedisCluster #host = ...

  5. 软件测试价值观-SMBT新理念

    软件测试价值观-SMBT新理念 作者:张元礼 http://blog.csdn.net/vincetest 近年来有不少软件测试同行不少有些困惑-软件测试人员的价值在哪里?我们怎么才能做好软件测试?怎 ...

  6. 基于FPGA的RGB图像转灰度图像算法实现

    一.前言 最近学习牟新刚编著<基于FPGA的数字图像处理原理及应用>的第六章直方图操作,由于需要将捕获的图像转换为灰度图像,因此在之前代码的基础上加入了RGB图像转灰度图像的算法实现. 2 ...

  7. C++扬帆远航——2

    /* * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:test.cpp * 作者:常轩 * 完成日期:2016年3月6 ...

  8. 原生php导出csv文件

    require('./db/dbManager.php'); require('./session.php'); require('./department_utils.php'); class Ex ...

  9. js的立即执行函数

    立即执行函数:常用于第三方库,好处在于隔离作用域,任何一个第三方库都会存在大量的变量和函数,为了避免变量污染(命名冲突),一般想到的方法就是使用立即执行函数.jQuery就是使用的立即执行函数. 函数 ...

  10. 结题报告--P5551洛谷--Chino的树学

    题目:点此 题目描述 Chino树是一棵具有某种性质的满二叉树,具体来说,对于这棵树的每一个非叶子节点,它的左子节点(A)(A)(A)的右子节点(C)(C)(C)与它的右子节点(B)(B)(B)的左子 ...