5-k8s-探针介绍

news/2024/7/4 7:39:00 标签: kubernetes, 容器, 云原生

文章目录

    • 一、探针介绍
    • 二、探针类型
    • 三、探针定义方式
    • 四、探针实例
    • 五、启动探针测试
    • 六、存活探针测试
    • 七、就绪探针测试

一、探针介绍

  1. 概念

    在 Kubernetes 中 Pod 是最小的计算单元,而一个 Pod 又由多个容器组成,相当于每个容器就是一个应用,应用在运行期间,可能因为相关原因导致应用异常等。所以,我们需要对k8s进行健康检查,而我们可以通过探针配置运行状况检查,来确定每个 Pod 的状态。

二、探针类型

  1. 存活探针(Liveness Probe)

    存活探针用于检测容器内应用程序的健康状态。如果存活探针失败(即应用程序不健康),k8s将会自动重启容器,以尝试恢复应用程序的健康状态。如果重启容器仍然无法解决问题,Kubernetes 可能会根据配置的重启策略进一步采取行动。重启策略包括:

    • Always(默认):始终重启容器,无限次数地尝试恢复应用程序的健康状态。
    • OnFailure:仅在容器失败(退出状态码非零)时重启容器,尝试恢复应用程序的健康状态。
    • Never:永不重启容器,不会尝试恢复应用程序的健康状态。
  2. 就绪探针(Readiness Probe)

    对于就绪探针(Readiness Probe):就绪探针用于检测容器是否已经准备好接收流量。如果就绪探针失败,Kubernetes 将从服务负载均衡的池中剔除该容器。这意味着新的流量将不会被路由到该容器,直到就绪探针成功为止。这可以确保只有健康的容器能够接收流量,避免将流量发送到尚未准备好的容器上。一旦就绪探针成功,Kubernetes 将再次将容器纳入服务负载均衡,并开始将新的流量路由到该容器

  3. 启动探针(Startup Probe)

    启动探针用于检测容器内应用程序是否已经启动成功。与存活探针和就绪探针不同,启动探针仅在容器启动时执行,并且只需检测一次。启动探针的结果不会影响容器的重启或负载均衡。它主要用于检测应用程序是否成功启动,并在启动过程中提供一定的等待时间。如果启动探针失败,Kubernetes 不会采取任何特殊行动。这是因为启动探针失败只意味着应用程序尚未成功启动,并且不会触发容器的重启或负载均衡操作。

三、探针定义方式

  1. 执行命令(Exec):通过在容器内执行特定的命令来检查应用程序的状态。如果命令的返回状态码是 0,探针被认为是成功的;否则,探针被认为是失败的。
  2. 发送 HTTP 请求(HTTP GET):通过发送 HTTP GET 请求到容器内的指定端点来检查应用程序的状态。如果返回的 HTTP 状态码在 2xx 或 3xx 范围内,探针被认为是成功的;否则,探针被认为是失败的。
  3. TCP 套接字(TCP Socket):通过尝试建立到容器内指定端口的 TCP 连接来检查应用程序的状态。如果连接成功建立,探针被认为是成功的;否则,探针被认为是失败的。

四、探针实例

  1. 查看我们coredns的探针配置:kubectl edit deploy coredns -n kube-system
    在这里插入图片描述

五、启动探针测试

  1. 快速部署nginx的pod:kubectl create deployment nginx --image=nginx

  2. 测试nginx启动探针-http(层级参考第四点coredns的层级):kubectl edit deploy nginx

            startupProbe:
              httpGet:
                path: /api/path
                port: 80
              failureThreshold: 3
              periodSeconds: 10
              successThreshold: 1
              timeoutSeconds: 5
    
            startupProbe: 			#应用启动探针
              httpGet:				#使用http方式进行请求探测
                path: /api/path 	#请求路径
                port: 80			#请求端口
              failureThreshold: 3 	#失败次数达到多少次算失败
              periodSeconds: 10		#间隔时间
              successThreshold: 1	#成功次数达到多少次算成功
              timeoutSeconds: 5		#请求的超时时间
    

    查看:kubectl get pod
    在这里插入图片描述

    查看详情:kubectl describe pod nginx-569854844d-6dzxd
    在这里插入图片描述

    解:因为我们这边设置了启动探针,去访问/api/path。由于nginx没有这个路径,所以访问失败了,所以pod一直没有ready。可以将路径改为/index.html。

  3. 测试nginx启动探针-tcp:kubectl edit deploy nginx

            startupProbe:
              tcpSocket:
                port: 80
              failureThreshold: 3
              periodSeconds: 10
              successThreshold: 1
              timeoutSeconds: 5
    
  4. 测试nginx启动探针-shell:kubectl edit deploy nginx

            startupProbe:
              exec: 
                command: 
                - sh
                - -c
                - "echo 'success' > /inited;"
              failureThreshold: 3
              periodSeconds: 10
              successThreshold: 1
              timeoutSeconds: 5
    

    查看: kubectl exec -it nginx-576dc58bc8-scbv7 cat /inited
    在这里插入图片描述

六、存活探针测试

  1. 测试nginx应用存活探针-http:kubectl edit deploy nginx

            livenessProbe:
              httpGet:
                path: /started.html
                port: 80
              failureThreshold: 3
              periodSeconds: 10
              successThreshold: 1
              timeoutSeconds: 5
    

    查看:kubectl describe pod nginx-65cdf95974-m8l2p
    在这里插入图片描述

    因为不存在/started.html文件,所以检测不到存活,将地址改为/index.html即可

七、就绪探针测试

  1. 测试nginx就绪探针-http:kubectl edit deploy nginx

            readinessProbe:
              httpGet:
                path: /started.html
                port: 80
              failureThreshold: 3
              periodSeconds: 10
              successThreshold: 1
              timeoutSeconds: 5
    

    查看:kubectl describe pod nginx-5bd5c78bbd-tbzvb
    在这里插入图片描述

    因为不存在/started.html文件,所以无法就绪,将地址改为/index.html即可


http://www.niftyadmin.cn/n/5101675.html

相关文章

Docker 安装oracle12c容器并创建新用户

Docker 安装oracle12c容器并创建新用户 下载镜像 docker pull truevoly/oracle-12c启动镜像 8080和22端口没有映射出来,有需要自己 docker run -d -p 8123:1521 -restartalways --privilegedtrue -v /data/docker/Oracle12c_sichuan:/u01/app/oracle/ --name oracle…

linux 安装 RocketMQ 超详细教程(付安装包)

上传服务器 安装包下载https://download.csdn.net/download/weixin_41716049/88441732 1.创建目录【/jar/RocketMQ】用于存放 MQ 文件并将下载的文件上传到服务器文件夹中 mkdir /jar/RocketMQ 2.安装 unzip 命令用于解压压缩包: yum -y install unzip 3.解压压缩…

优思学院|ISO9001管理体系从何而来?97%的专家不知道

ISO9001是当前全球最受欢迎的质量管理系统,特别是踏入21世纪以后,采用这套系统的政府部门、公营机构和企业数量都可谓几何级数上升。 截至2020年,ISO组织已向全球170个国家发出合共916842张ISO9001证书。 探源ISO9001的根源 那么&#xff…

Docker——作为非运维人员,数据卷我们需要了解哪些?

目录 前言 1、什么是数据卷? 1.1、为什么要使用数据卷? 方案一:进入容器内部,找到index.html文件,然后进行修改 方案二:使用数据卷(volume),将宿主机目录映射到容器目录,再进行…

5.覆盖增强技术——PUCCHPUSCH

PUSCH增强方案的标准化工作 1.PUSCH重复传输类型A增强,包括两种增强机制:增加最大重复传输次数,以及基于可用上行时隙的重复传输次数技术方式。 2.基于频域的解决方案,包括时隙间/时隙内跳频的增强 3.支持跨多个时隙的传输块&…

laravel框架的优缺点是什么?

laravel框架 使用了大量设计模式,框架完全符合设计模式的五大基本原则(面向对象设计模式有5大基本原则:单一职责原则、开发封闭原则、依赖倒置原则、接口隔离原则、Liskov替换原则。),模块之间耦合度很低,…

【excel】列转行

列转行 工作中有一些数据是列表,现在需要转行 选表格内容:在excel表格中选中表格数据区域。点击复制:在选中表格区域处右击点击复制。点击选择性粘贴:在表格中鼠标右击点击选择性粘贴。勾选转置:在选择性粘勾选转置选…

嵌入式和 Java选哪个?

今日话题,嵌入式和 Java 走哪个?对于嵌入式领域有浓厚兴趣的人,并不会比Java行业薪资低,处于上中游水平。特别是从2020年开始,嵌入式领域受益于芯片产业的兴起,表现出了强劲的增长势头。薪资水平受多方面因素影响。以…