aspnetcore.webapi实战k8s健康探测机制 - kubernetes
1、浅析k8s两种健康检查机制
Liveness
k8s通过liveness来探测微服务的存活性,判断什么时候该重启容器实现自愈。比如访问 Web 服务器时显示 500 内部错误,可能是系统超载,也可能是资源死锁,此时 httpd 进程并没有异常退出,在这种情况下重启容器可能是最直接最有效的解决方案。
Readiness
k8s通过readiness来探测微服务的什么时候准备就绪(例如初始化时,连接数据库,加载缓存数据等等,可能需要一段时间),然后将容器加入到server的负载均衡池中,对外提供服务。
1.1、k8s默认的健康检查机制
每个容器启动时都会执行一个进程,此进程由 Dockerfile 的 CMD 或 ENTRYPOINT 指定。如果进程退出时返回码非零,则认为容器发生故障,Kubernetes 就会根据 restartPolicy 重启容器。如果不特意配置,Kubernetes 将对两种探测采取相同的默认行为。
2、通过微服务自定义两种机制
存活10分钟:如果当前时间超过服务启动时间10分钟,则探测失败,否则探测成功。Kubernetes 如果连续执行 3 次 Liveness 探测均失败,就会杀掉并重启容器。

准备就绪30秒,30秒后,如果连续 3 次 Readiness 探测均失败后,容器将被重置为不可用,不接收 service 转发的请求。

从上面可以看到,我们可以根据自身的需求来实现这两种机制,然后,提供给k8s进行探测。
3、编写k8s资源配置文件(yml)
k8s默认是根据命令进行探测的,由于我们需要与微服务结合,所以需要在yml文件中指定为http方式(备注:k8s提供了三种container probes方式:command、TCP check、HTTP Get,其他的方式希望大家下去自己实践),k8s对于http方式探测成功的判断条件是请求的返回代码在 200-400 之间。
health-checks-deployment.yml 如下:
apiVersion: apps/v1
kind: Deployment
metadata:
namespace: k8s-ecoysystem-apps
name: healthchecks-api
labels:
app: healthchecks-api
spec:
replicas:
selector:
matchLabels:
app: healthchecks-api
template:
metadata:
namespace: k8s-ecoysystem-apps
labels:
app: healthchecks-api
spec:
containers:
- name: healthchecks-api
imagePullPolicy: Always
image: justmine/healthchecksapi:v1.
ports:
- containerPort:
readinessProbe:
httpGet:
path: /api/v1/heathchecks/readiness
port:
scheme: HTTP
initialDelaySeconds:
periodSeconds:
livenessProbe:
httpGet:
path: /api/v1/heathchecks/liveness
port:
scheme: HTTP
initialDelaySeconds:
periodSeconds:
从上面可以看到,一共部署了3个pod副本,而每个pod副本里面部署一个容器,即为同一个微服务部署了3个实例进行集群。
4、在k8s集群的master机器上,创建部署对象

从上面可以看到,刚开始创建时,READY 状态为不可用,等待一段时间

现在全部可用了
5、通过dashboard查看集群概况

6、剖析k8s集群自愈(self-healing)过程



从上面可以看到,大约1分钟(dashboard统计信息有一定的延迟)左右,第一次进行 Readiness 探测并成功返回,此时准备就绪,可以对外提供服务了。在10分钟内,探测Liveness也成功返回。
继续等待一段时间,查询其中一个pod详细信息:


从上面可以看到,超过10分钟存活期后,liveness探测失败,容器被 killed and recreated。探测Readiness未成功返回时,整个容器处于不健康的状态,并不会被负载均衡请求。
此时通过dashboard查看集群概况:

继续等待一段时间:

现在,整个集群已经自愈完成了!!!
7、总结
Liveness 探测和 Readiness 探测是独立执行的,二者之间没有依赖,可以单独使用,也可以同时使用。用 Liveness 探测判断容器是否需要重启以实现自愈;用 Readiness 探测判断容器是否已经准备好对外提供服务。
如果你觉得本篇文章对您有帮助的话,感谢您的【推荐】。
如果你对 kubernets 感兴趣的话可以关注我,我会定期的在博客分享我的学习心得。
源码参考:https://github.com/justmine66/k8s.ecoysystem.apps
下一篇,我们将实践微服务中的环境变量和配置信息,如何与k8s进行结合。
aspnetcore.webapi实战k8s健康探测机制 - kubernetes的更多相关文章
- aspnetcore.webapi实践k8s健康探测机制 - kubernetes
1.浅析k8s两种健康检查机制 Liveness k8s通过liveness来探测微服务的存活性,判断什么时候该重启容器实现自愈.比如访问 Web 服务器时显示 500 内部错误,可能是系统超载,也可 ...
- Docker系列(五):.Net Core实现k8s健康探测机制
k8s通过liveness来探测微服务的存活性,判断什么时候该重启容器实现自愈.比如访问 Web 服务器时显示 500 内部错误,可能是系统超载,也可能是资源死锁,此时 httpd 进程并没有异常退出 ...
- k8s实战为aspnetcore.webapi微服务注入配置信息 - kubernetes
1.浅析k8s配置信息 Secret 以密文的形式存储数据,可以用来保存一些敏感信息,例如:OAuth tokens.私钥.密码.数据库连接.事件总线连接等. ConfigMap 以明文的形式存储数据 ...
- kubernetes实战之运行aspnetcore webapi微服务 - kubernetes
1.预备工作 unbuntu 16.04 or above docker for linux kubernetes for linux 集群环境 2.使用vs2017创建一个web api应用程序,并 ...
- kubernetes实践之运行aspnetcore webapi微服务
1.预备工作 unbuntu 16.04 and above docker kubernetes 集群 2.使用vs2017创建一个web api应用程序,并打包镜像到本地. 3.推送本地镜像到doc ...
- 02 | 健康之路 kubernetes(k8s) 实践之路 : 生产可用环境及验证
上一篇< 01 | 健康之路 kubernetes(k8s) 实践之路 : 开篇及概况 >我们介绍了我们的大体情况,也算迈出了第一步.今天我们主要介绍下我们生产可用的集群架设方案.涉及了整 ...
- k8s健康检查(七)--技术流ken
默认的健康检查 强大的自愈能力是 Kubernetes 这类容器编排引擎的一个重要特性.自愈的默认实现方式是自动重启发生故障的容器.除此之外,用户还可以利用 Liveness 和 Readiness ...
- Knative Serving 健康检查机制分析
作者| 阿里云智能事业群技术专家牛秋霖(冬岛) 导读:从头开发一个Serverless引擎并不是一件容易的事情,今天咱们就从Knative的健康检查说起.通过健康检查这一个点来看看Serverles ...
- linux运维、架构之路-K8s健康检查Health Check
一.Health Check介绍 强大的自愈能力是k8s容器编排引擎一个重要特性,自愈能力的默认实现方式为自动重启发生故障的容器,另外还可以利用Liveness和Readiness探测 ...
随机推荐
- SVN客户端和服务器端下载地址
https://sourceforge.net/projects/tortoisesvn/files/1.9.7/Application/TortoiseSVN-1.9.7.27907-x64-svn ...
- 理解Flexbox弹性盒子
http://www.w3cplus.com/css3/understanding-flexbox-everything-you-need-to-know.html参考文档 1:要开始使用Flexbo ...
- Python实现Telnet自动连接检测密码
最近在学习Python网络相关编程,这个代码实现了Telnet自动连接检测root用户密码,密码取自密码本,一个一个检测密码是否匹配,直到匹配成功,屏幕输出停止. Python内置了telnetlib ...
- testng增加失败重跑机制
注: 以下内容引自 http://www.yeetrack.com/?p=1015 testng增加失败重跑机制 Posted on 2014 年 10 月 31 日 使用Testng框架搭建自动测试 ...
- Sql函数笔记一、case when
Case具有两种格式.简单Case函数和Case搜索函数. 简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其他' END ...
- CVE-2018-8120 Microsoft Windows提权漏洞 Exp
CVE-2018-8120 Windows LPE exploit Supports both x32 and x64. Tested on: Win7 x32, Win7 x64, Win2008 ...
- Eureka的基本功能和用法
1.基础架构 eueka按逻辑上可以划分为3个模块,eureka-server,service-provider,service-consumereureka-server:服务端,提供服务注册和发现 ...
- golang从简单的即时聊天来看架构演变
前言 俗话说的好,架构从来都不是一蹴而就的,没有什么架构一开始设计就是最终版本,其中需要经过很多步骤的变化,今天我们就从一个最简单的例子来看看,究竟架构这个东西是怎么变的. 我将从一个最简单的聊天室的 ...
- 3.python词云图的生成
安装库 pip install jieba wordcloud matplotlib 准备 txt文本 字体(simhei.ttf) 词云背景图片 代码 import matplotlib.pyplo ...
- 基于Unity的AR开发初探:第一个AR应用程序
记得2014年曾经写过一个Unity3D的游戏开发初探系列,收获了很多好评和鼓励,不过自那之后再也没有用过Unity,因为没有相关的需求让我能用到.目前公司有一个App开发的需求,想要融合一下AR到A ...