k8s 启动探针生存探针&就绪探针

2023-11-15

k8s 启动探针&存活探针&就绪探针

因为k8s中采用大量的异步机制、以及多种对象关系设计上的解耦,当应用实例数 增加/删除、或者应用版本发生变化触发滚动升级时,系统并不能保证应用相关的service、ingress配置总是及时能完成刷新。

kubelet 使用启动探针,来检测应用是否已经启动。如果启动就可以进行后续的探测检查。慢容器一定指定启动探针。一直在等待启动 ,启动探针 成功以后就不用了,剩下存活探针和就绪探针持续运行 。

启动探针 startupProbe: 判断容器内的应用程序是否已启动,k8s v1.16加入

//未设置:默认状态为成功
//设置: 禁用所有其他探测,直到它成功为止。如果启动探测失败,kubelet将杀死容器,容器将服从其重启策略

就绪探针 readinessProbe: 保证应用不会不可用的提供给用户

//未设置:默认此容器就绪
//设置: 必须通过检测后,标记为就绪

存活探针 livenessProbe: 确保应用容器的正常存活

//未设置:容器只要有前台进程即存活
//设置,通过手段(tcp.http.exec)探测容器内部服务是否异常

存活,就绪探针的区别

面试时经常被问到,存活探针和就绪探针有什么区别?
存活探针检查失败,会重启容器
就绪探针检查失败,会将Pod移出服务,确保服务中的Pod都是可用的

探针处理程序和结果

探针是由kubelet对容器执行的定期诊断,要执行诊断,kubelet调用由容器实现的Handler,有三种类型的处理程序

  • ExecAction: 在容器内部执行指定命令,如果命令退出时返回码为0,则认为诊断成功
  • TCPSocketAction:对指定端口上的容器的Ip地址进行TCP检查,如果端口打开,则诊断被认为是成功的
  • HTTPGetAction: 对指定的端口和路径上的容器的Ip地址执行Http Get请求,如果响应的状态码大于等于200且小于400,则认为是成功的

每次探测都将获得以下三种结果之一:

  • 成功: 容器通过了诊断
  • 失败: 容器未通过诊断
  • 位置: 诊断失败,因此不会采取任何行动

启动探针

apiVersion: v1
kind: Pod
metadata:
  name: post-test
spec:
  containers:
  - name: post-test
    image: nginx
    lifecycle:
      postStart:
        exec:
          command: ["/bin/sh", "-c", "mkdir -p  /app;echo test > /app/test"]
    startupProbe:
      exec:
        command:  ["/bin/sh","-c","cat /app/test"]  ## 返回不是0,那就是探测失败
      initialDelaySeconds: 20 ## 指定的这个秒以后才执行探测
      periodSeconds: 5  ## 每隔几秒来运行这个
      timeoutSeconds: 5  ##探测超时,到了超时时间探测还没返回结果说明失败
      successThreshold: 1 ## 成功阈值,连续几次成才算成功
      failureThreshold: 3 ## 失败阈值,连续几次失败才算真失败

存活探针

livenessProbe: 指定容器是否正在运行,如果存活探测失败,则kubelet则会杀死容器,并且容器将会受到其重启策略的影响,如果容器不提供存活探针,则默认状态为Success

livenessProbe-exec
apiVersion: v1
kind: Pod
metadata:
  name: liveness-exec-pod
  namespace: default
spec:
  containers:
  - name: liveness-exec-container
    image: harbor.hongfu.com/library/busybox:v1
    imagePullPolicy: IfNotPresent
    command: ["/bin/sh","-c","touch /tmp/live ; sleep 60; rm -rf /tmp/live; sleep
3600"]
    livenessProbe:
      exec:
        command: ["test","-e","/tmp/live"]
      initialDelaySeconds: 1
      periodSeconds: 3
livenessProbe-httpget
apiVersion: v1
kind: Pod
metadata:
  name: liveness-httpget-pod
  namespace: default
spec:
  containers:
  - name: liveness-httpget-container
    image: harbor.hongfu.com/library/myapp:v1
    imagePullPolicy: IfNotPresent
    ports:
    - name: http
      containerPort: 80
    livenessProbe:
      httpGet:
        port: 80
        path: /index.html
      initialDelaySeconds: 1
      periodSeconds: 3
      timeoutSeconds: 3
livenessProbe-tcp
apiVersion: v1
kind: Pod
metadata:
  name: probe-tcp
spec:
  containers:
  - name: nginx
    image: harbor.hongfu.com/library/myapp:v1
    livenessProbe:
      initialDelaySeconds: 5
      timeoutSeconds: 1
      tcpSocket:
        port: 80

就绪探针

readinessProbe: 指示容器是否准备好服务请求,如果就绪探测失败,端点控制器将从与pod匹配的所有service的端点中删除该Pod的Ip地址,初始延迟之前的就绪状态为Failure,如果容器不提供就绪探针,则默认状态为Success

apiVersion: v1
kind: Pod
metadata:
  name: readiness-httpget-pod
  namespace: default
  labels:
    app: myapp
spec:
  containers:
  - name: readiness-httpget-container
    image: wangyanglinux/myapp:v1
    imagePullPolicy: IfNotPresent
    readinessProbe:
      httpGet:
        port: 80
        path: /index1.html
      //1秒后开始检测
      initialDelaySeconds: 1
      //后每3秒探测一次
      periodSeconds: 3

启动、退出动作

apiVersion: v1
kind: Pod
metadata:
  name: lifecycle-demo
spec:
  containers:
  - name: lifecycle-demo-container
    image: harbor.hongfu.com/library/myapp:v1
    lifecycle:
      postStart:
        exec:
          command: ["/bin/sh", "-c", "echo Hello from the postStart handler > /usr/share/message"]
      preStop:
        exec:
          command: ["/bin/sh", "-c", "echo Hello from the poststop handler > /usr/share/message"]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

k8s 启动探针生存探针&就绪探针 的相关文章

  • ListView:防止视图回收

    我有一个使用回收视图的 ListView 我试图阻止视图被回收 所以我使用 setHasTransientState android support v4 view ViewCompatJB setHasTransientState Vie
  • 最终字段可能尚未/已经初始化[重复]

    这个问题在这里已经有答案了 可能的重复 如何处理抛出检查异常的静态最终字段初始值设定项 https stackoverflow com questions 1866770 how to handle a static final field
  • 错误“没有可用于此声明的持久卷,并且未设置存储类别”

    是需要在nodes中手动创建目录还是pv自动创建 这是我的 pv 和 pvc 文件 我看到这个错误 没有可用于此声明的持久卷 并且未设置存储类别 如何解决这个问题 kind PersistentVolume apiVersion v1 me
  • 为什么这个动作不抽象? [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我很难理解为什么一个类中的一个操作是抽象的 而另一个类中的操作不是 源代码1 编译时出错 https gyazo com cd3c
  • 为什么Java中的文件名与公共类名相同? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 在Java中 文件名应该与文件名相同public class包含在该文件中 为什么这是一个限制 它有什么目的 Java 有一个有趣的方法 如果给
  • 限制 JPQL 中的结果数量

    如何限制从数据库检索结果的数量 select e from Entity e I need only 10 results for instance 您可以尝试像这样给出 10 个要显式获取的结果 entityManager createQ
  • 如何使用 Swipe 视图实现 Android TabLayout 设计支持库

    我将使用 android TabLayout 设计支持库 但我不知道如何使用滑动视图 这是我的代码 XML
  • 如何从 Java 中“double”类型的值中删除小数值

    我正在调用一个名为 calculateStampDuty 的方法 它将返回 财产需缴纳的印花税金额 百分比计算有效 很好 并返回正确的值 15000 0 但是 我想显示该值 前端用户只是 15000 所以只想删除小数点和任何前面的值 此后
  • 欧拉项目 45

    我还不是一名熟练的程序员 但我认为这是一个有趣的问题 我想我应该尝试一下 三角形 五边形 六边形 数字由以下生成 公式 三角形 T n n n 1 2 1 3 6 10 15 五边形 P n n 3n 1 2 1 5 12 22 35 六角
  • 生产者程序中的 kafka 网络处理器错误(ArrayIndexOutOfBoundsException:18)

    我有下面的 kafka Producer Api 程序 我对 kafka 本身是新手 下面的代码从 API 之一获取数据并将消息发送到 kafka 主题 package kafka Demo import java util Propert
  • 使用java在网页中进行字符编码

    如何使用java找出网页中的字符编码类型 打开与 URL 的连接 使用URL openConnection http download oracle com javase 6 docs api java net URL html openC
  • JPA 的 Hibernate 查询提示

    我一直在尝试为所有可以通过设置的提示找到一个明确的资源Query setHint String Object JPA 中的方法调用 但我一无所获 有人知道一个好的参考吗 See 3 4 1 7 查询提示 http docs jboss or
  • 单元测试、集成测试还是设计中的问题?

    我编写了我的第一个单元测试 我认为它过于依赖其他模块 我不确定是否是因为 这是一个复杂的测试 我实际上已经编写了集成测试或 我的设计有问题 我首先要说的是 虽然我有大约 4 年的开发经验 但我从未学过 也没有人教过自动化测试 我刚刚使用 H
  • Java8 项目上的 SonarQube 给出 jacoco-Exception

    我刚刚下载了最新版本 SonarQube 4 3 然后尝试使用以下命令构建 java 8 项目 mvn clean install mvn sonar sonar 这给了我下面的例外 谷歌搜索 我的印象是这是一个早期的问题 应该已经解决 h
  • Java 中通用方法参数的 getClass()

    以下 Java 方法无法编译
  • Java给定长度的随机数

    我需要在 Java 中生成一个恰好 6 位数字的随机数 我知道我可以在随机发生器上循环 6 次 但是在标准 Java SE 中还有其他方法可以做到这一点吗 要生成 6 位数字 Use Random http download oracle
  • 线程上下文类加载器和普通类加载器的区别

    线程的上下文类加载器和普通类加载器有什么区别 也就是说 如果Thread currentThread getContextClassLoader and getClass getClassLoader 返回不同的类加载器对象 将使用哪一个
  • 动态创建 JSON 对象

    我正在尝试使用以下格式创建 JSON 对象 tableID 1 price 53 payment cash quantity 3 products ID 1 quantity 1 ID 3 quantity 2 我知道如何使用 JSONOb
  • Javac 版本 1.7 无法为目标 1.7 构建

    我试图在 Linux Mint 系统上使用 Sun Java JDK 1 7 0 17 编译 Java 代码 但遇到了这个问题 javac version target 1 7 javac 1 7 0 17 javac invalid ta
  • 检查 Java 字符串实例是否可能包含垃圾邮件数据的最简单方法

    我有一个迭代 String 实例的过程 每次迭代对 String 实例执行很少的操作 最后 String 实例被持久化 现在 我想为每次迭代添加一个检查 String 实例是否可能是垃圾邮件的检查 我只需验证 String 实例不是 成人材

随机推荐

  • 解决谷歌浏览器无法自动播放HTML文件的声音和视频问题的方法

    首先 先检测一下浏览器是否能支持自动播放 点击下方链接进行检测 https video dev github io can autoplay 本人检测的谷歌浏览器结果是 结果显示 谷歌浏览器不能支持有声自动播放视频和音频 包括内联的视频 但
  • 密码学研究重点

    密码学涵盖了认证 数字签名以及更多基本的安全功能 密码学涉及领域及其宽广 包括计算机安全 高等数学 经济学 量子物理学 民法和刑法 统计学 芯片设计 软件优化 政治 用户界面设计等 0x01 密码学重要性 密码学本身没有价值 必须作为一个系
  • tessract-ocr文本识别系统网页搭建【PHP】

    tessract ocr文本识别系统网页搭建 下面是我搭的网站 OCR文本识别系统 在安装后tesstact ocr后 我找到了一个利用php调用ocr接口的方法 在github上有这样一个项目 https github com thiag
  • 为何boss上的HR要了简历就不回复了?

    不止一个小伙伴在微信上问过我这个问题 今天就来跟大家分享一下出现这种现象的原因 并给我认为在boss上的正确打招呼方式 废话不多说 开始今天的主题分享 出现这一现象一般有以下几种原因 1 简历与岗位需求不匹配 这很好理解 其实就是别人没看上
  • K8s中的Deployment

    Deployment是kubernetes在1 2版本中引入的新概念 用于更好的解决Pod的编排问题 为此 Deployment在内部使用了ReplicaSet来实现目的 我们可以把Deployment理解为ReplicaSet的一次升 级
  • 【精华】批量修改文件夹中的文件名

    转载自 批量修改文件名 原文地址如下 http t csdn cn tGsfz 1 在所需批量修改文件名的文件夹内新建一个改 txt文件 并在新建的txt文件中输入dir gt 1 txt 2 修改新建的改 txt文件的后缀名为 bat 3
  • 虚拟机Ubuntu20.04一招解决无法连接网络问题

    虚拟机Ubuntu20 04一招解决无法连接网络问题 网上试了很多方法都没解决 最后一招解决 简单的网上一堆教程自己找下 此教程适合解决不了的同学 第一步 先关闭虚拟机的ubuntu系统 然后虚拟机 gt 设置 gt 网络适配器 选择NAT
  • 泛型是实体类的集合,根据某一字段排序

    举例 List
  • IDEA将web项目打包成war包

    目录 通用的方式打包 maven方式打包 eclipse版本 https blog csdn net weixin 45859844 article details 119965820 如果要到服务器部署项目 可能需要将项目打成war包 放
  • 程序员必备的思维能力:结构化思维

    在日常工作中 我们时常会碰到这样的情况 有的人讲一件事情的时候逻辑非常混乱 说了很多事情的罗列 却说不到重点 有的人写代码 本身的业务逻辑并没有多复杂 但呈现出的代码却像一堆线团 混乱不堪 无法理解 这些都是典型的缺少结构化思维的表现 导致
  • 挖矿病毒解决

    1 进程 cpu 100 watchdog 2 解决 tmp netstat 矿池 鱼池 sup 进程 文件主程序 crontab l 计划任务 分析脚本 3 如何进来的 web日志 log4j 命令 漏洞 docker yam fastj
  • Mathematica 有关向量与矩阵的函数

    下面是Mathematica中常用的关于向量和矩阵的函数
  • MySQL添加用户、删除用户、授权及撤销权限

    一 创建用户 mysql gt insert into mysql user Host User Password values localhost test password 1234 这样就创建了一个名为 test 密码为 1234 的
  • JAVA并发-Monitor简介

    什么是Monitor 1 Monitor是一种用来实现同步的工具 2 与每个java对象相关联 即每个java对象都有一个Monitor与之对应 3 Monitor是实现Sychronized 内置锁 的基础 Monitor的基本结构是什么
  • 十问十答

    凯云科技 今年六月 我们迎来了异常炎热的夏季 炎炎烈日也抵挡不了我们前进的步伐 上海 北京都留下了凯云的身影 两场展会 一场论坛 我们也得到了来自客户的高度认可 对此 小编特意整理了关于核心软件ETest的十问十答 为还心存疑惑的小伙伴们答
  • idea配置两个git源地址步骤并合并代码

    最近做项目迁移 把原来的gitlab上的代码迁移到了另一个gitlab仓库汇总 更换了git源地址 这样需要把原来项目的代码合并到新的gitlab仓库中 添加git源地址
  • Oracle数据库表的约束

    Oracle数据库约束类型主要有以下几个 primary key 主键约束 foreign key 外键约束 check 检查约束 unique 唯一约束 not null 非空约束 alter table table name add c
  • TypeScript实现八大排序与搜索算法

    前言 我们在页面上渲染数据时 通常会根据特定规则来对数据进行一个排序 然后再将其渲染到页面展示给用户 那么对数据进行排序有很多种方式 哪一种效率高 哪一种稳定性好 那一种占用内存小 本文将详解经典的八大排序算法以及三种搜索算法 并用Type
  • 【排错日记】PageHelper插件的默认分页参数

    现象 没有写如下代码 执行的结果却被分页显示了 PageHelper startPage listParam getPageNum listParam getPageSize 源码分析 调用方法判断是否需要进行分页 如果不需要 直接返回结果
  • k8s 启动探针生存探针&就绪探针

    目录 k8s 启动探针 存活探针 就绪探针 存活 就绪探针的区别 探针处理程序和结果 启动探针 存活探针 livenessProbe exec livenessProbe httpget livenessProbe tcp 就绪探针 k8s