Kubernetes之探针probe

news2024/10/6 14:33:21

deployment只保证pod的状态为running。如果pod状态是running,但是里面丢失了文件,导致用户不能访问数据,则deployment是不管用的,此时就需要probe来检测pod是否正常工作。
probe是定义在容器里的,可以理解为容器里加的一个装置,来探测容器是不是正常工作,分为liveness probe和readiness probe。

liveness probe

liveness探测到某个pod运行有问题的话,就会通过重启pod来解决问题,重启即为把旧的pod删除,然后创建出来一个新的同名的pod。

command探测方式

该方式就是,在容器内部执行一条命令,如果这个命令的返回值为0,即命令正确执行了,则认为容器是正常的,如果返回值非0,则认为容器出现了问题,然后通过重启来解决问题。

  • 创建liveness1.yaml文件并修改,修改后内容如下
apiVersion: v1
kind: Pod
metadata:
  labels:
    run: liveness1
  name: liveness1
spec:
  terminationGracePeriodSeconds: 5
  containers:
  - image: busybox
    imagePullPolicy: IfNotPresent
    name: liveness1
    args:
    - /bin/sh
    - -c
    - touch /tmp/healthy;sleep 20;rm -rf /tmp/healthy;sleep 1000
    livenessProbe:
      exec:
        command:
        - cat
        - /tmp/healthy
      initialDelaySeconds: 5
      periodSeconds: 5
      successThreshold: 1
      failureThreshold: 3
      timeoutSeconds: 10

pod启动后,会创建/tmp/healthy,20秒后删除它,然后等待1000秒之后终止。
定义了livenessProbe,探测/tmp/healthy是否存在。如果该文件不存在,命令执行失败,返回值为零,则认为容器出问题了。

参数:
initialDelaySeconds:pod启动多少秒内不探测
periodSeconds:探测间隔时间
successThreshold:探测失败后,最少连续探测多少次才被认定成功
failureThreshold:探测失败后连续探测次数。
设置了terminationGracePeriodSeconds为5秒,默认30秒删除等待时间太长不利于观察。

  • 创建pod并查看pod的运行情况
kubectl apply -f liveness1.yaml
kubectl get pod
kubectl exec liveness1 -- ls /tmp/

在这里插入图片描述

pod创建后,可以看到文件夹,20s后看不到文件夹,探测三次后,pod在40s后自动重启,以此类推。

httpGet探测方式

该方式指的是HTTP协议的数据包能否通过指定端口访问到指定文件,如果能访问到,则认为容器是正常的,如果访问不到,则认为pod是不正常的。

  • 创建liveness2.yaml文件,内容如下
apiVersion: v1
kind: Pod
metadata:
  labels:
    run: liveness2
  name: liveness2
spec:
  terminationGracePeriodSeconds: 5
  containers:
  - image: nginx
    imagePullPolicy: IfNotPresent
    name: liveness2
    livenessProbe:
      successThreshold: 1
      failureThreshold: 3
      initialDelaySeconds: 5
      periodSeconds: 5
      httpGet:
        path: /index.html
        port: 80
        scheme: HTTP
  • 创建pod,并查看状态
kubectl apply -f liveness2.yaml
kubectl get pod
kubectl exec liveness2 -- ls /usr/share/nginx/html
# 删除文件进行测试
kubectl exec liveness2 -- rm /usr/share/nginx/html/index.html
kubectl get pod
kubectl exec liveness2 -- ls /usr/share/nginx/html

在这里插入图片描述
删除文件后,探测不到文件,pod重启,重启后,该文件存在。

tcpSocket探测方式

  • 创建liveness3.yaml文件,内容如下
apiVersion: v1
kind: Pod
metadata:
  labels:
    run: liveness3
  name: liveness3
spec:
  terminationGracePeriodSeconds: 5
  containers:
  - image: nginx
    imagePullPolicy: IfNotPresent
    name: liveness3
    livenessProbe:
      successThreshold: 1
      failureThreshold: 3
      initialDelaySeconds: 5
      periodSeconds: 5
      tcpSocket:
        port: 808
  • 创建pod,并查看状态
kubectl apply -f liveness3.yaml
kubectl get pod

在这里插入图片描述
nginx默认使用的80端口,而我们探测是808,探测失败后,连续探测3次失败(15S)后重新启动pod,+5s删除时间,20秒后重启。

readiness probe

readiness探测和liveness探测类似,只是处理方式不一样。readiness探测到pod有问题之后并不会重启,只是service接收到请求后不再转发到此pod。

  • 创建三个具有相同标签run=app的pod
apiVersion: v1
kind: Pod
metadata:
  labels:
    run: app
  name: pod1
spec:
  containers:
  - name: c1
    image: nginx
    imagePullPolicy: IfNotPresent
    lifecycle:
      postStart:
        exec:
          command: ["/bin/bash","-c","touch /tmp/healthy"]
    readinessProbe:
      exec:
        command:
        - cat
        - /tmp/healthy
  • 创建pod
kubectl apply -f readiness1.yaml
sed 's/pod1/pod2/' readiness1.yaml | kubectl apply -f -
sed 's/pod1/pod3/' readiness1.yaml | kubectl apply -f -
kubectl get pod --show-labels

在这里插入图片描述

  • 修改每个pod默认页面
kubectl exec -ti pod1 -- bash
echo 111 > /usr/share/nginx/html/index.html
kubectl exec -ti pod2 -- bash
echo 222 > /usr/share/nginx/html/index.html
kubectl exec -ti pod3 -- bash
echo 333 > /usr/share/nginx/html/index.html

在这里插入图片描述

  • 创建一个服务,并查看服务,过去IP
kubectl expose --name=readiness0 pod pod1 --port=80
kubectl get service

在这里插入图片描述

  • 访问服务,由于三个pod标签相同,请求被负载均衡到三个pod。
curl 10.245.249.86

在这里插入图片描述

  • 删除readiness3的测试文件,探测失败后pod3状态不再为ready
kubectl exec -it pod3 -- rm /tmp/healthy
kubectl exec -it pod3 -- ls /tmp
kubectl get pod
# 再次访问服务,已不再把请求转发给pod3了
curl 10.245.249.86

在这里插入图片描述
pod3状态是不健康的
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

python基于vue品牌首饰售卖平台

可定制框架:ssm/Springboot/vue/python/PHP/小程序/安卓均可开发目录 开发语言:Python python框架:django/flask 软件版本:python 数据库:mysql 数据库工具:Navicat11 开发软件:PyCharmscode 项目介…

每日学术速递2.22

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.CV 1.PriSTI: A Conditional Diffusion Framework for Spatiotemporal Imputation 标题:PriSTI:时空插补的条件扩散框架 作者:Mingzhe Liu, Han Huan…

mysql学习(复习)总结 - 索引机制及分类

mysql索引机制及分类1、索引简介2、索引机制2.1 红黑树(平衡二叉树)2.2 哈希2.3 平衡多路查找树(B-Tree)2.4 Btree2.5 不同数据结构的索引对比3、索引分类3.2 存储分类-聚簇、二级(辅助)索引3.2.1 聚簇(集)索引3.2.1.1 定义3.2.1.2 聚集索引的适用情形3.…

计算机网络(五):三次握手和四次挥手,TCP,UDP,TIME-WAIT,CLOSE-WAIT,拥塞避免,

文章目录零. TCP和UDP的区别以及TCP详解TCP是如何保证可靠性的TCP超时重传的原理TCP最大连接数限制TCP流量控制和拥塞控制流量控制拥塞控制TCP粘包问题一、三次握手和四次挥手二、为什么要进行三次握手?两次握手可以吗?三、为什么要进行四次挥手&#xf…

23.2.23 22湖北省赛 B

好久没打卡了, 随便找的个水题写 这题是简单难度的 ab1 所以可以找到固定规律, 通过手动模拟可以发现 假设两种水叫做a水和b水 先倒入a水 1:0 倒入b水 1:1 此时水杯为 倒出一半的混合物, 因为ab水互溶, 比例不变 再加入a水或者b水将容器填满 比例现在变为 3:1 混合之后再…

一文让你了解Docker的前世今生

Docker概述 Docker为什么会出现? 我们在开发一款产品的过程中一定是需要至少两套环境的:开发和生产。现在更多的公司都是在使用开发、测试、生产三套环境,我们对不同环境的配置和打包都是非常繁琐和复杂的,而且重复度很高&#…

代码随想录 || 回溯算法93 78 90

Day2493.复原IP地址力扣题目链接给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。有效的 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 . 分隔。例如&#…

高级信息系统项目管理(高项 软考)原创论文——成本管理(2)

1、如果您想了解如何高分通过高级信息系统项目管理师(高项)你可以点击链接: 高级信息系统项目管理师(高项)高分通过经验分享_高项经验 2、如果您想了解更多的高级信息系统项目管理(高项 软考)原创论文,您可以点击链接:

Apache Hadoop生态部署-zookeeper分布式安装

目录 查看服务架构图-服务分布、版本信息 一:安装前准备 1:zookeeper安装包选择--官网下载 2:zookeeper3.5.7安装包--百度网盘 二:安装与常用配置 2.1:下载解压zk安装包 2.2:配置环境变量 2.3&#x…

Firebase常用功能和官方Demo简介

一、Firebase简介Firebase刚开始是一家实时后端数据库创业公司,它能帮助开发者很快的写出Web端和移动端的应用。自2014年10月Google收购Firebase以来,用户可以在更方便地使用Firebase的同时,结合Google的云服务。现在的Firebase算是谷歌旗下的…

17.1 Display system tasks

系统任务的显示组分为三类:显示和写入任务、选通监视任务和连续监视任务。17.1.1 The display and write tasks $display和$write系统任务的语法如语法17-1所示。 display_tasks ::display_task_name [ ( list_of_arguments ) ] ; display_task_name ::$display | …

AI技术的发展,人工智能对我们的生活有那些影响?

人工智能(Artificial Intelligence),英文缩写为AI。它是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。 人工智能是计算机科学的一个分支,它企图了解智能的实质,并生产出一…

使用spring boot自带log

spring boot starter 版本2.7.8 这个版本自带了slf4j-api 里面包含了logback-classic logback其他包 可以直接使用slf4j 但是配置的日志输出到文件是不能正常生效的 官网说明: Spring Boot Reference Documentation springboot 所有内部日志都使用 common loggin…

替代启攀微8按键触控八通道触摸芯片-GTC08L

能完美替代启攀微8按键触控八通道电触摸芯片-GTC08L芯片是一款非常适用于音响上超稳定超抗干扰低功耗八通道电容式触摸IC;可通过触摸实现各种逻辑功能控制;操作简单、方便实用;电压范围宽,可在2.7V~5.5V(单…

JavaWeb--Mybatis练习

Mybatis练习Mybatis练习1 配置文件实现CRUD1.1 环境准备1.2 查询所有数据1.2.1 编写接口方法1.2.2 编写SQL语句1.2.3 编写测试方法1.2.4 起别名解决上述问题1.2.5 使用resultMap解决上述问题1.2.6 小结1.3 查询详情1.3.1 编写接口方法1.3.2 编写SQL语句1.3.3 编写测试方法1.3.4…

Redis学习(10)之Redis主从集群(2)

文章目录零 主从集群上篇文章参看一 CAP理论1.1 CAP概念1.2 CAP定理1.3 BASE 理论1.4 CAP 的应用二 Raft 算法2.1 Raft算法简介2.2 角色、任期及角色转变2.3 leader 选举2.3.1 follower要参加选举2.3.2 follower被要求投票2.3.3 Candidate等待响应2.3.4 选举时机2.4 数据同步2.…

stm32f407探索者开发板(二十一)——窗口看门狗

文章目录一、窗口看门狗概述1.1 看门狗框图1.2 窗口看门狗工作过程总结1.3 超时时间1.4 为什么需要窗口看门狗1.5 其他注意事项二、常用寄存器和库函数2.1 控制寄存器WWDG_ CR2.2 配置寄存器WWDG_ CFR2.3 状态寄存器WWDG_SR三、手写窗口看门狗3.1 配置过程3.2 初始化窗口看门狗…

android kotlin 协程(五) suspend与continuation

android kotlin 协程(五) suspend与continuation 通过本篇你将学会: suspendCoroutine{} suspendCancellableCoroutine{} suspend 与 continuation suspendCoroutine 第一次看到这玩意的时候肯定有点身体不适, 先不用管这个东西是什么, 目前为止 只需要知道 suspendCoro…

谈一谈你对View的认识和View的工作流程

都2023年了,不会还有人不知道什么是View吧,不会吧,不会吧。按我以往的面试经验来看,View被问到的概率不比Activity低多少哦,个人感觉View在Android中的重要性也和Activity不相上下,所以这篇文章将介绍下Vie…

【Python工具】WiFi工具

文章目录前言一、介绍二、使用步骤1.完整代码2.简单使用总结免责声明:前言 注意:此工具为自己测试,不可用作恶意使用。 考虑在windows中的wifi破解工具五花八门很多的广告程序,就自己写一个,原理比较简单&#xff0c…