k8s init初始化检测脚本

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值