将kubernetes部署缩减到0,并回缩到副本集的原始数量

oyxsuwqo  于 2023-01-12  发布在  Kubernetes
关注(0)|答案(3)|浏览(138)

我已经编写了一个bash脚本来获取kubernetes群集上的所有部署。我有一个命令来将所有部署缩减为零。我面临的挑战是,我希望能够循环遍历所有部署并保存它们的名称和副本数量,以便在缩减后将它们缩减回原始状态。
我该如何做到这一点?这是我迄今为止所做的。

$ kubectl get deployments
$ kubectl scale deploy -n default  --replicas=0 --all
0vvn1miw

0vvn1miw1#

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

# 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
dhxwm5r4

dhxwm5r42#

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

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

然后再用它来扩大规模:

for key in ${!arr[@]}
do
  kubectl scale deploy $key --replicas=${arr[${key}]}
done
rxztt3cl

rxztt3cl3#

首先获取所有部署的列表,这一点很重要,因为您需要它在需要时进行扩展:

kubectl get deploy -A --no-headers | grep -v 'kube' > deploy_state_before_scale.txt

将所有非k8s系统相关部署扩展到0:

kubectl get deploy --no-headers -A | grep -v 'kube' | awk '{print $1}' | while read  DEPLOY; do kubectl scale --replicas=0 deployment/$DEPLOY -n $DEPLOY; done

要将群集缩放回缩放到0之前的状态,请确保使用在缩放到0之前创建的“deploy_state_before_scale.txt”:

awk '{print $1,$4}' deploy_state_before_scale.txt | while read DEPLOY SCALE; do kubectl scale --replicas=$SCALE deployment/$DEPLOY -n $DEPLOY; done

相关问题