K8s之零故障升级Pod健康探测详解

news2024/11/28 12:48:45

文章目录

    • 一、Pod健康探测介绍
      • 1、三种容器探测方法
      • 2、常用三种探测探针
      • 3、探针相关属性说明
    • 二、探测案例
      • 1、Pod启动探测案例-startupProbe
      • 2、Pod存活探测案例-livenessProbe
      • 3、Pod就绪探测案例-readinessProbe
      • 4、启动、存活、就绪探测混合使用案例
    • 三、总结

一、Pod健康探测介绍

中文官方参考文档:

Pod探测是Kubernetes中的一种机制,用于检测Pod的状态和健康状况。当探测到Pod状态不正常时,根据重启策略进行相应的Pod操作,探测可以帮助Kubernetes集群自动化地管理容器的健康状态,提高应用程序的可靠性和可用性。

探测针对Pod中容器进行操作,所以探测定义在kubectl explain pod.spec.containers 字段下面

1、三种容器探测方法

  • 启动探测(StartupProbe):探测Pod中容器中的应用 是否已经启动,如果启动探测失败,kubelet 将杀死容器,容器服从其重启策略进行重启。如果容器没有提供启动探测,则默认状态为成功Success。

  • 存活探测(Liveness Probe):探测Pod中容器是否正常运行,如果探测失败,kubelet根据重启策略判断是否重启该容器。

  • 就绪探测(Readiness Probe):检测容器中的应用是否可以接受请求,当探测成功后才使Pod对外提供网络访问,将容器标记为就绪状态,可以加到pod前端负载,如果探测失败,则将容器标记为未就绪状态,会把pod从前端负载移除。

三种探测的优先级是 启动探测最高,存活探测、就绪探测并行,启动探测成功后才会进行下面的探测。

2、常用三种探测探针

启动探测、存活探测、就绪探测都支持下面三种探针:

  • exec:在容器执行命令,通过返回码判断是否执行成功,非零表示失败。
  • tcpSocket:通过容器的IP地址和端口执行TCP检查,如果可以建立TCP连接,则表示探测成功。
  • httpGet:通过容器的IP地址、端口号及路径调用 HTTP Get方法,如果响应的状态码大于等于200且小于400,则认为容器健康。

探针探测结果有以下值:

  • Success:表示通过检测。

  • Failure:表示未通过检测。

  • Unknown:表示检测没有正常进行

3、探针相关属性说明

使用帮助命令查看相关属性:

kubectl explain pod.spec.containers.startupProbe
  • periodSeconds:执行探测的间隔时间,单位秒,默认10秒
  • timeoutSeconds:执行探测后,超时时间,单位秒,默认1秒
  • successThreshold:连续探测几次成功,才算成功,默认1秒
  • failureThreshold:探测失败重试次数,默认3次,最小1次

二、探测案例

1、Pod启动探测案例-startupProbe

案例一:使用 exec 探测容器内是否可以查看到tomcat进程,如果没有表示探测失败,根据重启策略做出对应的操作。

cat startupProbe-exec.yaml 
---
apiVersion: v1
kind: Pod
metadata:
  name: pod-startupprobe
  namespace: default
  labels:
    app: tomcat
    env: uat
spec:
  containers:
  - name: container-startupprobe
    image: tomcat
    startupProbe:
      exec:      # 探测命令,返回非零表示失败
        command: ["/bin/bash", "-c", "ps -ef |grep  tomcat|grep -v grep|awk '{print $2}'"]

      initialDelaySeconds: 20  # 容器启动后多久开始探测
      periodSeconds: 20        # 执行探测间隔时间
      successThreshold: 1      # 成功多少次才算成功
      timeoutSeconds: 30       # 执行探针后,等待多少s,才算超时
      failureThreshold: 2      # 失败多少次才算失败

执行YAML文件:

kubectl apply -f startupProbe-exec.yaml

动态查看Pod状态:

get pods pod-startupprobe  -w

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IWivIjV7-1685189668254)(D:\MD归档文档\IMG\image-20230527131605293.png)]

案例二:使用 tcpSocket 探测容器内是否可以查看到 8080端口,如果探测失败,根据重启策略做出对应的操作。

cat startupProbe-tcpsocket.yaml 

---
apiVersion: v1
kind: Pod
metadata:
  name: pod-startupprobe
  namespace: default
  labels:
    app: tomcat
    env: uat
spec:
  containers:
  - name: container-startupprobe
    image: tomcat
    ports:
    - containerPort: 8080
    startupProbe:
      tcpSocket:
        port: 8080
      initialDelaySeconds: 20  # 容器启动后多久开始探测
      periodSeconds: 20        # 执行探测间隔时间
      successThreshold: 1      # 成功多少次才算成功
      timeoutSeconds: 30       # 执行探针后,等待多少s,才算超时
      failureThreshold: 2      # 失败多少次才算失败

执行YAML文件:

kubectl apply -f startupProbe-tcpsocket.yaml 

案例三:使用 httpGet 探测容器内网络是否可以正常访问,如果探测失败,根据重启策略做出对应的操作。

cat startupProbe-httpget.yaml 

---
apiVersion: v1
kind: Pod
metadata:
  name: pod-startupprobe
  namespace: default
  labels:
    app: nginx
    env: uat
spec:
  containers:
  - name: container-1
    image: nginx
    ports:
    - containerPort: 80
    startupProbe:
      httpGet:
        path: /
        port: 80
      initialDelaySeconds: 20
      periodSeconds: 20
      successThreshold: 1
      failureThreshold: 2
      timeoutSeconds: 20

执行YAML文件:

kubectl apply -f startupProbe-httpget.yaml 

2、Pod存活探测案例-livenessProbe

案例一:使用 tcpSocket80端口 进行存活检测,如果探测失败,根据重启测试做出相应操作。

cat livenessProbe-tcp.yaml 

---
apiVersion: v1
kind: Pod
metadata:
  name: pod-liveness
  namespace: default
  labels:
    app: nginx
    env: uat

spec:
  containers:
  - name: container-1
    image: nginx
    imagePullPolicy: IfNotPresent
    livenessProbe: 
      tcpSocket:
        port: 80
      timeoutSeconds: 15
      failureThreshold: 3
      initialDelaySeconds: 10
      periodSeconds: 10
      successThreshold: 1

执行YAML文件:

kubectl apply -f livenessProbe-tcp.yaml 

案例二:使用 httpGet/index.html 进行 存活检测,如果探测失败,根据重启测试做出相应操作。

cat livenessProbe-http.yaml

---
apiVersion: v1
kind: Pod
metadata:
  name: pod-liveness
  namespace: default
  labels:
    app: nginx
    env: uat

spec:
  containers:
  - name: container-1
    image: nginx
    imagePullPolicy: IfNotPresent
    ports:
    - containerPort: 80
    livenessProbe: 
      httpGet:
        path: /index.html
        port: 80
      timeoutSeconds: 15
      failureThreshold: 3
      initialDelaySeconds: 10
      periodSeconds: 10
      successThreshold: 1

执行YAML文件:

kubectl apply -f livenessProbe-tcp.yaml 

3、Pod就绪探测案例-readinessProbe

就绪探测,如果探测失败会从Pod前端负载移除,所以我们要借助Service 资源才能看到效果,如下案例检测 80端口是否启动,如果没有检查到,则从 Service 中移除:

cat readinessProbe-http.yaml 
---
apiVersion: v1
kind: Service
metadata:
  name: svc-readiness
  labels:
    app: nginx
spec:
  type: NodePort
  ports:
  - name: server
    port: 80
    targetPort: 80
    nodePort: 30080
  selector:
    app: nginx
---
apiVersion: v1
kind: Pod
metadata:
  name: pod-readiness
  namespace: default
  labels:
    app: nginx
spec:
  containers:
  - name: container-1
    image: nginx
    imagePullPolicy: IfNotPresent
    ports:
    - containerPort: 80
    readinessProbe: 
      httpGet:
        path: /index.html
        port: 80
      timeoutSeconds: 15
      failureThreshold: 3
      initialDelaySeconds: 10
      periodSeconds: 10
      successThreshold: 1

查看service、pod资源信息:

kubectl get pod,svc -l app=nginx

查看service 中关联的Pod:

kubectl describe svc|grep Endpoints

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-K3Ri7rQR-1685189668255)(D:\MD归档文档\IMG\image-20230527195046169.png)]

4、启动、存活、就绪探测混合使用案例

案例:

cat probe.yaml 
---
apiVersion: v1
kind: Service
metadata:
  name: svc-probe
  labels:
    app: nginx
spec:
  type: NodePort
  ports:
  - name: server
    port: 80
    targetPort: 80
    nodePort: 30080
  selector:
    app: nginx
---
apiVersion: v1
kind: Pod
metadata:
  name: pod-probe
  namespace: default
  labels:
    app: nginx
spec:
  containers:
  - name: container-1
    image: nginx
    imagePullPolicy: IfNotPresent
    ports:
    - containerPort: 80

    livenessProbe: # 存活探测,探测服务是否正常
      httpGet:
        path: /index.html
        port: 80
      timeoutSeconds: 15
      failureThreshold: 3
      initialDelaySeconds: 10
      periodSeconds: 10
      successThreshold: 1

    readinessProbe: # 就绪探测,探测服务是否可以接受请求
      httpGet:
        path: /index.html
        port: 80
      timeoutSeconds: 15
      failureThreshold: 3
      initialDelaySeconds: 10
      periodSeconds: 10
      successThreshold: 1

    startupProbe:  # 启动探测,探测容器内程序是否启动
      httpGet:
        path: /index.html
        port: 80
      timeoutSeconds: 15
      failureThreshold: 3
      initialDelaySeconds: 10
      periodSeconds: 10
      successThreshold: 1

执行YAML文件:

kubectl apply -f probe.yaml 

三、总结

1、探测总结:

一共演示了三种探测,分别是启动探测,存活探测、就绪探测,启动顺序是启动探测最先执行,当启动探测成功后,存活探测和就绪探测并行,三种探测场景如下:

  • 启动探测(startupProbe):探测容器中程序是否启动,如果失败,根据重启策略进行对应操作。
  • 存活探测(livenessProbe):探测容器中程序是否正常运行,如果失败,根据重启策略进行对应操作。
  • 就绪探测(readinessProbe):探测容器中程序是否可以接受请求,如果失败,将从前端代理移除。

2、存活探测和就绪探测区别:

存活探测,探测失败是根据重启策略做对应操作,而就绪探测,探测失败,是将从前端代理移除,如service中移除,移除后就无法正常对外访问了。

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

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

相关文章

【MySQL新手到通关】第五章 多表查询

文章目录 1. 笛卡尔积1.1 避免笛卡尔积1.2 笛卡尔积(或交叉连接)的理解1.3 案例分析与问题解决笛卡尔积的错误会在下面条件下产生: 2. 多表查询分类讲解2.1 多表联查分类方式1:2.2 多表联查分类方式2:2.3 多表联查分类…

Eclipse教程 Ⅴ

Eclipse 创建 Java 类 打开新建 Java 类向导 你可以使用新建 Java 类向导来创建 Java 类,可以通过以下途径打开 Java 类向导: 点击 "File" 菜单并选择 New > Class在 Package Explorer 窗口中右击鼠标并选择 New > Class点击类的下拉…

c++输入输出文件操作stream

系列文章目录 C IO库 文章目录 系列文章目录前言一、文件IO概述coutcin其他istream类方法 文件输入和输出内核格式化总结 前言 一、文件IO 概述 c程序把输入和输出看作字节流。输入时,程序从输入流中抽取字节:输出时,程序将字节流插入到输…

springboot+ssm+java校园二手物品交易系统vxkyj

样需要经过市场调研,需求分析,概要设计,详细设计,编码,测试这些步骤,基于Java语言、Jsp技术设计并实现了校园二手物品交易系统。系统主要包括个人中心、商家管理、用户管理、商品分类管理、商品信息管理、商…

中间件SOME/IP简述

SOME/IP SOME/IP 不是广义上的中间件,严格的来讲它是一种通信协议,但中间件这个概念太模糊了,所以我们也一般称 SOME/IP 为通信中间件。 SOME/IP 全称是 Scalable service-Oriented MiddlewarE over IP。也就是基于 IP 协议的面向服务的可扩…

调用华为API实现身份证识别

调用华为API实现身份证识别 1、作者介绍2、调用华为API实现身份证识别2.1 算法介绍2.1.1OCR简介2.1.2身份证识别原理2.1.3身份证识别应用场景 2.2 调用华为API流程 3、代码实现3.1安装相关的包3.2代码复现3.3实验结果 1、作者介绍 雷千龙,男,西安工程大…

Spring Boot如何实现配置文件的自动加载和刷新?

Spring Boot如何实现配置文件的自动加载和刷新? 在使用Spring Boot开发应用程序时,配置文件是非常重要的组成部分。在不同的环境中,我们可能需要使用不同的配置文件,例如在开发、测试和生产环境中使用不同的配置文件。而且&#…

功能测试转到自动化测试,我的测试之路“狂飙”~20k...

前言 Python自动化测试:Python自动化测试,7天练完这60个实战项目,年薪过35w。 手动功能测试人员应该权衡测试自动化相对于功能测试的好处,并且即可开始行动。现在随着测试行业的发展,自动化测试已经成为每个测试人的标…

nodejs+vue大学生招聘网站应聘系统设计与实现5b14b

目前,伴随着Internet技术的日益成熟,互联网需要提供更多的服务,发达国家已形成以信息技术为核心,招聘网站支撑的现代化招聘公司技术格局。这便是今天为大家所熟悉的管理信息系统,网络发展为招聘网站实现信息化、自动化、智能化和集…

牛客小白月赛73DE

问题很好转化,但是对区间的处理没把握好,一直在纠结怎么o(n) 一开始想到二分了,但是没细想,结果看了讲解发现,其实就是一个前缀数组上对区间的查询的操作,以后再遇到此类问题直接向…

Git提交提交代码报错 Push failed unable to access

目录 场景 环境: Git配置 场景 Push failed unable to access https://github.com/1790753131/remotRepository3.git/: Failed to connect to github.com port 443 after 21114 ms: Couldnt connect to server Push failed unable to ac…

计算节点与存储设备是如何连接的?

本文是《数据存储通识课》合集的一部分,本合集希望通过一系列文章科普数据存储相关技术内容。同时,本系列文章不仅仅是科普,还会进行有深度解析,理论结合实现,从代码实现层面进行剖析。欢迎关注“数据存储张”,老张是深耕存储十几载,就业于存储No1公司的资深工程师。 无…

Keil 5 MDK 发律师函警告了,如何用STCubeIDE开发标准库的程序(STM32F103C8T6为例)

用STCubeIDE进行标准库开发 1、CubeIDE介绍 https://www.stmcu.com.cn/ecosystem/Cube/STM32CubeIDE 2、CubeIDE下载 点击上面的链接,登录即可下载 3、搭建Demo工程 新建一个工作空间 创建一个工程 选择芯片-STM32F103C8T6 填写工程信息 添加标准库到工程 标…

【数据结构与算法】图论及其相关算法

文章目录 图的基本介绍图的表示方式邻接矩阵邻接表 图的深度优先遍历(DFS)概述实现步骤代码实现 图的广度优先遍历(BFS)概述实现步骤代码实现 图的常用代码汇总最小生成树算法普里姆(Prim)算法算法实践 克鲁斯卡尔(Kruskal)算法并…

西南交通大学智能监测 培训课程练习2

2023.05.27培训 task1:spring、springboot task2:mybatis 目录 一、使用IDEA创建工程 1.1新建 ​编辑 1.2选择Maven 1.3创建包 二、添加相关依赖 2.1添加依赖 2.2更新Maven 三、配置application.yaml文件 四、相关注解的使用和理解 4.1Componen…

华硕天选3FX507ZC原装Windows11原厂预装系统工厂模式恢复安装带ASUSRecevory一键还原22H2版本

华硕天选3FX507ZC原装Windows11原厂预装系统工厂模式恢复安装带ASUSRecevory一键还原 文件地址:https://pan.baidu.com/s/1snKOsH3OMl3GZLqeAf-GLA?pwd8888 华硕工厂恢复系统 ,安装结束后带隐藏分区以及机器所有驱动软件 需准备一个16G左右空u盘进行…

倒置字符串、猜名次、猜凶手、杨辉三角

目录 例一:倒置字符串 例二:猜名次 例三:猜凶手 例四:杨辉三角 方法一 方法二 例一:倒置字符串 首先我们先来看一下题目具体要求 再来看一下我们所需要的效果 这里呢,博主给出两种思路,…

docker构建镜像上传到DockerHub

docker构建镜像上传到DockerHub DockerHub注册账号 DockerHub网址: https://hub.docker.com/ 注册 登录 安装docker docker宿主机环境 centos7 参考网址: https://yeasy.gitbook.io/docker_practice/install/centos 测试 docker 是否安装好 docker -v登录docker 登录 dock…

自动化测试3:Junit单元测试框架

目录 1.相关技术 1.1注解 1.1.1Test 1.1.2Disables 忽略 1.1.3BeforeAll AfterAll 1.1.4BeforeEach AfterEach 1.2参数化 1.2.1单参数 1.2.2多参数 1.2.3CSV获取参数 1.2.4方法获取参数 1.3运行顺序 1.3.1问题 1.3.2按指定顺序执行 1.3.3随机执行 1.4.断言 2.测…

webpack的使用

一、什么是webpack? webpack是一个前端构建工具,目前比较主流的构建工具,自定义的模块比较多。 二、应用场景 vue、react、angular 都可以通过webpack构建全部可供访问的页面数量不超过500个 三、安装 通过npm方式在项目根目录下执行命令…