Shell脚本在日常基础上在kubernetes中查找新添加的pod

时间:2018-06-19 07:41:18

标签: linux bash shell unix kubernetes

我想要一个shell脚本来查找哪些kubernetes pods是新添加到集群的。包括广告连播名称,日期和时间以及命名空间。

我尝试过以下bash脚本:

#!/bin/bash

p=50            #total pods count

pcount=`kubectl get pods |wc -l`

###Addition check
if [ $ncount -gt $n ]
then

    ####pods variable have all pods name.
    pods=`kubectl get pods|awk '{print $1}'|awk '{if(NR>1)print}'| xargs`

    ###start variable have all dates pods created

    start=`kubectl describe pod $pods |grep "Start Time"|awk '{print $3 $4 $5 $6}'`

    ###max variable have total number of pods
    max=`kubectl get pods |awk '{if(NR>1)print}'| wc -l`

    dt=`date +%a,%d%b%Y`

    array=( $start )

    i=0
    while [  $i -lt $max ];
    do
        #    echo "inside loop ${array[$i]}"

        if [[ "$dt" == "${array[$i]}" ]];then
             dat=`date "+%a, %d %b %Y"`
             name=`kubectl describe pod $pods |grep -v SecretName: |echo "$dat" |egrep 'Name|Start Time'`

             printf "\n"
             echo "Newly Added pods are: $name"
        fi
        i=$(( $i + 1 ))
    done
fi

脚本工作得很好。但我只需要今天创建的pod,脚本显示所有pod名称,开始时间和命名空间。

请帮忙。

1 个答案:

答案 0 :(得分:0)

您的脚本存在许多问题和效率低下。应该避免反复调用像kubectl这样有点沉重的命令;尝试重新排列事物,以便您只运行一次,并从中提取所需的信息。我模糊地猜测你实际上想要的东西是

#!/bin/bash

# Store pod names in an array  
pods=($(kubectl get pods |
    awk 'NR>1 { printf sep $1; sep=" "}'))
if [ ${#pods[@]} -gt $n ]; then  # $n is still undefined!
    for pod in "${pods[@]}"; do
        kubectl describe pod "$pod" |
        awk -v dt="$(date +"%a, %d %b %Y")" '
            /SecretName:/ { next }
            /Name:/ { name=$NF }
            /Start Time:/ { t=$3 $4 $5 $6;
                if (t==dt) print name
                name="" }'
    done
fi

无论如何,一旦你运行Awk,重构就像处理Awk一样重要;它可以执行grepcut以及sed可以执行的所有操作,等等。另请注意我们如何使用$(command)命令替换语法优先于过时的遗留`command`语法。

使用kubectl

-o=json可能会更容易,更直接地以编程方式处理,因此您应该仔细研究它。我没有Kubernetes集群可以玩,所以我只是指出这是进一步改进的方向。