k8s 探针

news2025/2/12 17:49:33

1.前言

Kubernetes探针(Probe)是用于检查容器运行状况的一种机制。探针可以检查容器是否正在运行,容器是否能够正常响应请求,以及容器内部的应用程序是否正常运行等。在Kubernetes中,探针可以用于确定容器的健康状态,如果容器的健康状态异常,Kubernetes将会采取相应的措施,例如重启容器或将其从服务中删除

2.探针类型

k8s有三种类型的探针分别是Liveness Probe(存活探针)、Readiness Probe(就绪探针)、Startup Probe(启动探针)

Liveness Probe:用于检查容器是否正在运行,如果Liveness Probe检查失败,则Kubernetes将重启容器

Readiness Probe:用于检查容器是否能够正常响应请求,如果Readiness Probe检查失败,则Kubernetes将停止将流量发送到该容器

Startup Probe:用于检查容器内部的应用程序是否已经启动并且已经准备好接受流量,如果Startup Probe检查失败,则Kubernetes将重启容器

总的来说存活探针、启动探针在检测容器的探针失败时重启容器,就绪探针在检测容器的探针失败时禁止将流量调度到该容器,一般都是将就绪探针和存活探针一起使用,启动探针只在启动较慢的容器中结合使用,避免因为容器启动时间较长导致存活探针检测容器以为是不存活而一直重启容器,但是也可以将存活探针的检测时间设置长一点来解决此问题

3.探针的检测流程

同时使用三种探针的情况下

启动探针检测:在容器启动时,Kubernetes 将首先执行启动探针。如果启动探针失败,则 Kubernetes 将重启容器。启动探针只会在容器启动时执行一次

定期检测存活探针:存活探针用于检测容器是否处于运行状态。Kubernetes 将定期执行存活探针来确保容器仍然处于运行状态。如果探针失败,则 Kubernetes 将重启容器

定期检测就绪探针:就绪探针用于检测容器是否已准备好接收流量。Kubernetes 将定期执行就绪探针来确保容器已准备好接收流量。如果探针失败,则 Kubernetes 将从服务的端点中删除该容器,直到探针再次成功

4.探针的使用

 4.1启动探针

编辑yaml文件

vi deployment-nginx.yaml 

apiVersion: apps/v1
kind: Deployment
metadata: 
  labels:
    app: nginx
  name: nginx
  namespace: default
spec:
  replicas: 5
  progressDeadlineSeconds: 600
  minReadySeconds: 10
  strategy:
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 0
    type: RollingUpdate
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec: 
      containers:
      - name: nginx
        image: nginx:1.21
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80
        startupProbe:
          httpGet:
            path: /
            port: 81
            scheme: HTTP
          initialDelaySeconds: 20
          timeoutSeconds: 5
          successThreshold: 1
          failureThreshold: 3
          periodSeconds: 10
---
apiVersion: v1
kind: Service
metadata:
  name: nginx
  namespace: default
spec:
  selector:
    app: nginx
#  type: NodePort
  type: ClusterIP 
  clusterIP:
#  sessionAffinity: ClientIP
  ports:
    - port: 80
      targetPort: 80
#      nodePort: 30001
      protocol: TCP

该yaml的启动探针配置检测一个不存在服务的端口来检测启动探针的效果,执行yaml看看效果

kubectl create -f deployment-nginx.yaml 

kubectl get pod

可以看到因为配置的启动探针探测失败的原因pod一直处于重启的状态,而且也是未准备的状态,未准备的状态,集群是不会调度流量到这些pod上面的

kubectl get svc

curl 10.98.231.214

也可以通过查看pod的详细信息查看状态

 

 4.2就绪探针

编辑yaml文件

vi deployment-nginx.yaml 

apiVersion: apps/v1
kind: Deployment
metadata: 
  labels:
    app: nginx
  name: nginx
  namespace: default
spec:
  replicas: 5
  progressDeadlineSeconds: 600
  minReadySeconds: 10
  strategy:
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 0
    type: RollingUpdate
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec: 
      containers:
      - name: nginx
        image: nginx:1.21
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80
        readinessProbe:
          httpGet:   #配置探测的http信息
            path: /
            port: 81
            scheme: HTTP     
          initialDelaySeconds: 2  #首次发出探测请求的延迟时间,即多少秒后才开始探测
          periodSeconds: 5    #探测频率,默认为10秒
          timeoutSeconds: 5   #探测超时时间,默认为1秒
          successThreshold: 1  #处于失败状态时,需要探测成功多少次才算成功
          failureThreshold: 5   #处于成功状态时,需要探测失败多少次才算失败,默认为3

该yaml的就绪探针配置检测一个不存在服务的端口来检测就绪探针的效果,执行yaml看看效果

 kubectl get pod

 可以看到因为配置的就绪探针探测失败的原因,虽然pod状态是running,但是pod都是未准备的,接下来访问一下pod服务看看

kubectl get svc

curl 10.100.21.201

可以看到是拒绝连接的,所以因为就绪探针的原因,是没有流量调度 到这些pod上的 

也可以通过describe命令去查看pod的详细信息

 4.3存活探针

编辑yaml文件

vi deployment-nginx.yaml 

apiVersion: apps/v1
kind: Deployment
metadata: 
  labels:
    app: nginx
  name: nginx
  namespace: default
spec:
  replicas: 5
  progressDeadlineSeconds: 600
  minReadySeconds: 10
  strategy:
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 0
    type: RollingUpdate
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec: 
      containers:
      - name: nginx
        image: nginx:1.21
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80
        livenessProbe:
          httpGet:
            path: /
            port: 81
            scheme: HTTP
          initialDelaySeconds: 30  #首次发出探测请求的延迟时间,即多少秒后才开始探测,可以根据自己的项目适当调大存活探针的首次探测时间,以免服务需要启动得时间较长,导致服务还没启动就被判定检测失败
          periodSeconds: 3          #探测频率,默认为10秒
          successThreshold: 1    #处于失败状态时,需要探测成功多少次才算成功
          timeoutSeconds: 2        #探测超时时间,默认为1秒
          failureThreshold: 3    #处于成功状态时,需要探测失败多少次才算失败,默认为3
---
apiVersion: v1
kind: Service
metadata:
  name: nginx
  namespace: default
spec:
  selector:
    app: nginx
#  type: NodePort
  type: ClusterIP 
  clusterIP:
#  sessionAffinity: ClientIP
  ports:
    - port: 80
      targetPort: 80
#      nodePort: 30001
      protocol: TCP

该yaml的存活探针配置检测一个不存在服务的端口来检测存活探针的效果,执行yaml看看效果

kubectl create -f deployment-nginx.yaml 

kubectl get pod

可以看到因为存活探针检测失败得问题pod一直在重启

 也可以通过查看pod得详细信息来看到

kubectl describe pod nginx-ffcf76b97-6xplz

 

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

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

相关文章

Prometheus+Grafana安装极简教程

目录 初始化监控主机 安装go环境 安装Prometheus 安装Grafana 初始化被监控主机 监控主机配置监控被监控主机 课后 初始化监控主机 安装go环境 下载对应的go版本,解压,设置环境变量 export GOROOT/usr/local/go export PATH$PATH:$GOROOT/bin 执…

alist与Raidrive配置开机自动启动,开机就可以拥有网盘硬盘!

目录 1. alist配置为开机自动启动服务1.1 制作一个alist启动命令行1.2 将VBS添加到开机启动项 2. Raidrive设置开机启动2.1 进入设置2.2 添加到启动项 总结 欢迎关注 『发现你走远了』 博客,持续更新中 欢迎关注 『发现你走远了』 博客,持续更新中 1. al…

大数据治理入门系列:数据质量

无论您是数据领域的专业人员,还是其他领域的非专业人士,也许都曾遇到过数据不完整、数据过时、数据不一致、数据不准确等问题。这些低质量的数据不仅没能解决最初的疑问,甚至还可能衍生出了其他问题。质量低劣的数据会影响数据分析结果&#…

代码随想录刷题第52天|LeetCode300最长递增子序列、 LeetCode674最长连续递增序列、LeetCode718最长重复子数组

1、LeetCode300最长递增子序列 题目链接:300最长递增子序列 1、dp[i]表示i之前包括i的以nums[i]结尾的最长递增子序列的长度。 2、递推公式: if (nums[i] > nums[j]) dp[i] max(dp[i], dp[j] 1); 注意这里不是要dp[i] 与 dp[j] 1进行比较&…

Rust X DatenLord l Rust China Conf 2023 倒计时!

Rust语言作为一种强调性能、安全和并发性的新的编程语言,吸引了越来越多的程序员想要尝试学习和使用Rust。达坦科技(DatenLord)旗下的开源项目Xline (用于元数据管理的分布式KV存储)就是用Rust写就的,我们也…

android remount 工作原理简介

android remount 在调试android 系统的时候是个非常有用的调试手段, 有remount 的帮助, 可以轻松的修改系统分区的某些文件,或者在系统分区添加删除文件。但有时候remount 也会因为一些verity, checkpoint ,和remount …

【python数据可视化】Matplotlib绘图练习(一)

目录 Matplotlib 🥇Summary 获取源码?私信?关注?点赞?收藏? Python数据可视化的由来主要是因为数据可视化在数据分析领域扮演了至关重要的角色。这是因为,数据可视化能够更好地向人们展示大量…

电脑老是自动更新怎么办?教你一招彻底解决

前言 这两天有粉丝留言问我:电脑老是提示自动更新,而且关也关不掉,这该怎么办? 今天就教大家如何彻底关掉电脑的系统自动更新功能,以后永远不再自动更新。 一、关闭更新服务 1. 同时按下键盘winR键,打开运…

SQL 知识你知道吗:公共表表达式(CTE)

一、概念 公共表表达式(CTE)是一种临时命名查询结果集的方式,可以在一个查询语句中多次引用。CTE在查询语句中定义,可以在查询语句中的任何位置使用,并且只在查询语句执行期间存在。CTE通常用于简化复杂的查询&#x…

1个暑假能学会多少网络安全技能?

现在可以看到很多标题都声称三个月内就可以转行网络安全领域,并且成为月入15K的网络工程师。那么,这个暑假的时间能学多少网络安全知识?是否能入门网络安全工程师呢? 答案是肯定的。 虽然网络完全知识是一门广泛的学科&#xff…

微信授权登录

网站应用微信登录是基于OAuth2.0协议标准构建的微信OAuth2.0授权登录系统。 在进行微信OAuth2.0授权登录接入之前,在微信开放平台注册开发者帐号,并拥有一个已审核通过的网站应用,并获得相应的AppID和AppSecret,申请微信登录且通过…

ConcurrentHashMap简单了解

早期ConcurrentHashMap: 通过分段锁Segment实现,将锁一段一段存储,默认会分配16个segment,当一个线程占用一把锁segment访问其中一段数据的时候,位于其它segment的数据也能被其它线程同时访问,每个segment分…

面板安全能力持续增强,新增日志审计功能,1Panel开源面板v1.3.0发布

2023年6月12日,现代化、开源的Linux服务器运维管理面板1Panel正式发布v1.3.0版本。 在这一版本中,1Panel进一步增强了安全方面的能力,包括新增SSH配置管理、域名绑定和IP授权支持,以及启用网站防盗链功能。此外,该版本…

【C#】并行编程实战:序章

前言 本文主要是基于这本书学习的: 《并行编程实战:基于C#8和.NET Core 3》,我当时买的实体书,长下面这个样子。我买了大概浏览了一下,感觉内容还行(基本都是没见过的新东西),所以打…

计算机提示由于找不到VCRUNTIME140.dll,无法继续执行代码,重新安装程序可能会解决

vcruntime140.dll文件是一个动态链接库,是Windows操作系统中非常重要的一个动态链接库文件,用于支持使用Microsoft Visual C编译器创建的应用程序的运行。当我们运行的软件是有C编译器创建的程序,就需要到系统的vcruntime140.dll,…

数学模型:Python实现微分方程

文章摘要:微分方程的Python实现。 参考书籍:数学建模算法与应用(第3版)司守奎 孙玺菁。 PS1:只涉及了具体实现并不涉及底层理论。没有给出底层理论参考书籍的原因是不想做这个方向吧。所以对我只要掌握基本模型有个概念那就好了。 PS2&#x…

年度创新企业奖!移远通信成推动AIoT融合落地关键力量

6月8日,由ASPENCORE主办的2023国际AIoT生态发展大会在深圳召开,移远通信受邀出席大会并发表演讲,同时凭借在5G、AIoT等领域的持续创新荣获“年度创新企业”奖! 5GAIoT“双引擎” 重塑物联产业 近些年,从互联网、物联网…

汽车仪表中控开发中视频相关的一些知识点

前言: 做汽车仪表/IVI中控,尤其是IVI信息娱乐部分,都要涉及到视频这个知识点,各种概念很多,首先需要明确一条主线,那就是SDTV标清电视->HDTV高清电视->UHDTV超高清电视的一个发展脉络,BT601/656是SDTV标清电视接口,BT1120则对应HDTV高清电视接口。ITU-R BT.601/6…

2022 年全国硕士研究生入学统一考试管理类专业学位联考逻辑试题

2022 年全国硕士研究生入学统一考试管理类专业学位联考逻辑试题 一. 逻辑推理:第 26~55 小题,每小题 2 分,共 60 分。下列每题给出的 A、B、C、D、E 五个选项中,只有一项是符合试题要求的。 26.百年党史充分揭示了中国共产党为什么…

Qemu 逃逸基础知识

QEMU 与 KVM 架构 QEMU 与 KVM 的完整架构如下图所示。 QEMU 与 KVM 架构整体上分为 3 个部分: VMX root 模式的应用层,即图中左上部分,属于 qemu 进程。VMX root 模式的内核层,即图中下半部分,属于 kvm 驱动。VMX …