繁体   English   中英

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

[英]Running multiple kubectl commands in a bash script

我正在尝试创建一个仪表板,我可以在其中查看集群中 pod 的状态。 所以我有一个 bash 脚本,它类似于:

SERVICE_ONE=$(kubectl get pods | grep service-one | grep -E -- 'CrashLoopBackOff|Terminating|Error|Fail')
SERVICE_TWO=$(kubectl get pods | grep service-two | grep -E -- 'CrashLoopBackOff|Terminating|Error|Fail')
SERVICE_THREE=$(kubectl get pods | grep service-three | grep -E -- 'CrashLoopBackOff|Terminating|Error|Fail')

if [ ${#SERVICE_ONE} = 0 ]
then
  SERVICE_ONE_STATUS="GOOD"
else
  SERVICE_ONE_STATUS="BAD"

然后我将这些结果发布到 GUI。 唯一的问题是我有将近 20 个这样的kubectl命令,这些命令总共导致程序需要超过 2 分钟才能运行。 我尝试做类似的事情:

KUBE_OUTPUT=$(kubectl get pods)
SERVICE_ONE=$(grep service-one <<< ${KUBE_OUTPUT} | grep -E -- 'CrashLoopBackOff|Terminating|Error|Fail')
SERVICE_TWO=$(grep service-two <<< ${KUBE_OUTPUT} | grep -E -- 'CrashLoopBackOff|Terminating|Error|Fail')
SERVICE_THREE=$(grep service-three <<< ${KUBE_OUTPUT} | grep -E -- 'CrashLoopBackOff|Terminating|Error|Fail')

但这不起作用,因为 kube output 的保存格式与我在终端上直接运行时的格式不同(存在间距问题,没有换行符等)。 我想知道是否有更好的方法一次执行多个kubectl命令?

因为,每次运行 kubectl 命令来获取 pod 详细信息都需要时间。

我尝试了 kubectl get pods with -o=jsonpath 类似下面的东西

$  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 的 NAME 和 STATUS 过滤结果。 output 就像

$ 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)

output 将是

$ echo $SERVICE
my-deployment-55bc8b77dd-8plsw  Running

现在拆分结果并根据需要显示状态。 这有帮助。 如果这不是你要找的。 请发表评论。

谢谢。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM