检测etcd、k8s、docker、registry等健康状态脚本
编写一个shell脚本,用来检测docker,k8s等组件和服务的状态及集群健康状态,该脚本可借助ansible或者saltstack工具批量在不同的机器上执行
·
监测etcd、k8s、docker、registry健康的脚本
1. 检查etcd服务状态
脚本描述:
- 判定方法:
"systemctl is-active etcd"会返回3种状态:(1)unknow:代表主机未安装查询的服务;(2)active:服务正在运行;(3)inactive:服务未运行
#伪代码
if [ "etcd状态" 不等于 "unknown" ];then
if [ "etcd状态" 等于 "active" ];then
echo "xx主机etcd状态正常"
else
echo "xx主机etcd服务异常"
fi
else
echo "xx主机未安装etcd服务!"
fi
}
2. 检查etcd集群健康
脚本描述:
- 判定方法:执行etcdctl endpoint health命令的返回结果,使用正则匹配,如果存在unhealthy,代表集群不健康,否则集群为健康。
- "etcdctl endpoint health"这条命令之所有能执行成功,是因为我已经提前把命令需要添加的参数加入到了环境变量中
#伪代码
result="systemctl is-active etcd"
if [[ result匹配到"unhealthy" ]];then
echo "ETCD集群不健康"
echo "result"
else
echo "ETCD集群健康"
echo "result"
fi
3. 检查docker服务状态及ip_forward是否打开
脚本描述:
- docker服务状态检测原理同etcd
- systctl -n 可以检测内核参数值,ip_forward=1表示开关打开
#伪代码
IP_FORWARD开关="sysctl -n net.ipv4.ip_forward"
docker状态="systemctl is-active docker"
if [ docker状态不等于 "unknown" ];then
if [ docker状态等于 "active" ];then
echo "xx主机docker服务状态启动"
else
echo "xx主机docker服务未启动"
fi
else
echo "xx主机未安装docker"
fi
if [ IP_FORWARD开关=1 ];then
echo "xx主机已打开ip_forward"
else
echo "xx主机未打开ip_forward"
fi
4. 检查registry仓库是否正常
脚本描述:
使用到的关键命令:
curl -o /dev/null -s -w “%{http_code}” “http://127.0.0.1:5000/v2/_catalog”
如果镜像仓库正常会返回200的状态码
镜像仓库的服务端口根据创建docker容器时映射的端口决定,此处使用的是5000
#伪代码
HTTP_CODE=`curl -o /dev/null -s -w "%{http_code}" "http://127.0.0.1:5000/v2/_catalog"`
if [ HTTP_CODE 等于 200 ];then
echo "registry运行正常"
else
echo "regisrty运行异常"
fi
5. 检查k8s各组件状态(适用于二进制方式安装)
脚本描述
脚本监测原理同etcd、docker
#伪代码
SCHEDULE_STATUS="systemctl is-active kube-scheduler"
MANAGE_STATUS="systemctl is-active kube-controller-manager"
APISERVER_STATUS="systemctl is-active kube-apiserver"
KUBELET_STATUS="systemctl is-active kubelet"
PORXY_STATUS="systemctl is-active kube-proxy"
定义数组 status_array
status_array=(["kube-apiserver"]="APISERVER_STATUS" ["kube-controller-manager"]="MANAGE_STATUS" ["kube-scheduler"]="SCHEDULE_STATUS" ["kubelet"]="KUBELET_STATUS" ["kube-proxy"]="PORXY_STATUS")
for 服务状态 in status_array数组
do
if [ 服务状态 不等于 "unknown" ];then
if [ 服务状态 等于 "active" ];then
echo "xx主机xx服务启动"
else
echo "xx主机xx服务未启动"
fi
else
echo "xx主机未安装xx服务!"
fi
done
6. 检查k8s集群健康
脚本描述:
检查kubectl get nodes的返回结果,分2种情况:
1.如果命令执行返回结果不为0,说明集群的状态是不健康的
2. 如果匹配到master或者node的状态含有NotReady关键字,说明集群的状态是不健康的
#伪代码
kubectl get nodes &>/dev/null
if [ 命令结果 返回 0 ];then
执行结果="kubectl get nodes"
if [[ 执行结果 匹配到 "NotReady" ]];then
echo "K8S集群健康不健康"
echo "执行结果"
else
echo "K8S集群健康"
echo "执行结果"
fi
else
echo "K8S集群不健康"
echo "kubectl get nodes执行结果"
fi
7.在main函数中的处理
- 对于registry,一般一套环境只会在某些机器上安装,以此执行脚本前应该先判断该机器是否运行了registry
- 检查etcd集群健康的时候,在会在安装了etcd服务的机器上执行
- 检查k8s集群健康的时候,只会在master节点上执行
if [[ registry进程存在 ]];then
执行检测registry函数
else
echo "xx未安装docker-registry"
fi
if [ etcd服务状态 不等于 "unknown" ];then
执行检测etcd集群函数
fi
if [ kube-apiserver服务状态 不等于 "unknown" ];then
执行检测k8s集群函数
fi
8. 测试脚本执行的结果
更多推荐
已为社区贡献2条内容
所有评论(0)