Pod探针解析及实战(k8s)

news2025/1/23 17:39:21

一、探针类型

1.1livenessProbe存活探针

用于判断容器是否存活(running状态),如果LivenessProbe探针探测到容器不健康,则kubelet杀掉该容器,并根据容器的重启策略做相应的处理。如果一个容器不包含LivenessProbe探针,则kubelet认为该容器的LivenessProbe探针返回的值永远是“Success”。

1.2readinessProbe就绪探针

用于判断容器是否启动完成(ready状态),可以接收请求。如果ReadinessProbe探针检测到失败,则Pod的状态被修改。Endpoint Controller将从Service的Endpoint中删除包含该容器所在Pod的Endpoint。

1.3startupProbe启动探针

指示容器中的应用是否已经启动。如果提供了启动探针(startup probe),则禁用所有其他探针,直到它成功为止。如果启动探针失败,kubelet 将杀死容器,容器服从其重启策略进行重启。如果容器没有提供启动探针,则默认状态为成功Success。

二、探针动作

2.1exec

在容器内执行指定命令。如果命令退出时返回码为 0 则认为诊断成功。

    livenessProbe:
      exec:
        command: ["cat /tmp/health"]
      initialDelaySeconds: 5
      periodSeconds: 5

2.2tcpSocket

对指定端口上的容器的 IP 地址进行 TCP 检查。如果端口打开,则诊断被认为是成功的。

    livenessProbe:
      tcpSocket:
        port: 80
      initialDelaySeconds: 15
      periodSeconds: 20

2.3httpGet

对指定的端口和路径上的容器的 IP 地址执行 HTTP Get 请求。如果响应的状态码大于等于200 且小于 400,则诊断被认为是成功的。path字段必须有。

    livenessProbe:
      httpGet:
        path: /doc.html
        port: 40017
      failureThreshold: 1
      periodSeconds: 10

三、探针配置

3.1通用字段

探针配置字段,可以使用这些字段精确的控制存活和就绪检测的行为:

initialDelaySeconds:容器启动后要等待多少秒后存活和就绪探测器才被初始化,默认是 0 秒,最小值是 0。
periodSeconds:执行探测的时间间隔(单位是秒)。默认是 10 秒。最小值是 1。
timeoutSeconds:探测的超时后等待多少秒。默认值是 1 秒。最小值是 1。
successThreshold:探测器在失败后,被视为成功的最小连续成功数。默认值是 1。存活探测的这个值必须是 1。最小值是 1。
failureThreshold:当 Pod 启动了并且探测到失败,Kubernetes 的重试次数。存活探测情况下的放弃就意味着重新启动容器。就绪探测情况下的放弃 Pod 会被打上未就绪的标签。默认值是 3。最小值是 1。优先级低于pod默认重启策略,更改后也不会按照该参数执行。

3.2专属字段

3.2.1exec

command

3.2.2tcpSocket

port

3.2.3httpGet

host:连接使用的主机名,默认是 Pod 的 IP。也可以在 HTTP 头中设置 “Host” 来代替。
scheme:用于设置连接主机的方式(HTTP 还是 HTTPS)。默认是 HTTP。
path:访问 HTTP 服务的路径。
httpHeaders:请求中自定义的 HTTP 头。HTTP 头字段允许重复。
port:访问容器的端口号或者端口名。如果数字必须在 1 ~ 65535 之间。

四、实战

livenessProbe存活探针为例测试三种探针动作,其它的探针也是同样配置。

4.1exec

这里必须用busybox镜像,因为busybox自带一部分linux命令。pod启动时新建healthy文件,30秒后删除文件,再次检查时pod已经重启过一次。

apiVersion: v1
kind: Pod
metadata:
  name: exec-probe
  namespace: default
  labels:
    probe: liveness
spec:
  containers:
  - name: liveness-probe-container
    image: busybox
    command: ["/bin/sh","-c","touch /tmp/healthy;sleep 30;rm -rf /tmp/healthy","sleep 600"]
    livenessProbe:
      exec:
        command: ["test","-e","/tmp/healthy"]
      initialDelaySeconds: 5
      periodSeconds: 5

 ​​​​​​

4.2tcpSocket

使用nginx镜像,容器默认开放端口为80,探针动作检测80端口已开启,pod运行正常。

apiVersion: v1
kind: Pod
metadata:
  name: tcp-probe
  namespace: default
  labels:
    probe: tcp
spec:
  containers:
  - name: tcp-rpobe
    image: nginx
    ports:
    - name: http
      containerPort: 80
    livenessProbe:
      tcpSocket:
        port: 80
      initialDelaySeconds: 10
      periodSeconds: 5

 

将探针端口检测为改为81,再次测试,发现pod不断重启,重启多次后出现状态为CrashLoopBackOff。

4.3httpGet

pod启动在path路径下生成ishealthy.html,进去容器后手动删除ishealthy.html,

apiVersion: v1
kind: Pod
metadata:
  name: http-probe
  namespace: default
  labels:
    probe: http
spec:
  containers:
  - name: http-probe
    image: nginx
    imagePullPolicy: IfNotPresent
    ports:
    - name: http
      containerPort: 80
    lifecycle:
      postStart:
        exec:
          command: ["/bin/bash","-c","echo Http-Probe > /usr/share/nginx/html/ishealth.html"]
    livenessProbe:
      httpGet:
        path: /ishealth.html
        port: http
        scheme: HTTP

进入容器删除ishealth.html,,此处只会重启1次,因为pod重启后会重新生成ishealth.html文件。

kubectl exec http-probe -it bash

rm-rf  /usr/share/nginx/html/ishealth.html
exit

参考文档:

解析

【项目实战17.5】k8s(3.5)—pod生命周期和探针_运维技术-陈工的博客-CSDN博客

存活探针(Liveness)、就绪探针(Readiness)、启动探针(Startup)、容器钩子_startupprobe_刘李404not found的博客-CSDN博客

实战 Kubernetes详解(十七)——Pod存活性探针应用实战_tcp探针_永远是少年啊的博客-CSDN博客

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

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

相关文章

cmake创建windows工程编译环境

1.1 为什么需要CMake 你或许听过好几种 Make 工具,例如 GNU Make ,QT 的 QMake ,微软的 MS NMake,BSD PMake,Makepp等等。这些 Make 工具遵循着不同的规范和标准,所执行的 Makefile 格式也千差万别。这样就…

ubuntu虚拟机增加磁盘后,虚拟机内部应该如何分配对应空间

fdisk -l 输入命令 parted /dev/sda 输入命令 unit s 设置Size单位,方便追加输入 输入命令 p free 查看详情 输入命令 resizepart 3 追加容量到sda3 输入命令 83886046s 空闲容量区间Free Space结束位置 输入命令 q 退出 输入命令 pvresize /dev/sda3 更新pv物…

【计算机网络】Linux 系统是如何收发网络包的?

【计算机网络】Linux 系统是如何收发网络包的? 文章目录 【计算机网络】Linux 系统是如何收发网络包的?网络模型Linux 网络协议栈Linux 接收网络包的流程Linux 发送网络包的流程总结 网络模型 为了使得多种设备能通过网络相互通信,和为了解决…

空格在科技类文章的排版中对于阅读体验的影响

© 2018 sparanoid © 2018-2023 Conmajia 第一部分援引自《中文文案排版指北》 研究显示,打字的时候不喜欢在中文和英文之间加空格的人,感情路都走得很辛苦,有七成的比例会在 34 岁的时候跟自己不爱的人结婚,而其余三成的…

分布式锁-Redisson

分布式锁 1、分布式锁1.1 本地锁的局限性1.1.1 测试代码1.1.2 使用ab工具测试(单节点)1.1.3 本地锁问题演示(集群情况) 1.2 分布式锁实现的解决方案1.3 使用Redis实现分布式锁(了解即可)1.3.1 编写代码1.3.2 压测 1.4 使用Redisson解决分布式锁1.4.1 实现代码1.4.1 压测1.4.2 可…

DS1302

DS1302时钟芯片简介 DS1302是DALLAS公司推出的涓流充电时钟芯片,内含一个实时时钟/日历和31字节静态RAM,可以通过串行接口与单片机进行通信。实时时钟/日历电路提供秒、分、时、日、星期、月、年的信息,每个月的天数和闰年的天数可自动调整&a…

深度分析Netflix的投资价值,虽面临激烈竞争,但前景无限光明

来源:猛兽财经 作者:猛兽财经 公司介绍 Netflix(NFLX)是一家在视频流媒体领域非常成功的公司,运营着全球最大的视频流媒体订阅平台之一(目前已经有超过2.3亿的付费会员),它的商业模式也比较简单&#xff0…

Linux环境jdk安装教程及详细步骤

下载jdk包: 下载地址:https://www.oracle.com/cn/java/technologies/javase/javase8u211-later-archive-downloads.html 这里点击下载后,需要登录才可以下载,没有帐号就注册一下即可。 将下载的文件放至服务器/usr/local/jdk目录…

4.13~4.17(PE文件结构预习+hook+进程hellow)

常见PE文件结构 常见的PE文件:exe、dll、sys Ag: exe就不用多说,就是可执行文件 dll动态链接库 对于 Windows 操作系统,操作系统的大部分功能都由 DLL 提供 (https://learn.microsoft.com/zh-cn/troubleshoot/window…

三:slab分配器

目录 slab分配器 基本概念 slab分配内存 主要结构体 kmem_cache per cpu freelist slab分配器 基本概念 针对小粒度内存分配 伙伴系统以页4kb为最小分配单位,但对于一些时候,这太大了,会造成严重的内存浪费,产生大量内存碎…

【mac】iterm2通过rz命令往服务器上传文件

需要的资源文件在这里iterm2-zmodem,设置的0积分,如果csdn给调了,点这里下载bak 1、通过命令行打开bin文件夹 cd /usr/local/binopen . 2、把上面下载的俩文件复制进去 3、还是在/usr/local/bin下调整权限 cd /usr/local/binchmod 777 ite…

华为云上云实践:Windows环境下优化云硬盘EVS的创建、挂载和初始化

本文主要讲解华为云云硬盘 EVS 的在 Windows 服务器上创建、挂载及云硬盘初始化等基本操作,快速掌握华为云云硬盘 EVS 操作方法。 文章目录 一、前言二、前期准备:华为云 EVS 采购三、挂载非共享云硬盘 EVS五、初始化云硬盘 EVS 一、前言 华为云 EVS&am…

C嘎嘎~~【初识C++ 上篇】

初识C 上篇 🫅1. C关键字🫅 2.命名空间🤷‍♂️2.1命名空间的定义🤷‍♂️2.2命名空间的使用 🫅 3.C输入 & 输出 转眼间, 就进入C这个新的篇章啦! 我带着些许心悸 和 激动: 心悸…

Wing IDE 解决鼠标悬浮

Wing IDE 解决鼠标悬浮 通过修改文件配置,解决鼠标悬浮没有出现变量值和函数没有自动提示的问题。 配置文件路径查看: 打开该文件夹下的下图配置文件: 添加下图两行配置,然后重启wingide即可。 Wing IDE 常用快捷键 调节字…

【JS】Es6无法注销事件 | class构造函数里无法注销事件解决方法(亲测有效)

错误删除事件 class Goods {addEv() {// 添加mousemove事件// document.addEventListener(mousemove, this.changeEv.bind(document)) //错误一// document.addEventListener(mousemove, this.changeEv) //错误二document.addEventListener(mousemove, this.changeEv.bind(thi…

(数字图像处理MATLAB+Python)第五章图像增强-第一节:图像增强概述和基于灰度级变换的图像增强

文章目录 一:图像增强概述二:基于灰度级变换的图像增强(1)线性灰度级变换A:基本线性灰度级变换B:分段线性灰度级变换①:定义②:截取式灰度变换③:窗切片 (2&a…

【权限维持】LinuxOpenSSHPAM后门SSH软链接公私钥登录

文章目录 权限维持-Linux-替换版本-OpenSSH后门拓展玩法:OpenSSH后门的防范方法 权限维持-Linux-更改验证-SSH-PAM后门配置环境 权限维持-Linux-登录方式-软链接&公私钥&新帐号SSH软链接公私钥后门帐号 参考 权限维持-Linux-替换版本-OpenSSH后门 这里复现…

java 获取时间的方法

Java的时间是通过字节码指令来控制的,所以 java程序的运行时间是通过字节码指令来控制的。但是由于 Java程序在运行时, JVM会产生一些状态,所以在执行 JVM指令时, JVM也会产生一些状态。 我们在执行 java程序时,主要是…

JVM(面试问题简析)学习笔记

文章目录 1. JVM中有哪几块内存区域?Java 8 之后对内存分代做了什么改进?2. 你知道JVM是如何运行起来的吗?堆内存中对象的分配的基本策略?3. 说说 JVM 在哪些情况下会触发垃圾回收?JVM 的年轻代垃圾回收算法&#xff1…

【杂凑算法篇】密码杂凑算法的安全强度

【杂凑算法篇】密码杂凑算法的安全强度 杂凑(哈希)算法安全强度—【蘇小沐】 文章目录 【杂凑算法篇】密码杂凑算法的安全强度(一)安全强度(Security Strength)(二)杂凑算法的安全强度与对比总…