Мне нужны сценарии оболочки для поиска, какие поды кубернетов были недавно добавлены в кластер. Включите имя модуля, дату, время и пространство имен.
Я пробовал использовать следующий сценарий 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
Скрипт работает почти нормально. Но мне нужны только модули, созданные сегодня, скрипты, показывающие имя всех модулей, время начала и пространство имен.
Пожалуйста помоги.
Не могли бы вы редактировать свой вопрос, чтобы показать образец вывода, чтобы мы могли выяснить, где вы ожидаете выбрать дату и как она выглядит?
Результат будет примерно таким: Новые добавленные модули: `Имя: nginx-58432966c-ssjqx Пространство имен: steven_lung Время начала: Сб, 16 июня 2018 г. 05:11:27 +0000`
Нет, я имею в виду, как в этом сценарии выглядит необработанный вывод kubectl? И, пожалуйста, редактировать свой вопрос с этой подробностью - как вы только что обнаружили, предоставление этого в комментарии просто не работает (и ваш вопрос в любом случае должен быть автономным).
date "+%a, %d %b %Y" # name = kubectl describe pod $pods |grep -v SecretName: |grep -B 1 '$dat' kubectl describe pod $ pods | grep -v SecretName: | grep -E "Имя: | Время начала: "> pod.txt | cat pod.txt | grep -B 1 "$ dat"> pod1.txt fi i = $ (($ i + 1))





В вашем сценарии есть множество проблем и недостатков. Следует избегать многократного вызова несколько тяжелой команды, такой как 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, с которым можно было бы поиграть, поэтому я указываю на это только как на направление для дальнейшего улучшения.
Я с готовностью признаю, что мне пришлось угадывать несколько вещей о том, что должен делать ваш скрипт и как ожидается вывод kubectl. По крайней мере, это должно помочь вам по крайней мере упростить ваш сценарий и, возможно, задать более важные вопросы в будущем.
Я пробовал использовать этот сценарий, но он показывает следующие ошибки. Не могли бы вы исправить это: строка 5: синтаксическая ошибка возле неожиданного токена |' line 5: pods = (kubectl get pods | 'строка 6: синтаксическая ошибка возле неожиданного токена )' line 6: awk' NR> 1 {printf sep $ 1; sep = ""} ')'
Извините за неаккуратный набор текста; попробуй. Как я уже писал ранее, у меня нет доступа к kubectl, поэтому у меня нет возможности проверить этот код.
Здесь есть несколько очевидных ошибок, например,
grep | echoне делает ничего полезного. Может быть, попробуйте shellcheck.net, чтобы разобраться хотя бы с некоторыми из них.