主要為集群管理時,希望批量停止服務和恢復服務获茬。在多集群時(多中心,例如主備中心),例如集群A中服務a有3個副本雷绢,集群B中服務a有2個副本媚朦,當集群A停止時,集群B的服務a可以快速擴容到5個副本吹埠,集群A恢復時,集群B的服務a可以恢復到2個副本。
保存服務和副本數(shù)到centerData文件
#!/bin/bash
# 當前中心服務副本情況实蓬,將要保存到文件
currentFile="centerData"
> $currentFile
# 按照label獲取服務
# 將要停止下面標簽的服務,多個命名空間用空格隔開
label="app=test1 app=test2"
echo "將要記錄的標簽為:" $label
echo $(date) "將要記錄當前中心服務副本情況到:" $currentFile
for l in $label
do
kubectl get deploy -l $l -A -o go-template='{{range .items}}{{ .metadata.namespace }} {{.metadata.name}} {{ .spec.replicas }}{{ "\n" }}{{end}}' >>$currentFile
done
<!--# 按照命名空間獲取服務-->
<!--# 將要停止下面命名空間的服務吊履,多個命名空間用空格隔開-->
<!--nss="default ns1 ns2"-->
<!--echo "將要記錄的命名空間為:" $nss-->
<!--echo $(date) "將要記錄當前集群服務副本情況到:" $currentFile-->
<!--for ns in $nss-->
<!--do-->
<!-- kubectl get deploy -n $ns -o go-template='{{range .items}}{{ .metadata.namespace }} {{.metadata.name}} {{ .spec.replicas }}{{ "\n" }}{{end}}' >>$currentFile-->
<!--done-->
# 去掉不需要的服務
sed -i '/kubectl/d' $currentFile
對比多中心服務安皱,如果由不同服務異常推出
# 當前中心服務副本情況,將要保存到文件
currentFile="centerData"
# 將要合并的集群的服務副本情況文件
addFile="subcenterData"
# 雙中心總共服務副本情況文件
mergeFile="mergeData"
if [ ! -f $addFile ]; then
echo "無其他中心副本情況文件"
exit 0
fi
# 進行雙中心文件比較艇炎,確保服務完全相同
cat $currentFile| awk '{print($1 "/" $2)}' | sort | uniq | sort > c_t
cat $addFile | awk '{print($1 "/" $2)}' | sort | uniq | sort > a_t
compare=`comm -3 c_t a_t`
if [[ -n $compare ]]; then
echo $(date) "兩個中心服務有差別:" $compare
exit 1
fi
echo $(date) "將要記錄雙中心副本情況到:" $mergeFile
> $mergeFile
while read cfline
do
cf_line=($cfline)
cf_ns=${cf_line[0]}
cf_service=${cf_line[1]}
cf_replicas=${cf_line[2]}
while read afline
do
af_line=($afline)
af_ns=${af_line[0]}
af_service=${af_line[1]}
af_replicas=${af_line[2]}
if [[ $af_ns == $cf_ns ]] && [[ $af_service == $cf_service ]]; then
let merge_replicas=$cf_replicas+$af_replicas
echo $cf_ns $cf_service $merge_replicas >> $mergeFile
fi
done < $addFile
done < $currentFile
上面的腳本會為每個集群中心生成如下格式的文件
然后
按照如下格式文件起停服務
格式為<namesapce> <deploymentName> <replicas>
default nginx-v1 1 default nginx-v2 2 default nginx-v3 3
停止服務
#!/bin/bash
file=$1
if [ $1 ]; then
while read line
do
line=($line)
ns=${line[0]}
service=${line[1]}
kubectl scale deployment -n $ns --replicas=0 $service
echo $(date) "停止服務: " $ns $service
done < $file
else
echo "請給予參數(shù)文件"
fi
啟動服務
#!/bin/bash
file=$1
if [ $1 ]; then
while read line
do
line=($line)
ns=${line[0]}
service=${line[1]}
replicas=${line[2]}
kubectl scale deployment -n $ns --replicas=$replicas $service
echo $(date) "恢復服務: " $ns $service "副本數(shù):" $replicas
done < $file
else
echo "請給予參數(shù)文件"
fi