前言:
有些企业可能并没有足够的能力或者没必要搭建(云上租用)一个K8S集群,会考虑使用Docker。
公司今年有个项目,一部分服务就是使用原来的,改改配置就能用,然后再配合实际的场景再新上1、2个服务。在云上再租用一个K8S集群或者自己搭建一个K8S集群就显得尤为浪费。但是有几个都是之前的服务就迁移一下就行了,所以我还是考虑容器,毕竟迁移方便嘛。所以采用了Docker-compose来管理Docker容器的方式。
在K8S中,可以配置健康检测探针,但是Docker-compose里面并没有。所以编辑了SHELL脚本来实现异常重启。
SHELL脚本:
#!/bin/bash
# docker-compose.yml 文件所在目录
COMPOSE_DIR="/opt/software/dun-tools-server"
while true; do
# 检查所有容器状态
for CONTAINER_NAME in $(docker-compose -f $COMPOSE_DIR/docker-compose.yml ps --services); do
HEALTH_STATUS=$(docker inspect --format='{{json .State.Health}}' $(docker-compose -f $COMPOSE_DIR/docker-compose.yml ps -q $CONTAINER_NAME))
if [[ "$HEALTH_STATUS" == *"\"Status\":\"unhealthy\""* ]]; then
echo "$(date +%Y-%m-%d\ %H:%M:%S) - $CONTAINER_NAME is unhealthy, restarting..."
docker-compose -f $COMPOSE_DIR/docker-compose.yml stop $CONTAINER_NAME
docker-compose -f $COMPOSE_DIR/docker-compose.yml up -d $CONTAINER_NAME
fi
done
# 每隔2分钟检查一次
sleep 120
done
脚本作用展示:
使用nohup后台启动即可,看异常重启日志时可以查看nohup.out日志。
因为这个程序对CPU资源消耗很大,都是关于计算的操作,但是该服务被开发出来时,最大又只能使用一个CPU,因此使用了多个节点,当某一个节点掉线时,通过上边的脚本能检测到(每120s检测一次),然后进行重启。只有我这边运维这边通过日志能看到哪个节点什么时间进行了重启,客户方无感。
标签:容器,compose,CONTAINER,yml,COMPOSE,Docker,docker From: https://blog.51cto.com/u_14500227/7086507