主要为集群管理时,希望批量停止服务和恢复服务。在多集群时(多中心,例如主备中心),例如集群A中服务a有3个副本,集群B中服务a有2个副本,当集群A停止时,集群B的服务a可以快速扩容到5个副本,集群A恢复时,集群B的服务a可以恢复到2个副本。
保存服务和副本数到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 "请给予参数文件"
- 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 "副本数:" $replicas
- done < $file
- else
- echo "请给予参数文件"
- fi