将 kubernetes 部署缩减至 0 并缩减至原始副本集数量

cle*_*ent 4 kubernetes google-kubernetes-engine kubectl kubernetes-deployment

我编写了一个 bash 脚本来获取 kubernetes 集群上的所有部署。我有一个命令可以将所有部署缩放为零。我面临的挑战是,我希望能够遍历所有部署并保存它们的名称和副本数量,以便在缩小后将它们缩放回原始。

我如何做到这一点?这就是我迄今为止所做的。

$ kubectl get deployments
$ kubectl scale deploy -n default  --replicas=0 --all
Run Code Online (Sandbox Code Playgroud)

小智 6

您可以为之前的复制状态注释资源。然后您可以使用以下命令更改副本。

   #annotate first 
   kubectl get deploy -o jsonpath='{range .items[*]}{"kubectl annotate --overwrite deploy "}{@.metadata.name}{" previous-size="}{@.spec.replicas}{" \n"}{end}' | sh

   #scale to 0
   kubectl scale --replicas=0 $(kubectl get deploy -o name) 

   ## scaleback 
   kubectl get deploy -o jsonpath='{range .items[*]}{"kubectl scale deploy "}{@.metadata.name}{" --replicas="}{.metadata.annotations.previous-size}{"\n"}{end}' | sh
Run Code Online (Sandbox Code Playgroud)


cha*_*har 2

您可以将输出保存到 bash 数组中:

declare -A arr
for i in $(kubectl get deployment -o name)
do
  arr+=( [$i]="$(kubectl get $i -o=jsonpath='{.spec.replicas}')")
done
Run Code Online (Sandbox Code Playgroud)

然后再次使用它来扩大规模:

for key in ${!arr[@]}
do
  kubectl scale deploy $key --replicas=${arr[${key}]}
done
Run Code Online (Sandbox Code Playgroud)