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

问题描述 投票:0回答:3

我编写了一个 bash 脚本来获取 kubernetes 集群上的所有部署。 我有一个命令将所有部署扩展到零。 我面临的挑战是,我希望能够循环所有部署并保存它们的名称和副本数量,以便在缩小规模后将它们缩小到原始值。

我如何实现这一目标? 这就是我到目前为止所做的。

$ kubectl get deployments
$ kubectl scale deploy -n default  --replicas=0 --all
kubernetes google-kubernetes-engine kubectl kubernetes-deployment
3个回答
28
投票

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

# 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

2
投票

您可以将输出保存到 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

2
投票

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

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
© www.soinside.com 2019 - 2024. All rights reserved.