研发工程师玩转Kubernetes——启动、存活和就绪探针

这篇具有很好参考价值的文章主要介绍了研发工程师玩转Kubernetes——启动、存活和就绪探针。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


启动(Startup Probe)、存活(Liveness Probe)和就绪探针(Readiness Probe)有其不同的用途和优先级。

优先级和用途

启动探针(Startup Probe)用于Pod内程序告诉kubernetes,其准备工作已经做好。这些准备工作主要是指业务运行前的前置条件,比如资源文件下载完毕,内置数据库文件下载完毕等。这步完成后存活和就绪探针才会开始工作。
存活和就绪探针之间没有关系,所以它们没有优先级区别,即在启动探针确定Success后,它们两个同时开始检测。有任何一个失败就会执行其对应的失败处理动作。
存活探针用于表示程序是否活着。如果被认定不存活,会依据设置要么重启容器或让Pod调度失败。
就绪探针表示程序是否可以提供服务。一般Pod内程序是通过Service对外提供服务,如果就绪探针失败,Service会将该Pod摘除,这样流量就不会打到这个不能工作的Pod上;如果就绪探针成功了,该Pod又会被加进Service。
似乎有存活和就绪探针就够了,为什么还要启动探针呢?因为一些准备工作我们并不知道其需要花多长时间,比如可能网络带宽问题导致资源文件下载很慢。这个时候设置存活或者就绪探针就可能不准确,或者导致其不灵敏。所以设置启动探针可以提升其他探针的灵敏度。

启动和存活探针

# startup_liveness.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: startup-liveness-deployment
spec:
  selector:
    matchLabels:
      app: startup-liveness
  template:
    metadata:
      labels:
        app: startup-liveness
    spec:
      containers:
      - name: startup-liveness-container
        image: busybox
        command: ["/bin/sh", "-c", "sleep 6; touch /tempdir/ready; sleep 3;touch /tempdir/keepalive; while true; do sleep 5;  done"]
        volumeMounts:
        - name:  probe-volume
          mountPath:  /tempdir
        startupProbe:
          exec:
            command:
            - cat
            - /tempdir/ready
          initialDelaySeconds: 3
          failureThreshold: 6
          periodSeconds: 1
          successThreshold: 1
        livenessProbe:
          exec:
            command:
            - cat
            - /tempdir/keepalive
          failureThreshold: 6
          periodSeconds: 1
          successThreshold: 1
      volumes:
      - name: probe-volume
        emptyDir: 
          medium: Memory
          sizeLimit: 1Gi

这段清单中的逻辑如下图
研发工程师玩转Kubernetes——启动、存活和就绪探针,kubernetes,kubernetes,容器,云原生
我们使用下面指令查看中间发生的事件

kubectl describe pod 
Events:
  Type     Reason     Age               From               Message
  ----     ------     ----              ----               -------
  Normal   Scheduled  15s               default-scheduler  Successfully assigned default/startup-liveness-deployment-66f76576ff-9pnmj to ubuntub
  Normal   Pulling    15s               kubelet            Pulling image "busybox"
  Normal   Pulled     13s               kubelet            Successfully pulled image "busybox" in 2.603715682s (2.603722383s including waiting)
  Normal   Created    13s               kubelet            Created container startup-liveness-container
  Normal   Started    13s               kubelet            Started container startup-liveness-container
  Warning  Unhealthy  7s (x4 over 10s)  kubelet            Startup probe failed: cat: can't open '/tempdir/ready': No such file or directory
  Warning  Unhealthy  4s (x2 over 5s)   kubelet            Liveness probe failed: cat: can't open '/tempdir/keepalive': No such file or directory

可以看到Startup Probe在第4次检测时,/tempdir/ready文件还没创建。但是第5次时,就检测到了它,于是进入Liveness Probe检测状态。这从最后两个行为经历的时间差10s-5s=5s可以印证Startup Probe执行的次数大概在4~5次之间(因为检测周期periodSeconds是1秒)。
Liveness Probe在第2次检测时,/tempdir/keepalive还没创建。到第三次检测时,这个标志文件就创建了。于是整个Pod进入了Running状态。

启动和就绪探针

# startup_readiness.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: startup-readiness-deployment
spec:
  selector:
    matchLabels:
      app: startup-readiness
  template:
    metadata:
      labels:
        app: startup-readiness
    spec:
      containers:
      - name: startup-readiness-container
        image: busybox
        command: ["/bin/sh", "-c", "sleep 6; touch /tempdir/ready; sleep 3;touch /tempdir/readiness; while true; do sleep 5; done"]
        volumeMounts:
        - name:  probe-volume
          mountPath:  /tempdir
        startupProbe:
          exec:
            command:
            - cat
            - /tempdir/ready
          initialDelaySeconds: 3
          failureThreshold: 6
          periodSeconds: 1
          successThreshold: 1
        readinessProbe:
          exec:
            command:
            - cat
            - /tempdir/readiness
          failureThreshold: 6
          periodSeconds: 1
          successThreshold: 1
      volumes:
      - name: probe-volume
        emptyDir: 
          medium: Memory
          sizeLimit: 1Gi

和上一节流程类似
研发工程师玩转Kubernetes——启动、存活和就绪探针,kubernetes,kubernetes,容器,云原生
其执行事件如下:

Events:
  Type     Reason     Age              From               Message
  ----     ------     ----             ----               -------
  Normal   Scheduled  13s              default-scheduler  Successfully assigned default/startup-readiness-deployment-64cbcc9659-k7m5v to ubuntuc
  Normal   Pulling    13s              kubelet            Pulling image "busybox"
  Normal   Pulled     11s              kubelet            Successfully pulled image "busybox" in 2.10831058s (2.10831728s including waiting)
  Normal   Created    11s              kubelet            Created container startup-readiness-container
  Normal   Started    11s              kubelet            Started container startup-readiness-container
  Warning  Unhealthy  5s (x4 over 8s)  kubelet            Startup probe failed: cat: can't open '/tempdir/ready': No such file or directory
  Warning  Unhealthy  2s (x3 over 4s)  kubelet            Readiness probe failed: cat: can't open '/tempdir/readiness': No such file or directory

这次readiness检测到第4次时才认定状态为success。
上述两个实验可以证明:启动探针(Startup Probe)检测状态是success后,存活(Liveness Probe)和就绪探针(Readiness Probe)才开始检测。
研发工程师玩转Kubernetes——启动、存活和就绪探针,kubernetes,kubernetes,容器,云原生

存活和就绪探针

# liveness_readiness.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: liveness-readiness-deployment
spec:
  selector:
    matchLabels:
      app: liveness-readiness
  template:
    metadata:
      labels:
        app: liveness-readiness
    spec:
      containers:
      - name: liveness-readiness-container
        image: busybox
        command: ["/bin/sh", "-c", "sleep 3; touch /tempdir/keepalive; sleep 3;touch /tempdir/readiness; while true; do sleep 5; done"]
        volumeMounts:
        - name:  probe-volume
          mountPath:  /tempdir
        livenessProbe:
          exec:
            command:
            - cat
            - /tempdir/keepalive
          initialDelaySeconds: 3
          failureThreshold: 6
          periodSeconds: 1
          successThreshold: 1
        readinessProbe:
          exec:
            command:
            - cat
            - /tempdir/readiness
          failureThreshold: 6
          periodSeconds: 1
          successThreshold: 1
      volumes:
      - name: probe-volume
        emptyDir: 
          medium: Memory
          sizeLimit: 1Gi

通过Pod的Event可以看到,Liveness和Readiness Probe的生命长度一致(如下图都是6秒)。

Events:
  Type     Reason     Age              From               Message
  ----     ------     ----             ----               -------
  Normal   Scheduled  10s              default-scheduler  Successfully assigned default/liveness-readiness-deployment-f6db88747-znxsm to ubuntub
  Normal   Pulling    10s              kubelet            Pulling image "busybox"
  Normal   Pulled     8s               kubelet            Successfully pulled image "busybox" in 2.092699902s (2.092706902s including waiting)
  Normal   Created    8s               kubelet            Created container liveness-readiness-container
  Normal   Started    8s               kubelet            Started container liveness-readiness-container
  Warning  Unhealthy  5s (x2 over 6s)  kubelet            Liveness probe failed: cat: can't open '/tempdir/keepalive': No such file or directory
  Warning  Unhealthy  4s (x4 over 6s)  kubelet            Readiness probe failed: cat: can't open '/tempdir/readiness': No such file or directory

探针流程

研发工程师玩转Kubernetes——启动、存活和就绪探针,kubernetes,kubernetes,容器,云原生文章来源地址https://www.toymoban.com/news/detail-648111.html

到了这里,关于研发工程师玩转Kubernetes——启动、存活和就绪探针的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 研发工程师玩转Kubernetes——使用Node特性定向调度Pod

    在《研发工程师玩转Kubernetes——使用污点(taint)驱逐Pod》中我们提到亲和性(affinity)中的requiredDuringSchedulingIgnoredDuringExecution,它可以定向调度Pod。本节我们将使用相关特性完成定向调度的介绍。 我们先模拟Pod被部署在Master Node上的场景。这个时候我们可以使用nodeSelector对

    2024年02月08日
    浏览(23)
  • 【个人介绍】后端研发工程师

    1. 熟悉JAVA基础、多线程、并发编程、设计模式、数据结构与算法、JVM原理与调优等。 2. 熟悉SpringBoot、SpringCloud、SpringCloud Alibaba、JPA、MyBatis等框架。 3. 熟悉数据库设计、MySQL原理与索引优化、Redis、Memecache、MongoDB等。 4. 熟悉Nginx、主从集群、TCP/IP、NIO编程、Reactor模式、Nett

    2023年04月09日
    浏览(30)
  • 一些研发工程师在Springboot注意点

    1. 正确设计代码目录结构 虽然您有很大的自由度,但有一些基本规则值得遵循来设计您的源代码结构。 避免使用默认包。确保所有内容(包括入口点)都在命名良好的包中,这样您就可以避免与组装和组件扫描相关的意外情况; 将 Application.java(应用程序的入口类)放在顶

    2024年02月08日
    浏览(22)
  • 技术精英求职必备:大数据研发工程师简历模板

    原则 撰写针对大数据研发工程师职位的简历时,关键在于准确展现您在 大数据处理、分析和应用开发方面的综合技能、项目经验和技术成就 。简历应作为您展示跨多个技术栈的 编程能力、构建完整大数据解决方案和有效解决大数据技术问题 的能力的窗口。确保每一项经历

    2024年02月21日
    浏览(31)
  • 《研发效能(DevOps)工程师》课程简介(二)丨IDCF

    为贯彻落实《关于深化人才发展体制机制改革的意见》,推动实施人才强国战略,促进专业技术人员提升职业素养、补充新知识新技能,实现人力资源深度开发,推动经济社会全面发展,根据《中华人民共和国劳动法》有关规定,工业和信息化部教育与考试中心联合有关部门

    2024年02月07日
    浏览(30)
  • 【社招】【中国电信-天翼云】诚聘高级FPGA研发工程师

    基础架构部门介绍: 天翼云是中国电信旗下云计算品牌,致力于成为领先的云计算服务提供商。 基础架构部作为天翼云的核心部门,负责构建天翼云的整个物理基础设施。打造了包括紫金DPU、物理服务器、物理网络、RDMA网络、操作系统、虚拟化、IDC在内的核心底座产品。基

    2024年02月03日
    浏览(28)
  • 技术精英求职必备:AIGC(图像生成)研发工程师简历指南

    核心原则 撰写针对AIGC(图像生成)研发工程师职位的简历时,关键在于准确展现您在深度学习、计算机视觉和图像生成算法方面的综合技能、项目经验和技术成就。简历应作为您展示跨多个技术栈的编程能力、构建完整的图像生成解决方案和有效解决AIGC技术问题的能力的窗口

    2024年03月25日
    浏览(36)
  • 博冠光电8K事业部招聘研发工程师及产品经理

    一、高级结构工程师 工作职责:1、负责公司产品的机械结构设计、模具开发和量产导入;2、负责机械结构方向的技术预研,包括技术专题研究,技术难题攻关; 3、负责结构组的技术管理工作,包括带新人,材料选型,设计审核;4、领导安排的其他工作。任职要求:1.、本

    2024年02月12日
    浏览(18)
  • 阿里云研发工程师刘睿:阿里云消息生态及最佳实践

    2022 年 9 月 24 日,阿里云用户组(AUG)第 12 期活动在厦门举办。活动现场,阿里云消息中间件研发工程师刘睿,向参会企业代表分享了阿里云消息生态及最佳实践。本文根据演讲内容整理而成。 众所周知,消息中间件作为现代软件体系中的底层基础软件,和数据库一样广泛

    2023年04月09日
    浏览(17)
  • 突破职场竞争,引领未来发展:考取《研发效能(DevOps)工程师职业技术认证》

    就业形势堪忧,什么最有保障?考个“国家级”证书傍身吧! 工信部教考中心作为中国领先的行业技能认证机构,其颁发的认证证书不仅代表了个人在信息技术领域的专业能力,更可以录入工业和信息化技术技能人才数据库,这是一个重要的信息资源平台,它可以帮助企业和

    2024年02月05日
    浏览(22)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包