Linux Shell脚本,用于在kubernetes的day basics中查找新添加的播客
我需要一个shell脚本来查找哪些kubernetes吊舱是新添加到集群的。包括pod名称、日期和时间以及名称空间 我已尝试使用以下bash脚本:Linux Shell脚本,用于在kubernetes的day basics中查找新添加的播客,linux,bash,shell,unix,kubernetes,Linux,Bash,Shell,Unix,Kubernetes,我需要一个shell脚本来查找哪些kubernetes吊舱是新添加到集群的。包括pod名称、日期和时间以及名称空间 我已尝试使用以下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. po
#!/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的名称、开始时间和名称空间
请提供帮助。您的脚本存在许多问题和低效。应该避免反复调用像
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`
语法
使用
-o=json
的kubectl
可能会更容易、更直接地以编程方式进行处理,因此您应该认真研究这一点。我没有Kubernetes集群可供使用,因此我只是指出这是进一步改进的方向。这里有一些明显的错误,比如grep | echo
没有任何用处。也许可以尝试至少对其中的一些进行分类。请您的问题显示示例输出,这样我们就可以计算出您希望从何处提取日期以及它的外观。输出如下:新添加的pod是:`Name:nginx-58432966c-ssjqx名称空间:steven_lung开始时间:Sat,2018年6月16日05:11:27+0000`不,我是说kubectl
的原始输出在这种情况下是什么样子的?请用这个细节来回答你的问题——就像你刚刚发现的,在评论中提供这个是行不通的(而且你的问题应该是独立的)。问题已经解决了。更改代码如下:if[“$dt”==“${array[$i]}”];然后dat=date“+%a,%d%b%Y”
name=kubectl描述pod$pods | grep-v SecretName:| grep-b1'$dat'
kubectl描述pod$pods | grep-v SecretName:| grep-E”name:|开始时间:“>pod.txt | cat pod.txt | cat pod.txt | grep-b1$dat”>pod1.fi i=($i+1))我很乐意承认,我不得不猜测脚本应该做什么,以及kubectl
的输出应该是什么样子。如果没有其他问题,这至少可以引导你简化你的脚本,也许在将来提出更好的问题。您可以修复以下问题吗:第5行:意外标记附近的语法错误|“第5行:
pods=(kubectl get pods |”第6行:意外标记附近的语法错误)“第6行:
awk'NR>1{printf sep$1;sep=”“}”)抱歉输入太草率;现在试试。就像我之前写的那样,我无法访问kubectl
,因此无法测试此代码。