k8s-故障转移 livenessProbe readinessProbe 学习总结

news2024/11/26 18:31:39

k8s-故障转移学习总结

大纲

  • 概念
  • K8S中Pod健康检查
  • livenessProbe & readinessProbe
  • livenessProbe 存活探测实例
  • readinessProbe 就绪探测实例

概念

故障转移有哪些情况

  • 物理机故障
  • 程序故障

在计算机术语中,故障转移(英语:failover),即当活动的服务或应用意外终止时,快速启用冗余或备用的服务器、系统、硬件或者网络接替它们工作。

K8S中Pod健康检查

默认情况下,kubelet根据容器运行状态作为健康依据,不能监控容器中应用程序状态!

例如程序假死。这就会导致无法提供服务,丢失流量。因此引入健康检查机制确保容器健康存活。

Pod通过两类探针来检查容器的健康状态

  • LivenessProbe(存活探测)
  • ReadinessProbe(就绪探测)

启动(Startup)探针是另外的一个探测

官方资料: https://kubernetes.io/zh-cn/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/

livenessProbe(存活探测)

kubelet 使用livenessProbe(存活探测)来确定什么时候要重启容器。 例如,存活探针可以探测到应用死锁(应用程序在运行,但是无法继续执行后面的步骤)情况。 重启这种状态下的容器有助于提高应用的可用性,即使其中存在缺陷。

存活探测将通过http、shell命令或者tcp等方式去检测容器中的应用是否健康,然后将检查结果返回给kubelet,
如果检查容器中应用为不健康状态提交给kubelet后,kubelet将根据Pod配置清单中定义的重启策略restartPolicy来对Pod进行重启。

readinessProbe(就绪探测)

kubelet 使用就绪探针可以知道容器何时准备好接受请求流量,当一个 Pod 内的所有容器都就绪时,才能认为该 Pod 就绪。 这种信号的一个用途就是控制哪个 Pod 作为 Service 的后端。 若 Pod 尚未就绪,会被从 Service 的负载均衡器中剔除。

如果容器或则Pod状态为(NoReady)状态,Kubernetes则会把该Pod从Service的后端endpoints Pod中去剔除。

livenessProbe(存活探测),readinessProbe(就绪探测),这两种探测都支持以下方式对容器进行健康检查

  • Exec(执行脚本):在容器中执行命令,命令执行后返回的状态为0则成功,表示我们探测结果正常
  • HTTP:根据容器IP、端口以及路径发送HTTP请求,返回码如果是200-400之间表示成功
  • TCPSocketAction:根据容器IP地址及特定的端口进行TCP检查,端口开放表示成功

以上每种检查动作都可能有以下三种返回状态

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

livenessProbe(存活探测)

livenessProbe(存活探测) 控制Pod的重启

livenessProbe: 
  # 会访问localhost:5555/health 这个http请求
  httpGet: 
     path: /health
     port: 5555
  initialDelaySeconds: 10 #延迟探测时间
  timeoutSeconds: 1
  periodSeconds: 10 #访问频率单位秒
  failureThreshold: 3 

配置说明

  • periodSeconds 字段指定了 kubelet 应该每几秒执行一次存活探测

  • initialDelaySeconds 字段告诉 kubelet 在执行第一次探测前应该等待 5 秒

  • failureThreshold 针对 HTTP 或 TCP 检测,可以通过将 failureThreshold * periodSeconds 参数设置为足够长的时间来应对启动时间过慢的情况

    例如
    failureThreshold: 3
    periodSeconds:10
    应用程序将会有最多 半分钟(3 * 10 = 30s)的时间来完成其启动过程

注意:使用livenessProbe(存活探测)时要注意程序的启动时间如果启动时间过长会导致健康检查失败 一直重启

可以使用startupProbe(启动探针)保护慢启动容器
startupProbe:
  httpGet:
    path: /health
    port: 5555
  failureThreshold: 30
  periodSeconds: 10

readinessProbe(就绪探测)

readinessProbe(就绪探测) 控制Service是否可以使用Pod

readinessProbe:
  # 会访问localhost:5555/health 这个http请求
  httpGet: 
     path: /startok
     port: 5555
     # 可以自定义请求头
     httpHeaders:
       - name: Custom-Header
         value: Awesome
  initialDelaySeconds: 5 #延迟探测时间
  timeoutSeconds: 1
  periodSeconds: 5 #访问频率
  failureThreshold: 3

livenessProbe 存活探测实例

step1 镜像与配合的代码

调整docker容器JVM堆内存大小,让java.lang.OutOfMemoryError来得快点

在这里插入图片描述

对应的controller代码

//定义一个列表保存数据    
private List<Object> list = new ArrayList<>();

@RequestMapping("/oop")
public boolean oop(){
	System.out.println(list.size());
    new Thread(()->{
    	while(true){
    	   //循环创建一个1M的数组 没有释放 让其触发OutOfMemoryError
    		list.add(new String[1024][1024]);
    		list.add(new String[1024][1024]);
    		list.add(new String[1024][1024]);
    		list.add(new String[1024][1024]);
	    	System.out.println("加数据");
    	}
    }).start();
	return true;
}

//健康检查接口 无法继续创建对象
@RequestMapping("/health")
public String health() {
	Health h = createHealth();
	return h.getStatus();
}

private Health createHealth(){
	Health h = new Health();
	h.setArry(new String[1024][1024]);
	h.setStatus("ok");
	return h;
}

step2 启动pod

http-health-check.yaml 关键配置如下:

 livenessProbe: 
	  # 会访问localhost:5555/health 这个http请求
	  httpGet: 
	     path: /health
	     port: 5555
	  initialDelaySeconds: 10 #延迟探测时间
	  timeoutSeconds: 1
	  periodSeconds: 10 #访问频率
	  failureThreshold: 3      

详情见《/yaml/http-health-check.yaml》

kubectl apply -f http-health-check.yaml 创建Pod

在这里插入图片描述

可以看到 RESTARTS是0 表示还没重启过

在这里插入图片描述

step3 测试故障转移

触发OOM异常

在这里插入图片描述
在这里插入图片描述

此时 springboot已经无法正常使用了

step4 k8s故障转移

k8s会自动的重启 Pod 让服务重新可用

在这里插入图片描述

可以看到Pod RESTARTS是1 表示已经重启过一次

注意: livenessProbe 存活探测只无法处理节点宕机的情况
在这里插入图片描述

readinessProbe就绪探测实例

就绪探测可以测试pod是否可以开始对外提供服务了,Service可以开始使用pod了

step1 代码改造

在这里插入图片描述

step2 启动pod

http-health-check.yaml 关键配置如下:

readinessProbe:
  # 会访问localhost:5555/health 这个http请求
  httpGet: 
     path: /startok
     port: 5555
     # 可以自定义请求头
     httpHeaders:
       - name: Custom-Header
         value: Awesome
  initialDelaySeconds: 5 #延迟探测时间
  timeoutSeconds: 1
  periodSeconds: 5 #访问频率
  failureThreshold: 3   

详情见《/yaml/http-health-check.yaml》

kubectl apply -f http-health-check.yaml 创建Pod

step3 测试就绪探测

Pod成功创建 ,使用Pod ip可以访问程序,但使用service ip 则无法访问

在这里插入图片描述

等待90s后

在这里插入图片描述
成功访问

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/384805.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深入底层源码的Listener内存马(内存马系列篇三)

写在前面 继前面的FilterServlet内存马技术&#xff0c;这是系列文章的第三篇了&#xff0c;这篇将给大家带来的是Listener内存马技术。 前置 什么是Listener&#xff1f; 监听器 Listener 是一个实现特定接口的 Java 程序&#xff0c;这个程序专门用于监听另一个 Java 对象…

Pag的2D渲染执行流程

Pag的渲染 背景 根据Pag文章里面说的&#xff0c;Pag之前长时间使用的Skia库作为底层渲染引擎。但由于Skia库体积过大&#xff0c;为了保证通用型&#xff08;比如兼容CPU渲染&#xff09;做了很多额外的事情。所以Pag的工程师们自己实现了一套2D图形框架替换掉Skia&#xff…

GC Garbage Collectors

本质一、算法1、哪些是垃圾&#xff1f;引用计数法&#xff1a;reference countPython中使用了。个对象如果没有任何与之关联的引用&#xff0c;即他们的引用计数都不为 0&#xff0c;则说明对象不太可能再被用到&#xff0c;那么这个对象就是可回收对象。漏洞&#xff1a;循环…

C/C++每日一练(20230303)

目录 1. 字符串相乘 2. 单词拆分 II 3. 串联所有单词的子串 1. 字符串相乘 给定两个以字符串形式表示的非负整数 num1 和 num2&#xff0c;返回 num1 和 num2 的乘积&#xff0c;它们的乘积也表示为字符串形式。 示例 1: 输入: num1 "2", num2 "3"…

【Linux】PXE+Kickstart无人值守安装系统

文章目录前言一、简介二、配置DHCP三、TFTP四、SYSLinux服务程序五、vsftpd服务六、Kickstart应答文件七、自动安装系统八、总结前言 本文来记录下PXEKickstart无人值守安装系统。 当需要安装OS的主机数量较多时&#xff0c;我们不可能通过U盘或光盘给这一台台主机去安装操作系…

SpringCloud项目报错和解决方法记录

1、项目在IDEA中正常启动&#xff0c;打包后报错 背景 项目本地是没有 application.yml 配置文件的&#xff0c;而是把配置文件放在nacos上&#xff0c;本地只有一个 bootstrap.yml 来绑定nacos上的配置文件。 项目在IDEA上是可以正常启动运行的&#xff0c;然后我就准备打包…

Hadoop之hdfs查看fsimage和edits

/opt/module/hadoop-3.1.3/data/dfs/name/current (1) Fsimage文件: HDFS文件系统元数据的一个永久性的检查点&#xff0c;其中包含HDFS文件系统的所有目录和文件inode的序列化信息。 (2) Edits文件:存放HDFS文件系统的所有更新操作的路径&#xff0c;文件系统客户端执行的所有…

10个优质的基于Node.js的CMS 内容管理平台

冬尽今宵长❝hi, 大家好, 我是徐小夕,之前和大家分享了很多「低代码可视化」和「前端工程化」相关的话题, 今天继续和大家聊聊「CMS」系统.❞内容管理系统 (「CMS」) 使没有强大技术背景的人也能够轻松发布内容。我们可以使用 「CMS」 来管理我们的内容和交付。市面上有不同类型…

触摸屏如何远距离无线采集各从站的模拟量信号?

本方案是昆仑通态触摸屏与4台DTD433FC无线模拟量信号测试终端进行无线 MODBUS 通信的实现方法。本方案中昆仑通态触摸屏作为主站显示各从站的模拟量信号&#xff0c;传感器、DCS、PLC、智能仪表等4个设备作为Modbus从站输出模拟量信号。方案中采用无线模拟量信号测控终端DTD433…

厚积薄发百变求新 | 科士达100kW/125kW 超大功率模块UPS重磅发布

3月2日下午&#xff0c;“厚积薄发百变求新” 科士达100kW/125kW超大功率模块UPS新品发布会在云上顺利举办。会上&#xff0c;科士达正式推出100kW/125kW超大功率模块UPS&#xff0c;该产品功率密度较主流的50kW功率模块UPS提升了一倍&#xff0c;跨越了高密新高度。 本次发布会…

Python每日一练(20230303)

1. 两数之和 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一个元素在答案里不能重复出现。 你可以按任意顺…

详解单链表(内有精美图示哦)

全文目录引言链表链表的定义与结构链表的分类单链表的实现及对数据的操作单链表的创建与销毁创建销毁单链表的打印单链表的头插与头删头插头删单链表的尾插与尾删尾插尾删单链表的查找单链表在pos位置后插入/删除插入删除单链表在pos位置插入/删除插入删除总结引言 在上一篇文…

K8s:渐进式入门服务网格 Istio (一)

写在前面 分享一些 Istio 的学习笔记博文内容涉及&#xff1a; istio 下载安装一个 Demo 运行什么是 istio&#xff0c;服务网格等概念介绍istio 架构组成&#xff0c;应用场景等 理解不足小伙伴帮忙指正 对每个人而言&#xff0c;真正的职责只有一个&#xff1a;找到自我。然后…

一文吃透 Go 内置 RPC 原理

hello 大家好呀&#xff0c;我是小楼&#xff0c;这是系列文《Go底层原理剖析》的第三篇&#xff0c;依旧分析 Http 模块。我们今天来看 Go内置的 RPC。说起 RPC 大家想到的一般是框架&#xff0c;Go 作为编程语言竟然还内置了 RPC&#xff0c;着实让我有些吃鲸。 从一个 Demo …

原型模式学习

本文讲解一下原型模式的概念并通过一个案例来进行实现。 4、原型模式 通过new产生一个对象需要非常繁琐的数据准备或访问权限&#xff0c;则可以使用原型模式原型模式就是Java中的克隆技术&#xff0c;以某个对象为原型&#xff0c;复制出新的对象&#xff0c;新的对象具有原…

VS2019加载解决方案时不能自动打开之前的文档(回忆消失)

✏️作者&#xff1a;枫霜剑客 &#x1f4cb;系列专栏&#xff1a;C实战宝典 &#x1f332;上一篇: 错误error c3861 :“_T“:找不到标识符 逐梦编程&#xff0c;让中华屹立世界之巅。 简单的事情重复做,重复的事情用心做,用心的事情坚持做&#xff1b; 文章目录前言一、问题描…

借助ChatGPT爆火,股价暴涨又暴跌后,C3.ai仍面临巨大风险

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 C3.ai的股价 作为一家人工智能技术提供商&#xff0c;C3.ai&#xff08;AI&#xff09;的股价曾在2021年初随着炒作情绪的增加&#xff0c;达到了历史最高点&#xff0c;但自那以后其股价就下跌了90%&#xff0c;而且炒作情…

数据正确性验证(造数据篇)

变更记录 记录每次修订的内容&#xff0c;方便追溯。 多行文本单选作者日期完成文档V1.02023-02-27V1.1V1.2 1. 数据质量检测标准 1.1 背景&#xff1a;整理数据质量测试的维度 摘取自国标文档 以上是除了常规的软件质量模型外&#xff08;软件测试质量六大特性&#xff0c…

Mysql Nested-Loop Join算法和MRR

MySQL8之前仅支持一种join 算法—— nested loop&#xff0c;在 MySQL8 中推出了一种新的算法 hash join&#xff0c;比 nested loop 更加高效。&#xff08;后面有时间介绍这种join算法&#xff09; 1、mysql驱动表与被驱动表及join优化 先了解在join连接时哪个表是驱动表&a…

ChatGPT今日正式开放API服务中小企业

开放隐私计算 开放隐私计算开放隐私计算OpenMPC是国内第一个且影响力最大的隐私计算开放社区。社区秉承开放共享的精神&#xff0c;专注于隐私计算行业的研究与布道。社区致力于隐私计算技术的传播&#xff0c;愿成为中国 “隐私计算最后一公里的服务区”。183篇原创内容公众号…