这篇博文主要介绍如何给容器配置存活、就绪和启动探测器。

kubelet 使用存活探测器来知道什么时候要重启容器。 例如,存活探测器可以捕捉到死锁(应用程序在运行,但是无法继续执行后面的步骤)。 这样的情况下重启容器有助于让应用程序在有问题的情况下更可用。

kubelet 使用就绪探测器可以知道容器什么时候准备好了并可以开始接受请求流量, 当一个 Pod 内的所有容器都准备好了,才能把这个 Pod 看作就绪了。 这种信号的一个用途就是控制哪个 Pod 作为 Service 的后端。 在 Pod 还没有准备好的时候,会从 Service 的负载均衡器中被剔除的。

kubelet 使用启动探测器可以知道应用程序容器什么时候启动了。 如果配置了这类探测器,就可以控制容器在启动成功后再进行存活性和就绪检查, 确保这些存活、就绪探测器不会影响应用程序的启动。 这可以用于对慢启动容器进行存活性检测,避免它们在启动运行之前就被杀掉。

一、三种探测方式

  • LivenessProbe(存活探测):用于探测容器是否运行,如果探测失败,kubelet会根据配置的重启策略进行相应的处理,如果没有配置该探针,默认就是success!
  • ReadinessProbe(就绪探测):一般用于探测容器内的程序是否健康,它的返回值如果为success,那么就代表这个容器已经完成启动,并且程序已经是可以接受流量的状态.
  • StartupProbe(启动探测):k8s1.16版本后新加的探测方式,用于判断容器内应用程序是否已经启动,如果配置了startuprobe,就会先禁用其他的探测,直到它成功为止,成功后将不再进行探测。

二、Pod探针的监测方式

# startupProbe  启动检查
----------------------------------
startupProbe:                     #健康检查方式:[readinessProbe,livenessProbe,StartupProbe]failureThreshold: 3             #检测失败3次表示未就绪httpGet:                        #请求方式path: /ready                  #请求路径port: 8182                    #请求端口scheme: HTTP                  #请求协议periodSeconds: 10               #检测间隔successThreshold: 1             #检查成功为2次表示就绪timeoutSeconds: 1               #检测失败1次表示未就绪
----------------------------------# livenessProbe 存活检查
----------------------------------
livenessProbe:                  #健康检查方式:[readinessProbe,livenessProbe,StartupProbe]failureThreshold: 5           #检测失败5次表示未就绪httpGet:                      #请求方式path: /health               #请求路径port: 8080                  #请求端口scheme: HTTP                #请求协议initialDelaySeconds: 60       #初始化时间periodSeconds: 10             #检测间隔successThreshold: 1           #检查成功为2次表示就绪timeoutSeconds: 5             #检测失败1次表示未就绪terminationGracePeriodSeconds: 60  #宽限时间,不能用于设置就绪态探针,它将被 API 服务器拒绝。
----------------------------------# readinessProbe  就绪检查
----------------------------------
案例1[get方式]:
readinessProbe:                   #健康检查方式:[readinessProbe,livenessProbe,StartupProbe]failureThreshold: 3             #检测失败3次表示未就绪httpGet:                        #请求方式path: /ready                  #请求路径port: 8181                    #请求端口scheme: HTTP                  #请求协议periodSeconds: 10               #检测间隔successThreshold: 1             #检查成功为2次表示就绪timeoutSeconds: 1               #检测失败1次表示未就绪案例2 [检查文件内容]:
readinessProbe:                #检查方式exec:                        #使用命令检查command:                   #指令- cat                      #指令- /etc/hosts               #指令initialDelaySeconds: 5       #容器启动后要等待多少秒后存活和就绪探测器才被初始化,默认是 0 秒,最小值是 0。timeoutSeconds: 2            #检测失败1次表示未就绪successThreshold: 3          #检查成功为2次表示就绪failureThreshold: 2          #检测失败重试次数periodSeconds: 5             #检测间隔
----------------------------------
  • initialDelaySeconds:容器启动后要等待多少秒后存活和就绪探测器才被初始化,默认是 0 秒,最小值是 0。
  • periodSeconds:执行探测的时间间隔(单位是秒)。默认是 10 秒。最小值是 1。
  • timeoutSeconds:探测的超时后等待多少秒。默认值是 1 秒。最小值是 1。
  • successThreshold:探测器在失败后,被视为成功的最小连续成功数。默认值是 1 存活和启动探测的这个值必须是1 最小值是 1。
  • failureThreshold:当探测失败时,Kubernetes 的重试次数。 存活探测情况下的放弃就意味着重新启动容器。 就绪探测情况下的放弃 Pod 会被打上未就绪的标签。默认值是 3。最小值是 1。

注意:配置了 startupProbe 之后,livenessProbe和readinessProbe参数将会被暂时禁用,直到程序被检测到启动完成了livenessProbe,readinessProbe才会被启用;在程序启动较慢的时候可以配置startupProbe参数。

三、配置案例

kubernetes官方文档

apiVersion: apps/v1 # 必选,API的版本号
kind: Deployment       # 必选,类型Pod
metadata:       # 必选,元数据name: nginx   # 必选,符合RFC 1035规范的Pod名称labels:       # 可选,标签选择器,一般用于过滤和区分Podapp: nginxrole: frontend # 可以写多个annotations:  # 可选,注释列表,可以写多个app: nginx
spec:   # 必选,用于定义容器的详细信息replicas: 1   # 必选,副本数selector:     # 必选,标签选择器matchLabels:app: nginxrole: frontendtemplate:     # 必选,定义pod模板metadata:labels:       # 可选,标签选择器,一般用于过滤和区分Podapp: nginxrole: frontend # 可以写多个spec:containers:   # 必选,容器列表- name: nginx01 # 必选,符合RFC 1035规范的容器名称image: 192.168.99.1:5000/k8s/nginx:latest    # 必选,容器所用的镜像的地址imagePullPolicy: Always     # 可选,镜像拉取策略command: # 可选,容器启动执行的命令- nginx- -g- "daemon off;"workingDir: /usr/share/nginx/html       # 可选,容器的工作目录ports:  # 可选,容器需要暴露的端口号列表- name: http    # 端口名称containerPort: 80     # 端口号protocol: TCP # 端口协议,默认TCPenv:    # 可选,环境变量配置列表- name: TZ      # 变量名value: Asia/Shanghai # 变量的值- name: LANGvalue: en_US.utf8startupProbe: # 可选,检测容器内进程是否完成启动。注意三种检查方式同时只能使用一种。failureThreshold: 3             #检测失败3次表示未就绪httpGet:      # httpGet检测方式,生产环境建议使用httpGet实现接口级健康检查,健康检查由应用程序提供。path: / # 检查路径port: 80scheme: HTTPperiodSeconds: 10               #检测间隔successThreshold: 1             #检查成功为1次表示就绪timeoutSeconds: 1               #检测失败1次表示未就绪livenessProbe: # 可选,检测容器内进程是否完成启动。注意三种检查方式同时只能使用一种。failureThreshold: 3             #检测失败3次表示未就绪httpGet:      # httpGet检测方式,生产环境建议使用httpGet实现接口级健康检查,健康检查由应用程序提供。path: / # 检查路径port: 80scheme: HTTPperiodSeconds: 10               #检测间隔successThreshold: 1             #检查成功为1次表示就绪timeoutSeconds: 1               #检测失败1次表示未就绪readinessProbe: # 可选,检测容器内进程是否完成启动。注意三种检查方式同时只能使用一种。failureThreshold: 3             #检测失败3次表示未就绪httpGet:      # httpGet检测方式,生产环境建议使用httpGet实现接口级健康检查,健康检查由应用程序提供。path: / # 检查路径port: 80scheme: HTTPperiodSeconds: 10               #检测间隔successThreshold: 1             #检查成功为1次表示就绪timeoutSeconds: 1               #检测失败1次表示未就绪restartPolicy: Always   # 可选,默认为Always

四、监测时间计算

准确的时间计算:每次检查的间隔是10秒,最长超时时间是5秒,也就是单次检查应该是10 + 5 = 15秒(periodSeconds + timeoutSeconds),并不是10 5
所以最长的重启时间为(10 + 5)
5 (periodSeconds + timeoutSeconds) * failureThreshold

此时又分为了两种情况:

  1. 首次启动时:最长重启时间需要加上initialDelaySeconds,因为需要等待initialDelaySeconds秒后才会执行健康检查。最长重启时间:(periodSeconds + timeoutSeconds) * failureThreshold + initialDelaySeconds
  2. 程序启动完成后:
    此时不需要计入initialDelaySeconds,最长重启时间:(periodSeconds + timeoutSeconds) * failureThreshold

Kubernets健康检查——配置存活、就绪和启动探测器相关推荐

  1. Kubernetes 健康检查之 Readiness 就绪检查

    Kubernetes三种探针 k8s支持存活livenessProbe和就绪readinessProbe两种探针,两种探针都支持以下三种方式 一.exec 通过执行shell命令的方式,判断退出状态码 ...

  2. kubernetes健康检查配置解析

    一.健康检查种类 在kubernetes中,经常会看到健康检查相关的配置.一般有两种健康检查方式:存活性健康检查和可用性健康检查,也叫做存活探针(livenessProbe)或者就绪探针(readin ...

  3. 高速通道-冗余物理专线接入-健康检查配置

    摘要: 组建混合云,用户的IDC需要通过物理专线与阿里云VPC互通,多线冗余是基本配置需求.阿里云提供的冗余冗余切换方案是在VPC中,用户掌握切换原理,即可自主在控制台完成冗余负载配置. 一 VPC健 ...

  4. k8s pod健康检查(存活、就绪检查):livenessProbe策略配置示例

  5. Node.js + Consul 实现服务注册、健康检查、配置中心

    Node.js + Consul 实现服务注册.健康检查.配置中心 在这篇文章中: 初始化 Consul 客户端 服务注册与健康检查 配置Consul管理控制台 服务配置中心实现 在Nodejs中进行 ...

  6. k8s 重启策略、健康检查、环境变量、初始化容器

    深入理解Pod对象:基本管理 Pod基本概念 Pod存在意义 Pod资源共享实现机制 Pod管理命令 重启策略 健康检查 环境变量 init Container(初始化容器) 先简单的做出两个运行ht ...

  7. 玩转k8s(六)—— Health Check健康检查

    用户可以利用Liveness和Readiness探测机制设置更精细的健康检查,进而实现如下需求: (1)零停机部署 (2)避免部署无效的镜像 (3)更加安全的滚动升级 1. 默认的健康检查 k8s默认 ...

  8. slb健康检查方式_SLB健康检查也是“正常”-问答-阿里云开发者社区-阿里云

    负载均衡通过健康检查来判断后端服务器(ECS实例)的业务可用性.健康检查机制提高了前端业务整体可用性,避免了后端ECS异常对总体服务的影响. 开启健康检查功能后,当后端某台ECS健康检查出现异常时,负 ...

  9. 运维企业专题(8)LVS高可用与负载均衡后篇——LVS健康检查与高可用详解

    实验准备 1.下面的实验使用的是rhel6系列(rhel6.5)的虚拟机,因此你需要有对应的镜像和yum源 2.准备三台虚拟机,为了区分主机名与IP分别为 server1 172.25.6.1 ser ...

最新文章

  1. 爬虫之selenium对cookie的处理
  2. OpenCV 中的 convertTo 函数
  3. SAP Commerce Cloud Spartacus UI 修改 primary color 的方法
  4. User Profile的名称和显示名称
  5. visual studio 2010解决无法使用framework2.0、3.0、3.5方案
  6. 技术的好文章和烂文章
  7. MySQL的回表查询与索引覆盖查询
  8. 通达信接口程序怎么设计出K线图?
  9. 汽车汽油电子喷射系统
  10. 车载蓝牙通话支持电话本PBAP功能的说明
  11. [ZT]毁人不倦的应试教育(3)
  12. 新买电脑C盘太大?只有一个C盘?如何分解C盘?电脑分盘,保姆级教学
  13. Windows桌面虚拟小猫Candy - From Neko
  14. P2901 [USACO08MAR]牛慢跑Cow Jogging
  15. 手写 React 第 2 节 - 初探 React 实现机制
  16. 【面试准备】MySQL索引篇
  17. 街区尺度下的通勤出行方式挖掘及其影响因子:以北京市为例
  18. Guava (一)Guava Cache进阶之同步/异步load
  19. 深耕核心技术·赋能数字化转型 ——大快搜索黑科技亮相2019(第四届)大数据产业生态大会,斩获多项大奖...
  20. java mkdir 使用_Java File mkdir()用法及代码示例

热门文章

  1. python足球分析系统_python分析欧洲足球赛事
  2. HTML5开发手机项目-总括
  3. TCP(传输控制协议详解)详解
  4. SAP ABAP教程之 02 创建您的第一份 ABAP 报告 (教程含源码)
  5. scpi指令转换c语言,SCPI 标准命令
  6. bootstrap 空行不显示横杠_Microsoft Access报告最后显示空行(Microsoft Access report shows empty row at the end)...
  7. ios7.1发布企业证书测试包的问题
  8. 分布式事务解决方案Seata——AT模式详解
  9. 计算机黑屏如何重启,电脑黑屏,小编教你电脑黑屏重启还是黑屏怎么办
  10. 一文搞懂 JavaScript 新数据类型 BigInt