Kubernetes应用健康检查

在准备秋招之前就前辈们的简历制作,面试经验等做一总结 {在准备秋招之前就前辈们的简历制作,面试经验做一总结} 写简历的要求 1.内容与所招聘的岗位匹配。 2.措辞具体完整,真实的呈现自己胜任能力(亮化能力)。 3.模板简单,易于阅读。 4.手机号码,邮箱,性别(可写可不写),姓名(注:培训经历,籍贯,名族,身体状况, 婚姻状况,邮编,住址都不要) ,教... 阅读详情

 

目录贴:Kubernetes学习系列

  在实际生产环境中,想要使得开发的应用程序完全没有bug,在任何时候都运行正常,几乎 是不可能的任务。因此,我们需要一套管理系统,来对用户的应用程序执行周期性的健康检查和修复操作。这套管理系统必须运行在应用程序之外,这一点非常重要一一如果它是应用程序的一部分,极有可能会和应用程序一起崩溃。因此,在Kubernetes中,系统和应用程序的健康检查是由Kubelet来完成的。

1、进程级健康检查

  最简单的健康检查是进程级的健康检查,即检验容器进程是否存活。这类健康检查的监控粒 度是在Kubernetes集群中运行的单一容器。Kubelet会定期通过Docker Daemon获取所有Docker进程的运行情况,如果发现某个Docker容器未正常运行,则重新启动该容器进程。目前,进程级的健康检查都是默认启用的。

2.业务级健康检查

  在很多实际场景下,仅仅使用进程级健康检查还远远不够。有时,从Docker的角度来看,容器进程依旧在运行;但是如果从应用程序的角度来看,代码处于死锁状态,即容器永远都无法正常响应用户的业务

  为了解决以上问题,Kubernetes引人了一个在容器内执行的活性探针(liveness probe)的概念,以支持用户自己实现应用业务级的健康检查。这些检查项由Kubelet代为执行,以确保用户的应用程序正确运转,至于什么样的状态才算“正确”,则由用户自己定义。Kubernetes支持3种类型的应用健康检查动作,分别为HTTP Get、Container Exec和TCP Socket。个人感觉exec的方式还是最通用的,因为不是每个服务都有http服务,但每个服务都可以在自己内部定义健康检查的job,定期执行,然后将检查结果保存到一个特定的文件中,外部探针就不断的查看这个健康文件就OK了。

2.1 Container Exec

  Kubelet将在用户容器内执行一次命令,如果命令执行的退出码为0,则认为容器运转正常,否则认为容器运转不正常。其中执行命令的默认目录是容器文件系统的根目录/,要执行的命令在Pod配置文件中定义。每进行一次Container Exec健康检查,都会执行一次livenessprobe:exec:command段下的Shell命令。以下给出exec探针的示例:

复制代码

[root@k8s-master livenessProbe]# cat test-livenessprobe-hostpath.yaml 
apiVersion: v1
kind: Pod
metadata:
  labels:
    name: test-livenessprobe-hostpath
  name: test-livenessprobe-hostpath
spec:
  containers:
    - name: test-livenessprobe-hostpath
      image: registry:5000/back_demon:1.0
      volumeMounts:
       - name: testhost
         mountPath: /home/laizy/test/hostpath
         readOnly: false
      livenessProbe:
        exec:
          command:
          - cat
          - /home/laizy/test/hostpath/healthy
        initialDelaySeconds: 5
        periodSeconds: 5
      command:
      - /run.sh
  volumes:
  - name: testhost
    hostPath:
     path: /home/testhost

复制代码

  由yaml的配置可以看出,健康探针主要探测的是/home/laizy/test/hostpath/下是否存在healthy文件,对应的是宿主机上/home/testhost这个文件夹。若不存在则判定不健康,若存在则健康。笔者在实验的过程中发现,当在宿主机上删除这个文件的时候,大概需要40S的时间,系统才会判定pod失败,并将其删除;之后一直不断重启,且不会将pod调度到别的node上;当在宿主机上重新生成这个文件之后,大概需要四五分钟的时间,pod一直处于CrashLoopBackOff的状态,之后才正常提供服务。对于这两个时间的产生,还需要进一步的探究其原理。

2.1 HTTP Get

  Kubelet将调用容器内Web应用的web hook,如果返回的HTTP状态码在200和399之间,则认为容器运转正常,否则认为容器运转不正常。每进行一次HTTP健康检查都会访问一次指定的URL。给出httpGet的简单示例如下:

复制代码

[root@k8s-master livenessProbe]# cat test-livenessprobe.yaml
apiVersion: v1
kind: Pod
metadata:
  labels:
    name: test-livenessprobe
  name: test-livenessprobe
spec:
  containers:
    - name: test-livenessprobe
      image: registry:5000/back_demon:1.0
      livenessProbe:
        httpGet:
          path: /starott_cloud_client/test/overview-frontend
          port: 8080
        initialDelaySeconds: 15
        periodSeconds: 5
        timeoutSeconds: 1
      command:
      - /run.sh

复制代码

在容器内部kill掉jboss进程之后(我的镜像用脚本run.sh启动,kill掉业务主进程之后,还可以通过其他的程序将容器“卡住”),模拟出调用http接口返回不在200~399之间,在node的/var/log/messages下会出现如下日志,并随后将pod创建。

复制代码

Apr  6 13:22:03 k8s-node-1 kubelet: I0406 13:22:03.470882   19861 docker_manager.go:2015] pod "test-livenessprobe_default(77b73469-1a88-11e7-b3d5-fa163ebba51b)" container "test-livenessprobe" is unhealthy, it will be killed and re-created.
Apr  6 13:22:03 k8s-node-1 dockerd-current: time="2017-04-06T13:22:03.471442565+08:00" level=info msg="{Action=stop, LoginUID=4294967295, PID=19861}"
Apr  6 13:22:33 k8s-node-1 dockerd-current: time="2017-04-06T13:22:33.472842885+08:00" level=info msg="Container 77c700d8564f2d7b8b0b455563b7530f5657df9b8a0de528587c6e0fb8a28237 failed to exit within 30 seconds of signal 15 - using the force"

复制代码

2.3 TCP Socket

  理论上Kubelet将会尝试打开一个到用户容器的Socket连接。如果能够建立这条连接,则可以认为容器运转正常,否则认为容器运转不正常。

  不论哪种检查类型,一旦Kubelet发现容器运转不正常,就会重新启动该容器。容器的健康检查行为在容器配置文件的livenessprobe字段下配置。需要注意的是,livenessprobe:initialDelaySecods字段代表了一个从容器启动到执行健康检查的延迟时间,设计这个延迟时间的目的是让容器进程有时间完成必要的初始化工作。

大学JAVA方向与大数据方向如何选择? 作为一个Java前辈,我来给你说道说道。个人的建议仅供参考 ①如果你不是211.985或者好一点的一本,别选大数据 ②如果你以后不想在这些城市发展:北京、上海、深圳、广州、成都、杭州也要慎重选择,大数据岗位集中在一线及新一线城市 大数据是在Java的基础上,要想学好大数据得有Java的基础,我个人是建议你先学Java Java与大数据的关系 Java是一种语言,而大数据更像是一个方法论或者是集合。从事大数据行业,需要掌握的技能比较多,而且,java是必须要掌握的,举个简单的例子:做大数据的工作. 阅读详情

相关推荐

初学java 之 分析百钱买百鸡,并且实现java代码算法

List item

weixin_52946198的博客 482

Kubernetes健康检查与探测机制详解

这是最简单的健康检查机制,但是这种机制太不智能了,因为很多情况下,应用发生故障,并不一定进程就会退出,比如访问http服务器显示500/503等内部错误,可能是系统超载,也可能是资源不足导致,但此时httpd进程并没有异常退出,如果此时还是用默认的检查机制,那么将无法检查到这种情况。从上面的分析可知,通过Liveness探测可以实现重启容器实现自愈,而接下来要介绍的Readiness探测实现的是,在容器故障时,将容器设置为不可用,不接收Service转发的请求,注意这两个的区别。接着,每隔5秒再探测一次。

悦分享 328

[ linux驱动生涯 ] 前辈的建议

问题 1 :关于底层开发,比如系统开发和嵌入式开发,有什么比较好的博客或者网站推荐的?作者:时国怀链接:https://www.zhihu.com/question/23552615/answer/24925779学习开发(任何开发)没有捷径,也几乎不存在大神带路小弟会学的快一些的情况。我知道有人总想知道大神们在研究什么,我想说这意义不大,想起来前几天看到的一个回答:我见过吕布了,我觉得我能打过关...

Vernon Blog 382

Kubernetes那点事儿——健康检查

健康检查在K8s中以探针的形式来实现,包括3个探针,存活(Liveness)、就绪(Readiness)和启动(Startup)探针

liangpangpangyo的博客 1347

JAVA使用GDAL入门指南

如果你打开了这篇博客,那么你肯定和我当初一样的苦逼。 话不多说,分析下我学习gdal的一丢丢心得。 1.你要知道什么GDAL,它是干什么的。 gdal到底是什么呢,嘿嘿相信你已经百度过了。。。。 ** 2.Java集成gdal 2.1 下载Java版本的gdal在千万文件大军找到我们需要的文件GDAL\bin\gdal\java 一个jar包四个DLL文件,这是Java依赖GDAL的核心文件 2...

admintys的博客 1万+

土木工程专业转JAVA的经历总结

1.转行背景 本人于2017年毕业于东北大学的土木工程专业,大学不学无术,浑浑噩噩过了四年,毕业后来到中建八局钢结构工程公司,成为了真正的土狗。入职第一天,我被安排来到了佛山的一个工地,住的地方是工地周边的一个民宿,刚到民宿的时候,心里其实还是挺失落的,感觉工作的地方很没有格调。当晚项目上为表示欢迎我们,我们和工地的前辈们一起喝了酒,喝完酒回去休息的间隙,有一个入职3年的前辈和我说,想好自己喜欢什...

u012522592的博客 3196

解决Spring Boot应用在Kubernetes上健康检查接口返回OUT_OF_SERVICE的问题

通过自定义和配置探针的HTTP路径,我们成功解决了Spring Boot应用在Kubernetes上健康检查接口返回的问题。现在,健康检查接口返回正确的健康状态,并且探针路径也与公司的重定向配置保持一致。这样,我们可以确保应用在Kubernetes环境中的健康检查正常运行,同时满足公司的需求。

kingu_crimson的博客 2663

ABAP - SALV教程 01- 开篇:打开SALV的三种方式之一

显示效果如下图所示:

HeathlX的博客 1435

《Kubernetes知识篇:Kubernetes之pod健康检查机制》

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录系列文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 提示:以下是本篇文章正文内容,下面案例

东城绝神 7490

Java入门:java项目的目录结构

第一阶段:架构师筑基必备技能 我觉得,但凡是个成年人应该都清楚扎实的基本功对自己的工作帮助有多重要。从各大招聘网站的招聘要求来看,第一条都明确说明需要扎实的Java基础。因此,一般笔试以及面试的第一轮,对基础的考察是比较多的。 其实我发现有很多开发几年了,基础知识都不扎实,比如说,简单地介绍一下Java8有哪些新特性吗,或者你比较擅长的新特性有哪些?要么回答的不完整,要么就是回答的牛头不对马嘴。 配套学习文档 大厂必问并发编程: JVM深入拆解: 网络编程与高效IO: MySQL进阶: 面试必问数据

m0_56662269的博客 1952

java清除redis缓存,Java开发者必看

什么是 Spring Boot Java (面向对象编程语言)经过30多年的发展,产生了非常多的优秀框架。Spring (为解决企业应用程序开发的复杂性而创建的框架)曾是最受欢迎的Java框架之一, 但随着Node、Ruby、Groovy、PHP等脚本语言的蓬勃发展,使用Spring开发应用就显得繁琐了,因为它使用了大量的XML配置文件,配置繁琐,整合不易,开发和部署效率低下。这时急切需要一-种新的能解决这些问题的快速开发框架,于是Pivotal Software公司在2013开始了Spring Boot的

m0_57983600的博客 1802

Java做网站需要掌握哪些技术?

Java做网站需要掌握哪些技术 Java是目前主流的Web应用开发语言,想要用Java做一个网站,代码不单单是要用到Java语言还有很多相关的语言和技术,下面会从能看到的地方开始列举,需要用到的技术。 1、HTML + CSS 2、JavaScript / JQuery 3、Tomcat + JSP/Servlet + Java 4、数据库 5、缓存 ...

Tsingke 4635

Selenium初体验(基于Java)

在楼主啃了一段时间java课程之后,开始尝试Selenium这个自动化测试工具,试用一次后感觉真是非常非常非常神奇的一个东西,可以模拟用户各种对网页的操作,而我们测试人员需要做的只是把操作录制下来,或者编写代码执行一遍就可以很快看到结果,这真真给我们带来了极大的效率提升。 历经千辛万苦把环境搭好之后,终于可以开始啦~~大家千万不要放弃哦~~ 推荐 小坦克-selenium环境搭建 ,在此感谢无

远亲不如俊霖 1549

8年大厂测试经验前辈自动化测试方式策略分享

Time will tell. 有时候做自动化测试是很害怕 “完美主义” 与 “盲目主义” 的,局限于一些误区,所以一定要以测试价值为导向,不时的跳出来看一看其自动化测试的应用价值是不是进入了误区。这次,对一些不同的自动化测试方式的应用进行了策略分析,不同的自动化测试方式应用不同的场景,不管如何应用,提高效率则是最佳应用。 一、自动化测试方式 自动化测试几种方式暂按测试类型分成: 1、界面自动化测试 C/S架构(或者桌面类型)界面自动化测试:包括桌面界面测试类型,当然有windows方面的软件界面.

kami_ochin_akane的博客 514

实习收获—Java后台开发

实习上的收获前言Swagger2Zxing二维码条形码Restful ApiLombokWebSoecketQuartz还有很多知识最后 前言 这是我第一次工作的收获,其实也不多,但是从学校出来,在上班前就有过心理准备,准备什么?就是学校教给我的70%都不会用到。果然真的很多都用不上,我的专业是:计算机应用技术。其实这个专业并没有教很深入的东西,给我感觉是杂七杂八,都只是浅浅的教我一些基础,后面深...

HXHCHY的博客 1606

前辈学习C语言的四种方法,实际上不管学什么语言,都行之有效!

如果新手要学习编程,一些学长学姐都会建议从Python、PHP、Java开始学。 不过,作为工作多年的一名程序员,我还是建议你从C语言开始,为什么这么说,我相信你以后会慢慢的明白。 那么,如何学习C语言呢?下面笔者提供4种入门C语言的方法: 0、刷题 绝大多数的程序员学编程的时候,还是会开启简单粗暴的刷题模式。 刷面试对于...

CodingPs的博客 505

Java入门第一步---配置环境、安装工具(超级详细)

学到最后,还可以形成一套自己的工具库,轮子就有了,上班的时候工作效率就会高很多,能直接用的代码再也不用重新写了。需要注意我们要下载的是jdk1.8版本,Java8就是jdk的1.8版本,找到自己对应的操作系统,X86表示32位系统,X64表示64位系统,现在笔记本一般都是64位,点击下载。我也虚心得学习到了,很多前辈的知识吗,随着不断的学习积累,我们会下载各种各样的软件、工具,按照一定命名新建目录吗,避免找不到安装地址。一个是旗舰版一个是社区版,两个安装其实差不多的,只不过里边集成的东西有所不同。...

m0_57448314的博客 2948

保姆级教程:在RK3588开发板上用MPP库实现H.264硬编码(附完整代码)

本文详细介绍了在RK3588开发板上使用MPP库实现H.264硬编码的全流程,包括环境准备、MPP库编译、编码器初始化与配置、数据输入与编码流程以及高级性能优化技巧。通过实战案例和完整代码,帮助开发者充分利用RK3588的VPU硬件加速能力,提升视频编码效率和质量。

weixin_28716769的博客 414
上一篇: Kubernetes技术学习之---容器监测探针Liveness Probes
下一篇: Kubernetes资源管理
王树民
博客等级 码龄10年 912粉丝 560原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值