k8s init初始化检测脚本(注意yaml格式缩进)
,通过设置wait_for_connections变量可在程序启动前设置一个或者多个检测条件,满足条件后再启动对应服务,避免服务依赖未就绪导致无效启动
简单模式:(常规推荐)
initContainers:
- image: busybox:1.36.1
imagePullPolicy: IfNotPresent
name: wait-for
command: ["sh","-c"]
args:
- |
check_connection() {
local service=$1
local host=$2
local port=$3
while true; do
if nc -z -w3 "$host" "$port" >/dev/null; then
echo "$service 检测成功"
return 0
else
echo "$service 检测失败"
sleep 5
fi
done
}
wait_for_connections() {
check_connection "Nacos" "nacos ip or svc" "8848"
echo "所有检测完毕,正常退出!"
}
wait_for_connections
显示等待经过的时间模式:
initContainers:
- image: busybox:1.36.1
imagePullPolicy: IfNotPresent
name: wait-for
command: ["sh","-c"]
args:
- |
check_connection() {
local service=$1
local host=$2
local port=$3
local start_time=$(date +%s)
while true; do
if nc -z -w3 "$host" "$port" >/dev/null; then
local duration=$(( $(date +%s) - start_time ))
echo "$service 检测成功,等待总时间:${duration} 秒"
return 0
else
local duration=$(( $(date +%s) - start_time ))
echo "$service 检测失败,等待总时间:${duration} 秒"
sleep 5
fi
done
}
wait_for_connections() {
check_connection "Nacos" "nacos ip or svc" "8848"
echo "所有检测完毕,正常退出!"
}
wait_for_connections
人性化显示等待时间模式:
initContainers:
- image: busybox:1.36.1
imagePullPolicy: IfNotPresent
name: wait-for
command: ["sh", "-c"]
args:
- |
format_duration() {
local duration=$1
local days=$((duration / 86400))
local hours=$((duration % 86400 / 3600))
local minutes=$((duration % 3600 / 60))
local seconds=$((duration % 60))
local formatted_duration=""
if [[ $days -gt 0 ]]; then
formatted_duration="${formatted_duration}${days}天 "
fi
if [[ $hours -gt 0 ]]; then
formatted_duration="${formatted_duration}${hours}小时 "
fi
if [[ $minutes -gt 0 ]]; then
formatted_duration="${formatted_duration}${minutes}分钟 "
fi
if [[ $seconds -ge 0 ]]; then
formatted_duration="${formatted_duration}${seconds}秒"
fi
echo "${formatted_duration}"
}
check_connection() {
local service=$1
local host=$2
local port=$3
local start_time=$(date +%s)
local duration=0
while true; do
if nc -z -w3 "$host" "$port" >/dev/null; then
duration=$(( $(date +%s) - start_time ))
local formatted_duration=$(format_duration $duration)
echo "$service 检测成功,等待总时间:${formatted_duration}"
return 0
else
duration=$(( $(date +%s) - start_time ))
local formatted_duration=$(format_duration $duration)
echo "$service 检测失败,等待总时间:${formatted_duration}"
sleep 5
fi
done
}
wait_for_connections() {
check_connection "mysql" "mysql ip or svc" "3306"
check_connection "mongodb" "mongodb ip or svc" "27017"
check_connection "redis" "redis ip or svc" "6379"
echo "所有检测完毕,正常退出!"
}
wait_for_connections