美文网首页
k8s kubernetes批量操作服务shell

k8s kubernetes批量操作服务shell

作者: 我给你一个大大的YES | 来源:发表于2022-08-17 16:34 被阅读0次

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

    相关文章

      网友评论

          本文标题:k8s kubernetes批量操作服务shell

          本文链接:https://www.haomeiwen.com/subject/sbbegrtx.html