当前位置:   article > 正文

k8s kubernetes批量操作服务shell

kubectl scale deployment -n $ns $ns-dp --replicas=0

主要为集群管理时,希望批量停止服务和恢复服务。在多集群时(多中心,例如主备中心),例如集群A中服务a有3个副本,集群B中服务a有2个副本,当集群A停止时,集群B的服务a可以快速扩容到5个副本,集群A恢复时,集群B的服务a可以恢复到2个副本。

保存服务和副本数到centerData文件

  1. #!/bin/bash
  2. # 当前中心服务副本情况,将要保存到文件
  3. currentFile="centerData"
  4. > $currentFile
  5. # 按照label获取服务
  6. # 将要停止下面标签的服务,多个命名空间用空格隔开
  7. label="app=test1 app=test2"
  8. echo "将要记录的标签为:" $label
  9. echo $(date) "将要记录当前中心服务副本情况到:" $currentFile
  10. for l in $label
  11. do
  12. kubectl get deploy -l $l -A -o go-template='{{range .items}}{{ .metadata.namespace }} {{.metadata.name}} {{ .spec.replicas }}{{ "\n" }}{{end}}' >>$currentFile
  13. done<!--# 按照命名空间获取服务-->
  14. <!--# 将要停止下面命名空间的服务,多个命名空间用空格隔开-->
  15. <!--nss="default ns1 ns2"-->
  16. <!--echo "将要记录的命名空间为:" $nss-->
  17. <!--echo $(date) "将要记录当前集群服务副本情况到:" $currentFile-->
  18. <!--for ns in $nss-->
  19. <!--do-->
  20. <!-- kubectl get deploy -n $ns -o go-template='{{range .items}}{{ .metadata.namespace }} {{.metadata.name}} {{ .spec.replicas }}{{ "\n" }}{{end}}' >>$currentFile-->
  21. <!--done-->
  22. # 去掉不需要的服务
  23. sed -i '/kubectl/d' $currentFile

对比多中心服务,如果由不同服务异常推出

  1. # 当前中心服务副本情况,将要保存到文件
  2. currentFile="centerData"
  3. # 将要合并的集群的服务副本情况文件
  4. addFile="subcenterData"
  5. # 双中心总共服务副本情况文件
  6. mergeFile="mergeData"
  7. if [ ! -f $addFile ]; then
  8. echo "无其他中心副本情况文件"
  9. exit 0
  10. fi
  11. # 进行双中心文件比较,确保服务完全相同
  12. cat $currentFile| awk '{print($1 "/" $2)}' | sort | uniq | sort > c_t
  13. cat $addFile | awk '{print($1 "/" $2)}' | sort | uniq | sort > a_t
  14. compare=`comm -3 c_t a_t`
  15. if [[ -n $compare ]]; then
  16. echo $(date) "两个中心服务有差别:" $compare
  17. exit 1
  18. fi
  19. echo $(date) "将要记录双中心副本情况到:" $mergeFile
  20. > $mergeFile
  21. while read cfline
  22. do
  23. cf_line=($cfline)
  24. cf_ns=${cf_line[0]}
  25. cf_service=${cf_line[1]}
  26. cf_replicas=${cf_line[2]}
  27. while read afline
  28. do
  29. af_line=($afline)
  30. af_ns=${af_line[0]}
  31. af_service=${af_line[1]}
  32. af_replicas=${af_line[2]}
  33. if [[ $af_ns == $cf_ns ]] && [[ $af_service == $cf_service ]]; then
  34. let merge_replicas=$cf_replicas+$af_replicas
  35. echo $cf_ns $cf_service $merge_replicas >> $mergeFile
  36. fi
  37. done < $addFile
  38. done < $currentFile

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

格式为<namesapce> <deploymentName> <replicas>

  1. default nginx-v1 1
  2. default nginx-v2 2
  3. default nginx-v3 3

停止服务

  1. #!/bin/bash
  2. file=$1
  3. if [ $1 ]; then
  4. while read line
  5. do
  6. line=($line)
  7. ns=${line[0]}
  8. service=${line[1]}
  9. kubectl scale deployment -n $ns --replicas=0 $service
  10. echo $(date) "停止服务: " $ns $service
  11. done < $file
  12. else
  13. echo "请给予参数文件"
  14. fi

启动服务

  1. #!/bin/bash
  2. file=$1
  3. if [ $1 ]; then
  4. while read line
  5. do
  6. line=($line)
  7. ns=${line[0]}
  8. service=${line[1]}
  9. replicas=${line[2]}
  10. kubectl scale deployment -n $ns --replicas=$replicas $service
  11. echo $(date) "恢复服务: " $ns $service "副本数:" $replicas
  12. done < $file
  13. else
  14. echo "请给予参数文件"
  15. fi
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/424802
推荐阅读
相关标签
  

闽ICP备14008679号