一、pod存活性探测

pod spec为容器列表中的相应容器定义其专用的探针即可启用存活性探测,目前,k8s的容器支持存活性探测的方法包含:ExecAction、TCPSocketActon和HTTPGetAction。

1、设置exec探针

exec类型的探针通过在目标容器中执行由用户自定义的命令来判定容器的健康状态,若命令状态返回值为0则表示成功通过探测。spec.containers.livenessProbe.exec字段用于定义此类检测,它只有一个属性“command”,用于定义要执行的命令。

exec指定的命令运行于容器中,会消耗容器的可用资源配额,另外,考虑到探测操作的效率本身等因素,探测操作的命令应该尽可能简单和轻量。

2、设置HTTP探针

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

host:请求的主机地址,默认为podIP;也可以在httpHeaders中使用host来定义

httpHeaders:定义的请求报文首部

path:请求的HTTP资源路径,即URL path

scheme:建立连接使用的协议,仅可为HTTP或HTTPS,默认为HTTP

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

3、设置TCP探针

基于TCP的存活性探测用于向容器的特定端口发起TCP请求并尝试建立连接进行结果判定,连接建立成功即为通过检测。它比基于HTTP的探测要更高效更节省资源,但精确度略低,毕竟建立连接成功未必意味着页面资源可用。spec.containers.livenessProbe.Socket字段用于定义此类检测,主要包含以下两个可用的属性:

host:请求连接的目标IP地址,默认为podIP

port:请求连接的目标端口,必选字段。

4、存活性探测行为属性

使用kubectl describe命令可查看配置了存活性探测的pod对象的相关信息,它给出了探测方式及额外的配置属性delay、timeout、period、success和failure及其各自的相关属性值。用户没有明确定义这些属性字段时,它们会使用各自的默认值。这些属性信息可通过spec.containers.livenessProbe的如下属性字段来给出:

initialDelaySeconds:存活性探测延迟时长,即容器启动多久之后再开始第一次探测操作,显示为delay属性;默认为0s,即容器启动后立刻便开始进行探测。

timeoutSeconds:存活性探测的超时时长,显示为timeout属性,默认为1s,最小值也是1s。

periodSeconds:存活性探测的频度,显示为period属性,默认为10s,最小值为1s;过高的频率会对pod对象带来较大的额外开销,而过低的频率又会使得对错误的反应不及时。

successThreshold:处于失败状态时,探测操作至少连续多少次的成功才被认为是通过检测,显示为success属性,默认值为1,最小值也为1。

failureThreshold:处于成功状态时,探测操作至少连续多少次的失败才被视为检测不通过,显示为failure属性,默认值为3,最小值为1。

二、pod就绪行探测

pod对象启动后,容器应用通常需要一段时间才能完成其初始化过程,避免pod对象启动后立即让其处理客户端请求,而等待容器初始化工作执行完成并转为就绪状态,尤其是存在其他提供相同服务的pod对象的场景更是如此。

与存活性探测机制相同,就绪性探测也支持Exec、HTTP GET和TCPSocket三种探测方式,且各自的定义机制也都相同。但与存活性探测触发的操作不同的是,探测失败时,就绪性探测不会杀死或重启容器以保证其健康性,而是通知其尚未就绪,并触发依赖于其就绪状态的操作(例如,从service对象中移除此pod对象)以确保不会有客户端请求接入此pod对象。未定义就绪性探测的pod对象在pod进入running状态后将立即就绪,在容器需要时间进行初始化的场景中,在应用真正就绪之前必然无法正常相应客户端请求,因此,生成时间中,必须为关键性pod资源中的容器定义就绪性探测机制。

将容器定义中的livenessProbe字段替换为readinessProbe即可定义就绪性探测的配置。

k8spod探测的更多相关文章

  1. 参数探测(Parameter Sniffing)影响存储过程执行效率解决方案

    如果SQL query中有参数,SQL Server 会创建一个参数嗅探进程以提高执行性能.该计划通常是最好的并被保存以重复利用.只是偶尔,不会选择最优的执行计划而影响执行效率. SQL Server ...

  2. sql手工注入时的探测技巧汇总

    工具的灵活性肯定比不上人,在手工探测的基础上再去自定义工具,才是正道. sql注入时手工探测技巧 =================================================== ...

  3. 内核探测工具systemtap简介

    systemtap是内核开发者必须要掌握的一个工具,本文我将简单介绍一下此工具,后续将会有系列文章介绍systemtap的用法. 什么是systemtap 假如现在有这么一个需求:需要获取正在运行的 ...

  4. 探测FTP状态,socket方式

    1.FTP返回码列表(哪里都能找到的): 120 Service ready in NNN minutes. 服务在NNN时间内可用 --------------------------------- ...

  5. Atitit 破解qq空间(2)-------探测权限

    Atitit 破解qq空间(2)-------探测权限 /AtiPlatf_cms/src/com/attilax/net/httpTest.java  package com.attilax.net ...

  6. 微软BI 之SSIS 系列 - 使用 SQL Profilling Task (数据探测) 检测数据源数据

    开篇介绍 SQL Profilling Task 可能我们很多人都没有在 SSIS 中真正使用过,所以对于这个控件的用法可能也不太了解.那我们换一个讲法,假设我们有这样的一个需求 - 需要对数据库表中 ...

  7. 使用Modernizr探测HTML5/CSS3新特性(转载)

    转载地址:http://www.cnblogs.com/TomXu/archive/2011/11/18/detecting-html5-css3-features-using-modernizr.h ...

  8. TCP连接探测中的Keepalive和心跳包

    TCP连接探测中的Keepalive和心跳包 tcp keepalive 心跳 保活 Linuxtcp心跳keepalive保活1. TCP保活的必要性 1) 很多防火墙等对于空闲socket自动关闭 ...

  9. 线性探测再散列 建立HASH表

    根据数据元素的关键字和哈希函数建立哈希表并初始化哈希表,用开放定址法处理冲突,按屏幕输出的功能表选择所需的功能实现用哈希表对数据元素的插入,显示,查找,删除. 初始化哈希表时把elem[MAXSIZE ...

随机推荐

  1. Docker-Compose运行Nginx+Redis+NetCoreAPI

    Docker-Compose运行Nginx+Redis+NetCoreAPI 一.准备Docker-Compose Docker 开始安装Docker-compose之前你需要先确认已经安装了Dock ...

  2. redis安装及遇到的坑-linux

    获取Redis安装包“redis-4.0.8.tar.gz”,上传Linux服务器; 使用root用户解压: tar zxvf redis-4.0.8.tar.gz -C /usr/local/; 进 ...

  3. Python3 Selenium自动化web测试 ==> 第二节 页面元素的定位方法 <上>

    前置步骤: 上一篇的Python单元测试框架unittest,我认为相当于功能测试测试用例设计中的用例模板,在自动化用例的设计过程中,可以封装一个模板,在新建用例的时候,把需要测试的步骤添加上去即可: ...

  4. 网站性能优化(website performance optimization)2

    我们先研究下构建渲染树前的几个步骤:也就是DOM和CSSOM,通常这些步骤的效果最差使你的网页呈现速度非常慢,我们是讨论尽可能快的将HTML流式传输给客户端,使浏览器能够开始构建DOM,还有其他注意事 ...

  5. __VA_ARGS__用法

    转载 自定义调试信息的输出 调试信息的输出方法有很多种,  例如直接用printf,  或者出错时使用perror, fprintf等将信息直接打印到终端上, 在Qt上面一般使用qDebug,而守护进 ...

  6. TCP/IP 物理层卷四 -- 数据报与虚电路

    一.数据报(Datagram) 1.1 概念 数据报是分组交换的一种,主要向通信子网中的端系统提供无连接的分组交换服务.通信子网的某主机发送一个报文时,无需建立连接,只需在实现高层协议的前提下对数据拆 ...

  7. typescript中新增的基本数据类型

    javascript中有7种数据类型,分别是:boolean,number,string,null,undefined和object,以及在es6中新增的一种类型 symbol.而typescript ...

  8. CF 1133C Balanced Team

    题目链接:http://codeforces.com/problemset/problem/1133/C 题目分析 (个人感受:我看错了题目,硬是写了近一个小时!) 这个题目要求一个最长的序列,使得这 ...

  9. 2019牛客暑期多校训练营(第五场)G - subsequeue 1 (一题我真的不会的题)

    layout: post title: 2019牛客暑期多校训练营(第五场)G - subsequeue 1 (一题我真的不会的题) author: "luowentaoaa" c ...

  10. 自定义ResultMap查询,这里的关联写法只能用于不分页

    <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "- ...