k8s kubernetes批量操作服务shell

主要为集群管理时,希望批量停止服务和恢复服务。在多集群时(多中心,例如主备中心),例如集群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














# 去掉不需要的服务
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

上面的脚本会为每个集群中心生成如下格式的文件
然后
按照如下格式文件起停服务

格式为

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

你可能感兴趣的:(k8s kubernetes批量操作服务shell)