创建 Google Cloud 容器节点池时没有 --wait 或 --no-async?

创建 Google Cloud 容器节点池时没有 --wait 或 --no-async?

我正在使用 Google Cloud / Google Container Engine,并且我有基础设施脚本,可以在其中创建集群和节点池,然后在设置完成后对节点池执行操作。

在我的脚本中,我需要确保节点池已设置并且集群处于就绪状态才能继续。

看起来该gcloud container node-pools create命令没有--wait--no-async选项,与非常相似的不同gcloud container node-pools delete。 有这样的选项吗create?否则,是否有推荐的方法来“等待”直到节点池准备就绪?

我相信在我的 bash 脚本中,创建节点池后,我可以执行一个 while 循环,定期检查 eg 的值gcloud container clusters describe myclustername --zone myzone | tail -n 2 | grep "status" | awk '{print $2}'直到我得到“ RUNNING”,但也许有更优雅的方法?

(如果创建和删除节点池的选项有奇偶校验就好了!)

答案1

截至撰写本文时gcloud container node-pools create命令默认为同步,但没有--async--no-wait选项。从 shell 脚本的角度来看,这并不是太糟糕,因为将命令置于后台很容易,并且可以解决您的特定问题。

处理原始行为的另一种方法是使用--log-http获取操作 ID 并将其提供给gcloud container operations wait(这有点混乱,需要抓取输出)。这表明还有另一个不错的功能,即异步命令回显操作 ID。

答案2

我已经创建了这个脚本,它将等待任何尚未完成的容器操作。

wait_container_operations.sh

#!/bin/bash
# This scripts runs gcloud container `operations describe` and `wait` for all found operations with `list --filter=STATUS!=DONE`
# API outlined here https://cloud.google.com/sdk/gcloud/reference/compute/operations/
set -euo pipefail
IFS=$'\n\t'

source_dir="$(dirname "$0")";
current_dir="$(pwd)";
echo "Listing, describing and awaiting NOT-DONE container-operations";

function sourceClusterZone(){
    cd $source_dir;
    source ./cluster_zone.sh;
    cd $current_dir;
}

queryNotDone(){ gcloud container operations list --filter=STATUS!=DONE --sort-by='~START_TIME'; }

listNotDone(){ queryNotDone | awk '{if (NR!=1) {print $1;}}'; }

sleep 2;
LISTNOTDONE=(`listNotDone`);
echo "\""${LISTNOTDONE[@]}"\"";
if (( ${#LISTNOTDONE[@]} )); then
sourceClusterZone;
for notDone in ${LISTNOTDONE[@]}
do
    echo "Waiting for $notDone";
    gcloud container operations describe $notDone --zone="${ZONE}";
    gcloud container operations wait $notDone --zone="${ZONE}";
    echo "Done with $notDone";
done
else
    echo 'Not Waiting';
fi

cluster_zone.sh(在同一目录中)

#!/bin/bash
set -euo pipefail
IFS=$'\n\t'

kubeClusterOptions(){ kubectl config current-context | awk -F '_' 'BEGIN { ORS=" " }; {print $4} {print $3}'; }

declare -a OPTIONS;
IFS=' ' read -a OPTIONS <<< `kubeClusterOptions`; IFS=$'\n\t';

while getopts c:z: option 
    do 
        case "${option}" 
        in 
        c) CLUSTER=${OPTARG:-${OPTIONS[0]}};; 
        z) ZONE=${OPTARG:-${OPTIONS[1]}};; 
    esac 
done
export CLUSTER=${CLUSTER:-${OPTIONS[0]}};
export ZONE=${ZONE:-${OPTIONS[1]}};

-c YOUR_CLUSTER您可以使用 和来配置自定义集群和区域的脚本。如果您未指定任何-z YOUR_ZONE配置,它将采用 中的配置。kubectl config current-context

相关内容