kubernetes kubectl wait not working for creation of resources

zaqlnxep  于 2023-10-17  发布在  Kubernetes
关注(0)|答案(2)|浏览(75)

你如何绕过等待资源不是yes创建?
在脚本中,我得到:

kubectl wait --for=condition=ready --timeout=60s -n <some namespace> --all pods

error: no matching resources found
ukxgm1gy

ukxgm1gy1#

这是一个社区wiki的答案张贴更好的知名度。你可以随意扩展它。
如文件所示:
实验:等待一个或多个资源上的特定条件。
该命令接受多个资源并等待,直到在每个给定资源的Status字段中看到指定的条件。
或者,命令可以通过提供“delete”关键字作为--for标志的值来等待给定的资源集被删除。
一条成功的消息将被打印到stdout,指示何时满足了指定的条件。可以使用-o选项更改为输出目的地。
此命令不适用于尚未创建的资源。@EmruzHossain发表了两个有效的观点:

  • 确保您提供了有效的命名空间。
  • 首先等待资源被创建。可能是一个周期性运行kubectl get的循环。当找到所需的资源时,中断循环。然后,运行kubectl wait以等待资源就绪。

此外,还有这样一个开放的线程:kubectl wait for un-existed resource. #83242仍在等待(没有双关语)实现。

lf3rwulv

lf3rwulv2#

我在这里找到了脚本,并对其进行了一些调整:https://github.com/kubernetes/kubernetes/issues/83242#issuecomment-1739443762

wait_for_pods_to_exist() {
  local ns=$1
  local pod_name_prefix=$2
  local max_wait_secs=$3
  local interval_secs=2
  local start_time
  start_time=$(date +%s)
  while true; do

    current_time=$(date +%s)
    if (( (current_time - start_time) > max_wait_secs )); then
      echo "Waited for pods in namespace \"$ns\" with name prefix \"$pod_name_prefix\" to exist for $max_wait_secs seconds without luck. Returning with error."
      return 1
    fi

    if kubectl -n "$ns" describe pod "$pod_name_prefix" --request-timeout "5s"  &> /dev/null; then
      echo "Pods in namespace \"$ns\" with name prefix \"$pod_name_prefix\" exist."
      break
    else
      sleep $interval_secs
    fi
  done
}
wait_for_pods_to_exist "namespace" "pod_prefix" 120

此外,您还可以使用用途:

kubectl rollout status --namespace namespace deployment/deployment_name --timeout=600s

等待,直到花苞准备好工作。

相关问题