K8S的探针说明和使用方式

news2025/1/20 13:22:41

探针概述

探针分类

K8S中 探针(Probes) 是用于检查容器的健康状况和可用性的机制。探针可以自动判断应用的运行状态,并根据需要重启容器、替换容器或将流量路由到健康的实例。从而确保应用始终处于健康、可用的状态,并帮助自动化故障恢复

livenessProbe:

健康状态检查,周期性检查服务是否存活,检查结果失败,将"重启"容器(删除源容器并重新创建新容器)。
如果容器没有提供健康状态检查,则默认状态为Success。

readinessProbe:

可用性检查,周期性检查服务是否可用,从而判断容器是否就绪。
若检测pod服务不可用,则会将pod从svc的ep列表中移除。
若检测pod服务可用,则会将pod重新添加到svc的ep列表中。
如果容器没有提供可用性检查,则默认状态为Success。

startupProbe: (1.16+之后的版本才支持)

如果提供了启动探针,则所有其他探针都会被禁用,直到此探针成功为止。
如果启动探测失败,kubelet将杀死容器,而容器依其重启策略进行重启。
如果容器没有提供启动探测,则默认状态为 Success。

探针的探测方式

  • HTTP GET 探测:发起 HTTP 请求来检查容器是否可以处理请求,(可以是 GET、POST 等)。如果返回的状态码为 2xx 或 3xx,探测就会成功,否则认为容器失败

    • livenessProbe:
        httpGet:
          path: /healthz
          port: 8080
          httpHeaders:
          - name: host
            value: test-probe
        initialDelaySeconds: 3
        periodSeconds: 5
      
  • TCP Socket 探测:向容器内的指定端口发送 TCP 连接请求来检查容器是否能正常响应,适用于没有 HTTP 服务的应用,如数据库、消息队列。在容器内的指定端口建立 TCP 连接。如果连接成功,探测即认为成功,否则认为容器失败

    • livenessProbe:
        tcpSocket:
          port: 3306
        initialDelaySeconds: 3
        periodSeconds: 5
      
  • 命令(Exec) 探测:执行容器内部的命令来判断容器是否健康,适用于需要执行特定操作或检查应用内部状态的场景。执行指定的命令,如果命令返回 0 表示容器健康,返回其他值则表示容器不健康

    • livenessProbe:
        exec:
          command:
          - "sh"
          - "-c"
          - "ps -ef | grep filebeat"
        initialDelaySeconds: 3
        periodSeconds: 5
      

探针相关配置字段说明

探针相关字段说明
failureThreshold: 3连续3次探测失败后,判定pod失效,触发相应操作
initialDelaySeconds: 10在容器启动后的10秒钟后开始探测
periodSeconds: 1每1秒进行一次探测
successThreshold: 1探测成功的阈值(即1次成功即可认为探测通过)
timeoutSeconds: 1每次探测的超时时间为1秒

livenessprobe存活探针示例

用于检测容器是否存活。如果存活探针检测到容器处于非健康状态(如死循环或挂起),Kubernetes会重新启动该容器。

# 存活探针示例:
LivenessProbe:
  enabled: true
  httpGet:
  port: 8080
  scheme: HTTP
  initialDelaySeconds: 30  # 初始化时间,默认值为0
  timeoutSeconds: 35 			 # 超时时间,默认值为1
  periodSeconds: 30  			 # 探测间隔时间,默认是10S
  successThreshold: 1      # 检查1次成功就表示成功
  failureThreshold: 3      # 检测3次失败就表示失败,默认值是3

命令探测方式

创建一个文件,通过 cat 命令查看文件是否存在作为命令探测方式。一段时间后,文件被删除,探针监测失败

cat > 20-pods-livenessProbe-exec.yaml <<eof
apiVersion: v1
kind: pod
metadata:
  name: pod-livenessprobe-exec-001
spec:
   containers:
   - image: registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1
     name: c1
     command: 
     - /bin/sh
     - -c
     - touch /tmp/zhiyong18-linux-healthy; sleep 20; rm -f /tmp/zhiyong18-linux-healthy; sleep 600
     livenessProbe:
       # 使用exec的方式去做健康检查,自定义检查命令为cat,并判断cat的返回值
       exec:
         command:
         - cat
         - /tmp/zhiyong18-linux-healthy
       periodSeconds: 1
       failureThreshold: 3
       successThreshold: 1
       initialDelaySeconds:  30
       timeoutSeconds: 1
eof

http探测方式

若是删除,/usr/share/nginx/html/index.html,访问nginx,http请求失败,pod重启

cat > 21-pods-livenessProbe-httpGet.yaml <<eof
apiVersion: v1
kind: pod
metadata:
  name: livenessprobe-httpget-001
spec:
   containers:
   - image: registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1
     name: c1
     # 健康状态检查,周期性检查服务是否存活,检查结果失败,将重启容器。
     livenessProbe:
       # 使用httpGet的方式去做健康检查
       httpGet:
         port: 80
         path: /index.html
       failureThreshold: 3
       initialDelaySeconds: 10
       periodSeconds: 1
       successThreshold: 1
       timeoutSeconds: 1
eof

端口探测

检测80端口,启动10秒钟后关闭nginx;由于tcp探针检测失败,后容器重启

cat > 22-pods-livenessProbe-tcpSocket.yaml <<EOF
apiVersion: v1
kind: pod
metadata:
  name: livenessprobe-tcpsoket-001
spec:
   containers:
   - image: registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1
     name: c1
     command:
     - /bin/sh
     - -c
     - nginx; sleep 10; nginx -s stop ; sleep 600
     # 健康状态检查,周期性检查服务是否存活,检查结果失败,将重启容器。
     livenessProbe:
       # 使用tcpSocket的方式去做健康检查
       tcpSocket:
         port: 80
       failureThreshold: 3
       initialDelaySeconds: 20
       periodSeconds: 2
       successThreshold: 1
       timeoutSeconds: 1
EOF

readinessProbe就绪探针

场景:用于判断容器是否准备好处理用户请求。K8S根据就绪探针的状态决定是否将pod的IP加入服务负载均衡器,确保只将流量发送到准备好的容器

举例:数据库服务启动时可能需要几秒钟才能连接到数据库并进行初始化

readinessProbe:
  httpGet:
    port: 8080
    scheme: HTTP
  initialDelaySeconds: 30  # 初始化时间,默认值为0
  timeoutSeconds: 35       # 超时时间,默认值为1
  periodSeconds: 30        # 探测间隔时间,默认是10S
  successThreshold: 1      # 检查1次成功就表示成功
  failureThreshold: 3      # 检测3次失败就表示失败,默认值是3

使用exec自定义检查的命令

周期性,检测服务是否可用。可以和livenessprobe一起使用

cat > 23-pods-readinessprobe-livenessProbe-exec.yaml <<eof
apiVersion: apps/v1
kind: Deployment
metadata:
  name: deploy-readinessprobe
spec:
  replicas: 3
  selector:
    matchLabels:
      apps: v1
  template:
    metadata:
      labels:
        apps: v1
    spec:
       containers:
       - image: registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1
         name: c1
         command: 
         - /bin/sh
         - -c
         - touch /tmp/zhiyong18-linux-healthy; sleep 35; rm -f /tmp/zhiyong18-linux-healthy; sleep 600
         # 存活探针
         livenessProbe:
           exec:
             command:
             - cat
             - /tmp/zhiyong18-linux-healthy
           failureThreshold: 3
           initialDelaySeconds: 65
           periodSeconds: 1
           successThreshold: 1
           timeoutSeconds: 1
         # 可用性检查,周期性检查服务是否可用,从而判断容器是否就绪.
         readinessProbe:
           # 使用exec的方式去做健康检查
           exec:
             # 自定义检查的命令
             command:
             - cat
             - /tmp/zhiyong18-linux-healthy
           failureThreshold: 3
           initialDelaySeconds: 5
           periodSeconds: 1
           successThreshold: 1
           timeoutSeconds: 1

---

apiVersion: v1
kind: Service
metadata:
  name: zhiyong18-readinessprobe-exec
spec:
  selector:
    apps: v1
  ports:
  - port: 80
    targetPort: 80
    protocol: TCP
eof

分析,一段时间后,发现提示readness探针提示为准备就绪。

[root@master231~]# kubectl get pods
NAME                                     READY   STATUS    RESTARTS      AGE
deploy-readinessprobe-59996dd447-fbpjs   0/1     Running   2 (82s ago)   4m43

[root@master231~]# kubectl describe pods deploy-readinessprobe-59996dd447-fbpjs
...
Warning  Unhealthy  3m49s (x22 over 4m9s)  kubelet            Readiness probe failed: cat: can't open '/tmp/zhiyong18-linux-healthy': No such file or directory

startup启动探针

在这里插入图片描述

livenessProbe:
  httpGet:
    path: /healthz
    port: 8080
  initialDelaySeconds: 30
  periodSeconds: 10
startupProbe:
  httpGet:
    path: /healthz
    port: 8080
  failureThreshold: 30
  periodSeconds: 10

特点:

探测容器中的应用是否已经正常启动。如果启动了startupProbe,则所有其他探针都先被禁用,直到此探针成功为止。如果startupProbe探测失败,kubelet会杀死容器,而容器根据重启策略来进行重启。如果容器没有提供启动探针,则默认状态为Success。

应用场景

适用于启动时间较长或启动顺序依赖较复杂的应用。Startup Probe 可避免在应用尚未启动完成时因健康检查失败而导致容器被误判为不健康

[root@master231 pods]# cat >> 26-pods-startupProbe-httpGet.yaml <<eof
apiVersion: v1
kind: pod
metadata:
  name: startupprobe-httpget-01
spec:
  volumes:
  - name: data
    emptyDir: {}
  initContainers:
  - name: init01
    image: registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1
    volumeMounts:
    - name: data
      mountPath: /zhiyong18
    command:
    - /bin/sh
    - -c
    - echo "liveness probe test page" >> /zhiyong18/huozhe.html
  - name: init02
    image: registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v2
    volumeMounts:
    - name: data
      mountPath: /zhiyong18
    command:
    - /bin/sh
    - -c
    - echo "readiness probe test page" >> /zhiyong18/zhiyong18.html
  - name: init03
    image: registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v3
    volumeMounts:
    - name: data
      mountPath: /zhiyong18
    command:
    - /bin/sh
    - -c
    - echo "startup probe test page" >> /zhiyong18/start.html
  containers:
  - name: c1
    image: registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1
    volumeMounts:
    - name: data
      mountPath: /usr/share/nginx/html
    # 判断服务是否健康,若检查不通过,将pod直接重启。
    livenessProbe:
      httpGet:
        port: 80
        path: /huozhe.html
      failureThreshold: 3
      initialDelaySeconds: 5
      periodSeconds: 1
      successThreshold: 1
      timeoutSeconds: 1
    # 判断服务是否就绪,若检查不通过,将pod标记为未就绪状态。
    readinessProbe:
      httpGet:
        port: 80
        path: /zhiyong18.html
      failureThreshold: 3
      initialDelaySeconds: 10
      periodSeconds: 3
      successThreshold: 1
      timeoutSeconds: 1
    # 启动时做检查,若检查不通过,直接杀死容器。并进行重启!
    # startupProbe探针通过后才回去执行readinessProbe和livenessProbe哟~
    startupProbe:
      httpGet:
        port: 80
        path: /start.html
      failureThreshold: 3
      # 尽管上面的readinessProbe和livenessProbe数据已经就绪,但必须等待startupProbe的检测成功后才能执行。
      initialDelaySeconds: 35
      periodSeconds: 3
      successThreshold: 1
      timeoutSeconds: 1
eof

GRPC探测方式

参考链接:https://kubernetes.io/zh-cn/blog/2022/05/13/grpc-probes-now-in-beta/

什么是rpc:在本地调用远程主机的方法,就像是调用本地的方法

1.cat 27-pods-livenessProbe-grpc.yaml

apiVersion: v1
kind: ReplicationController
metadata:
  name: rc-etcd-grpc
spec:
  replicas: 1
  selector:
    app: etcd
  template:
    metadata:
      labels:
        app: etcd
    spec:
       restartPolicy: Always
       containers:
       - image: registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/etcd:3.5.10
         name: web
         imagePullPolicy: IfNotPresent
         command:
          - /opt/bitnami/etcd/bin/etcd
          - --data-dir=/tmp/etcd 
          - --listen-client-urls=http://0.0.0.0:2379 
          - --advertise-client-urls=http://127.0.0.1:2379 
          - --log-level=debug
         ports:
         - containerPort: 2379
         livenessProbe:
           # 对grpc端口发起grpc调用,目前属于测试阶段,如果真的想要使用,请在更高版本关注,比如k8s 1.24+
           # 在1.23.17版本中,如果检测失败,会触发警告,但不会重启容器只是会有警告事件。
           grpc:
             port: 2379
             # service: health
           failureThreshold: 3
           initialDelaySeconds: 10
           periodSeconds: 1
           successThreshold: 1
           timeoutSeconds: 1
.1:2379 
          - --log-level=debug
         ports:
         - containerPort: 2379
         livenessProbe:
           # 对grpc端口发起grpc调用,目前属于测试阶段,如果真的想要使用,请在更高版本关注,比如k8s 1.24+
           # 在1.23.17版本中,如果检测失败,会触发警告,但不会重启容器只是会有警告事件。
           grpc:
             port: 2379
             # service: health
           failureThreshold: 3
           initialDelaySeconds: 10
           periodSeconds: 1
           successThreshold: 1
           timeoutSeconds: 1

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

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

相关文章

基于SpringBoot+Vue的智慧动物园管理系统的设计与实现

获取源码&#xff1a;基于SpringBootVue智慧动物园系统设计与实现: 后台和用户前台。后台包括首页、员工管理、考勤管理、部门管理、角色管理、审核管理、动物管理、演出管理、园区管理、园区设施维修、饲养管理、行为观察管理、疫苗管理、看护管理、个人中心、票务管理、收入管…

【博客之星评选】2024年度前端学习总结

故事的开端...始于2024年第一篇前端技术博客 那故事的终末...也该结束于陪伴了我一整年的前端知识了 踏入 2025 年&#xff0c;满心激动与自豪&#xff0c;我成功闯进了《2024 年度 CSDN 博客之星总评选》的 TOP300。作为一名刚接触技术写作不久的萌新&#xff0c;这次能走到这…

GPT-5 传言:一场正在幕后发生的 AI 变革

新的一年&#xff0c;让我们从一个引人入胜的话题开始&#xff1a;如果我告诉你&#xff0c;GPT-5 并非虚构&#xff0c;而是真实存在呢&#xff1f;它不仅真实存在&#xff0c;而且正在你看不见的地方悄然塑造着世界。我的基本假设是&#xff1a;OpenAI 已经秘密开发出 GPT-5&…

LeetCode题练习与总结:N 叉树的最大深度--559

一、题目描述 给定一个 N 叉树&#xff0c;找到其最大深度。 最大深度是指从根节点到最远叶子节点的最长路径上的节点总数。 N 叉树输入按层序遍历序列化表示&#xff0c;每组子节点由空值分隔&#xff08;请参见示例&#xff09;。 示例 1&#xff1a; 输入&#xff1a;roo…

51c自动驾驶~合集47

我自己的原文哦~ https://blog.51cto.com/whaosoft/13083194 #DreamDrive 性能爆拉30%&#xff01;英伟达&#xff1a;时空一致下的生成重建大一统新方案~ 从自车的驾驶轨迹中生成真实的视觉图像是实现自动驾驶模型可扩展训练的关键一步。基于重建的方法从log中生成3D场景…

AI 编程工具—Cursor AI 对话模式详解 内嵌对话模式

AI 编程工具—Cursor AI 对话模式详解 内嵌对话模式 前面我们已经学习了Cursor 的两种工作模式,也就是Chat、Composer 更多细节可以看之前的文章 Cursor 对话模式详解 Chat、Composer 与 Normal/Agent 模式 这一节我们按一下最后一种模式,也就是内嵌对话模式 内嵌对话模式…

国产编辑器EverEdit - 合并行

1 合并行 1.1 应用场景 在编写代码或其他场景下&#xff0c;有时需要把多行的内容缩减成一行&#xff0c;或者纯粹减少行数进行合并&#xff0c;比如&#xff1a;下面的字典的定义&#xff0c;每个元素占了一行&#xff0c;有点浪费&#xff0c;现在需要把它们缩减行数。 typ…

postman请求参数化

一、使用环境变量(Environment Variables)进行参数化 1、在请求中使用环境变量 在请求的url、请求头(Headers)、请求体(Body)等部分都可以使用环境变量。 URL 部分示例 点击 Postman 界面右上角的 “眼睛” 图标(Environment Quick Look)打开环境管理窗口单击Edit将变…

[JavaWeb]央视新闻排版

私用学习笔记 一.设置颜色 <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0"> <title>【新思想引领新征程…

Transform论文阅读之Attention Is All You Need(一)and Vit

摘要&#xff1a; 这篇论文的摘要介绍了一种名为Transformer的新型神经网络架构&#xff0c;该架构完全基于自注意力机制&#xff0c;用于解决序列转换任务。Transformer在机器翻译任务中取得了领先的性能&#xff0c;并且相比基于循环或卷积神经网络的传统架构&#xff0c;Tr…

【神经网络基础】

目录 一、神经网络的构成 1.1什么是神经网络&#xff1f; 1.2 激活函数 1.2.1 Sigmoid 1.2.2 Tanh 1.2.3 ReLU 1.2.4 softmax 1.2.5 其他激活函数 1.2.6 选择激活函数 1.3 参数初始化 1.4 模型构建 二、损失函数 2.1 分类问题 2.1.1多分类&#xff08;多分类交叉…

【Linux】Linux入门(2)常见指令

目录 Linux下的文件ls 指令 --- 展示目录pwd指令 --- 显示当前目录cd 指令 --- 改变工作目录touch指令 --- 创建普通文件stat指令 --- 查看文件属性mkdir指令 --- 创建目录rmdir指令 --- 删除目录rm指令 --- 同时删除文件或目录man指令 --- 访问帮助手册cp指令 复制文件或目录m…

202509读书笔记|《飞花令·山》——两岸猿声啼不住,轻舟已过万重山

202509读书笔记|《飞花令山》——两岸猿声啼不住&#xff0c;轻舟已过万重山 《飞花令山》素心落雪编著&#xff0c;飞花令得名于唐代诗人韩翃《寒食》中的名句“春城无处不飞花”&#xff0c;类似于行酒令&#xff0c;是文人们的一种雅致的娱乐活动。 一直都比较喜欢看诗词&a…

GRGDSPC;H-Gly-Arg-Gly-Asp-Ser-Pro-Cys-OH;是一种末端巯基化的细胞粘附肽;91575-26-7

【GRGDSPC 简介】 GRGDSPC 是一种含 7 个氨基酸的多肽&#xff0c;且末端巯基化的细胞粘附肽。化学结构 是H-GLY-ARG-GLY-ASP-SER-PRO-CYS-OH&#xff0c;氨基酸序列为甘氨酸-精氨酸-甘氨酸-天冬氨酸-丝氨酸-脯氨酸-半胱氨酸&#xff0c;C端为羟基&#xff0c;是一种末端巯基化…

抖音ip属地不准是什么原因?可以改吗

在数字化时代&#xff0c;社交媒体平台如抖音已成为人们日常生活的重要组成部分。随着各大平台对用户隐私和数据安全的日益重视&#xff0c;IP属地的显示功能应运而生。然而&#xff0c;不少抖音用户在使用过程中发现&#xff0c;显示的IP属地与实际位置存在偏差&#xff0c;这…

.Net Core微服务入门全纪录(四)——Ocelot-API网关(上)

系列文章目录 1、.Net Core微服务入门系列&#xff08;一&#xff09;——项目搭建 2、.Net Core微服务入门全纪录&#xff08;二&#xff09;——Consul-服务注册与发现&#xff08;上&#xff09; 3、.Net Core微服务入门全纪录&#xff08;三&#xff09;——Consul-服务注…

Zemax 中的二向色分束器和荧光波偏移

二向色分光镜是一种专用光学元件&#xff0c;用于根据光的波长将一束光分成两束独立的光。“二向色”是指该元件根据光的波长选择性地透射或反射光的性质。 在大多数情况下&#xff0c;二向色分束器由一种对不同波长的光具有不同折射率的材料制成。分束器的表面涂有一层薄膜&a…

DevUI 2024 年度运营报告:开源生态的成长足迹与未来蓝图

在当今数字化飞速发展的时代&#xff0c;开源已成为推动技术创新与协作的重要力量。DevUI 作为开源领域的重要一员&#xff0c;其发展历程与成果备受关注。值此之际&#xff0c;GitCode 精心整理了 DevUI 年度运营报告&#xff0c;为您全面呈现 DevUI 社区在过去一年里的开源之…

3 前端(中):JavaScript

文章目录 前言&#xff1a;JavaScript简介一、ECMAscript&#xff08;JavaScript基本语法&#xff09;1 JavaScript与html结合方式&#xff08;快速入门&#xff09;2 基本知识&#xff08;1&#xff09;JavaScript注释&#xff08;和Java注释一样&#xff09;&#xff08;2&am…

rocketmq基本架构

简介 Name server 负责broker注册、心跳&#xff0c;路由等功能&#xff0c;类似Kafka的ZKname server节点之间不互相通信&#xff0c;broker需要和所有name server进行通信。扩容name server需要重启broker&#xff0c;不然broker不会和name server建立连接producer和consum…