对于多副本应用,当执行 Scale Up 操做时,新副本会做为 backend 被添加到 Service 的负责均衡中,与已有副本一块儿处理客户的请求。考虑到应用启动一般都须要一个准备阶段,好比加载缓存数据,链接数据库等,从容器启动到正真可以提供服务是须要一段时间的。咱们能够经过 Readiness 探测判断容器是否就绪,避免将请求发送到尚未 ready 的 backend。html
下面是示例应用的配置文件。web
重点关注 readinessProbe
部分。这里咱们使用了不一样于 exec
的另外一种探测方法 -- httpGet
。Kubernetes 对于该方法探测成功的判断条件是 http 请求的返回代码在 200-400 之间。数据库
schema
指定协议,支持 HTTP
(默认值)和 HTTPS
。
path
指定访问路径。
port
指定端口。缓存
上面配置的做用是:负载均衡
容器启动 10 秒以后开始探测。函数
若是 http://[container_ip]:8080/healthy
返回代码不是 200-400,表示容器没有就绪,不接收 Service web-svc
的请求。测试
每隔 5 秒再探测一次。code
直到返回代码为 200-400,代表容器已经就绪,而后将其加入到 web-svc
的负责均衡中,开始处理客户请求。htm
探测会继续以 5 秒的间隔执行,若是连续发生 3 次失败,容器又会从负载均衡中移除,直到下次探测成功从新加入。blog
对于 http://[container_ip]:8080/healthy
,应用则能够实现本身的判断逻辑,好比检查所依赖的数据库是否就绪,示例代码以下:
① 定义 /healthy
的处理函数。
② 链接数据库并执行测试 SQL。
③ 测试成功,正常返回,代码 200。
④ 测试失败,返回错误代码 503。
⑤ 在 8080 端口监听。
对于生产环境中重要的应用都建议配置 Health Check,保证处理客户请求的容器都是准备就绪的 Service backend。
以上是 Health Check 在 Scale Up 中的应用,下一节咱们讨论在 Rolling Update 中若是应用。
书籍:
1.《天天5分钟玩转Kubernetes》
https://item.jd.com/26225745440.html
2.《天天5分钟玩转Docker容器技术》
https://item.jd.com/16936307278.html
3.《天天5分钟玩转OpenStack》
https://item.jd.com/12086376.html