如何配置 Health Check?- 每天5分钟玩转 Docker 容器技术(107)

如何配置 Health Check?- 每天5分钟玩转 Docker 容器技术(107)

原创 CloudMan CloudMan 2017-12-18

第107篇

如何配置 Health Check?

 

容器状态是 UP 的,应用就是健康的吗?

还真不一定!
Docker 只能从容器启动进程的返回代码判断其状态,而对于容器内部应用的运行情况基本没有了解。

执行 docker run 命令时,通常会根据 Dockerfile 中的 CMD 或 ENTRYPOINT 启动一个进程,这个进程的状态就是 docker ps STATUS 列显示容器的状态。

命令显示:

  1. 有的容器正在运行,状态为 UP

  2. 有的容器已经正常停止了,状态是 Exited (0)

  3. 有的则因发生故障停止了,退出代码为非 0,例如 Exited (137)Exited (1) 等。

即使容器状态是 UP,也不能保证应用没有问题。web server 虽然没有崩溃,但如果总是返回 HTTP 500 - Internal Server Error ,对应用来说这就是很严重的故障。

如何从应用的业务层面检查容器的状态呢? 答案是:Health Check。

Docker 支持的 Health Check 可以是任何一个单独的命令,Docker 会在容器中执行该命令,如果返回 0,容器被认为是 healthy,如果返回 1,则为 unhealthy

对于提供 HTTP 服务接口的应用,常用的 Health Check 是通过 curl 检查 HTTP 状态码,比如:

 

curl --fail http://localhost:8080/ || exit 1

 

 

如果 curl 命令检测到任何一个错误的 HTTP 状态码,则返回 1,Health Check 失败。

下面我们通过例子来演示 Health Check 在 swarm 中的应用。

 

docker service create --name my_db \
       --health-cmd "curl --fail http://localhost:8091/pools || exit 1" \
       couchbase

 

 

--health-cmd Health Check 的命令,还有几个相关的参数:

  1. --timeout 命令超时的时间,默认 30s。

  2. --interval 命令执行的间隔时间,默认 30s。

  3. --retries 命令失败重试的次数,默认为 3,如果 3 次都失败了则会将容器标记为 unhealthy。swarm 会销毁并重建 unhealthy 的副本。

通过 docker ps 可以查看到容器的状态为 healthy

下面模拟一个 unhealthy 的场景,curl 指向一个不存在的 url。

 

docker service create --name my_db \
       --health-cmd "curl --fail http://localhost:8091/non-exist || exit 1" \
       couchbase

 

 

副本被 shutdown 了,可以到 swarm-worker1 用 docker inspect 查看具体原因。

 

root@swarm-worker1:~# docker inspect my_db.1.saebvmn7aql2l2n4kgp6s1lui

 

 

容器被标记为 unhealthy,其原因是 curl 连续三次返回 404 错误。

Docker 默认只能通过容器进程的返回码判断容器的状态,Health Check 则能够从业务角度判断应用是否发生故障,是否需要重启。

Health Check 就讨论到这里,下一节我们学习如何在容器中使用密码,私钥这类敏感数据。

书籍:

1.《每天5分钟玩转Docker容器技术》
https://item.jd.com/16936307278.html(点击“阅读原文”直达)

2.《每天5分钟玩转OpenStack》
https://item.jd.com/12086376.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值