我想要一个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名称,开始时间和命名空间。
请帮忙。
答案 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一样重要;它可以执行grep
和cut
以及sed
可以执行的所有操作,等等。另请注意我们如何使用$(command)
命令替换语法优先于过时的遗留`command`
语法。
kubectl
的 -o=json
可能会更容易,更直接地以编程方式处理,因此您应该仔细研究它。我没有Kubernetes集群可以玩,所以我只是指出这是进一步改进的方向。