在bash脚本中运行多个kubectl命令

在bash脚本中运行多个kubectl命令,bash,shell,kubernetes,Bash,Shell,Kubernetes,我正在尝试创建一个仪表板,在这里我可以看到集群中我的吊舱的状态。因此,我有一个bash脚本,类似于: 服务一=$kubectl获取吊舱| grep服务一| grep-E-'CrashLoopBackOff |终止|错误|失败' 服务二=$kubectl获取吊舱| grep服务二| grep-E-'CrashLoopBackOff |终止|错误|失败' 服务三=$kubectl获取pods | grep服务三| grep-E-'CrashLoopBackOff |终止|错误|失败' 如果[${SE

我正在尝试创建一个仪表板,在这里我可以看到集群中我的吊舱的状态。因此,我有一个bash脚本,类似于:

服务一=$kubectl获取吊舱| grep服务一| grep-E-'CrashLoopBackOff |终止|错误|失败' 服务二=$kubectl获取吊舱| grep服务二| grep-E-'CrashLoopBackOff |终止|错误|失败' 服务三=$kubectl获取pods | grep服务三| grep-E-'CrashLoopBackOff |终止|错误|失败' 如果[${SERVICE_ONE}=0] 然后 服务状态=良好 其他的 服务状态=坏 然后我将这些结果发布到GUI。唯一的问题是,我有将近20个这样的kubectl命令,这总共会导致程序运行超过2分钟。我试过这样做:

KUBE_输出=$kubectl获取吊舱
SERVICE_ONE=$grep SERVICE ONEsince,每次运行kubectl命令获取pod详细信息都需要时间

我试着用-o=jsonpath获取pods,如下所示

$  VAR=$(kubectl get pods -o=jsonpath="{range .items[*]}{.metadata.name}{'\t'}{.status.phase}{'\n'}{end}"$'\r' | grep -E -- 'CrashLoopBackOff|T
erminating|Error|Fail|Running')

这将使用pod的名称和状态过滤结果。 输出结果如下

$ IFS=' '
$ echo $VAR
my-deployment-55bc8b77dd-8plsw  Running
my-deployment-55bc8b77dd-crlbx  Running
my-deployment-55bc8b77dd-jqqx4  Running
my-deployment-55bc8b77dd-mnm5k  Running
my-deployment-55bc8b77dd-zndvs  Running
现在,您可以再次根据pod名称进行筛选

$ SERVICE=$(echo $VAR | grep my-deployment-55bc8b77dd-8plsw)
输出将是

$ echo $SERVICE
my-deployment-55bc8b77dd-8plsw  Running
现在分割结果,并根据需要显示状态。 希望这有帮助。 如果这不是你要找的。请发表评论


谢谢。

不要运行多个命令:只运行一个命令,其中包含json格式的所有pod的所有细节,并使用其他工具(如jq)解析长clob。好的,我认为将所有信息喷入jsonpath可能是一种方法,但它似乎不会保持相同的格式。我可能不得不更改我的许多命令的逻辑,但这可能是goI真正错过了这一步的方式:VAR=$kubectl get pods-o=jsonpath={range.items[*]}{.metadata.name}{{'\t'}{.status.phase}{'\n'}{end}$\r''grep-E-'CrashLoopBackOff{t terminating}Error{Fail}Running',我最后使用了echo$\VAR}| tr'''\n'| awk'/service one/{getline;print}'| grep-E-'CrashLoopBackOff |终止|错误|失败|检查与我的服务匹配的每个pod的状态很高兴它有帮助!!: