[英]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.