每天5分钟玩转Kubernetes | Health Check在Scale Up中的应用
Posted COCOgsta
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了每天5分钟玩转Kubernetes | Health Check在Scale Up中的应用相关的知识,希望对你有一定的参考价值。
书籍来源:cloudman《每天5分钟玩转Kubernetes》
一边学习一边整理老师的课程内容及试验笔记,并与大家分享,侵权即删,谢谢支持!
对于多副本应用,当执行Scale Up操作时,新副本会作为backend被添加到Service的负载均衡中,与已有副本一起处理客户的请求。考虑到应用启动通常都需要一个准备阶段,比如加载缓存数据、连接数据库等,从容器启动到真正能够提供服务是需要一段时间的。我们可以通过Readiness探测判断容器是否就绪,避免将请求发送到还没有准备好的backend。
示例应用的配置文件如下所示。
[root@k8s-master ~]# cat healthycheck2.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: web
spec:
replicas: 3
selector:
matchLabels:
run: web
template:
metadata:
labels:
run: web
spec:
containers:
- name: web
image: httpd
ports:
- containerPort: 8080
readinessProbe:
httpGet:
scheme: HTTP
path: /healthy
port: 8080
initialDelaySeconds: 10
periodSeconds: 5
---
apiVersion: v1
kind: Service
metadata:
name: web-svc
spec:
selector:
run: web
ports:
- protocol: TCP
port: 8080
targetPort: 80
[root@k8s-master ~]#
重点关注readinessProbe部分。这里我们使用了不同于exec的另一种探测方法httpGet。Kubernetes对于该方法探测成功的判断条件是http请求的返回代码在200~400之间。
- schema指定协议,支持HTTP(默认值)和HTTPS。
- path指定访问路径。
- port指定端口。
上面配置的作用是:
(1)容器启动10秒之后开始探测。
(2)如果http://[container_ip]:8080/healthy返回代码不是200~400,表示容器没有就绪,不接收Service web-svc的请求。
(3)每隔5秒探测一次。
(4)直到返回代码为200~400,表明容器已经就绪,然后将其加入到web-svc的负载均衡中,开始处理客户请求。
(5)探测会继续以5秒的间隔执行,如果连续发生3次失败,容器又会从负载均衡中移除,直到下次探测成功重新加入。
对于http://[container_ip]:8080/healthy,应用则可以实现自己的判断逻辑,比如检查所依赖的数据库是否就绪,示例代码如下所示。
http.HandleFunc("/healthy", func(w http.ResponseWriter, r *http.Request)
healthy = True;
// Check Database
db = connect(dbIP, dbPort, dbUser, dbPassword)
if db != NULL
try
db.Query("SELECT test;")
catch (e)
err = e.message
if db == NULL || err != NULL
healthy = False
errMsg += "Database is not ready."
if healthy
w.Write([]byte("OK"))
else
// Send 503
http.Error(w, errMsg, http.StatusServiceUnavailable)
)
http.ListenAndServe("8080")
① 定义/healthy的处理函数。
② 连接数据库并执行测试SQL。
③ 测试成功,正常返回,代码200。
④ 测试失败,返回错误代码503。
⑤ 在8080端口监听。
对于生产环境中重要的应用,都建议配置Health Check,保证处理客户请求的容器都是准备就绪的Service backend。
以上是关于每天5分钟玩转Kubernetes | Health Check在Scale Up中的应用的主要内容,如果未能解决你的问题,请参考以下文章
每天5分钟玩转Kubernetes | Kubernetes Dashboard安装
每天5分钟玩转Kubernetes | Deployment
每天5分钟玩转Kubernetes | Deployment