我正在尝试创建一个仪表板,在其中可以查看集群中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。唯一的问题是这些kubectl
命令中几乎有20个,它们总共使程序运行超过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输出没有以我在终端上简单运行时的格式保存(存在间距问题,没有换行符等)。我想知道是否有更好的方式一次执行多个kubectl
命令?
答案 0 :(得分:1)
因为,每次运行kubectl命令来获取pod的详细信息都会花费时间。
我尝试使用-o = jsonpath类似于以下内容获取kubectl
$ VAR=$(kubectl get pods -o=jsonpath="{range .items[*]}{.metadata.name}{'\t'}{.status.phase}{'\n'}{end}"$'\r' | grep -E -- 'CrashLoopBackOff|T
erminating|Error|Fail|Running')
这将使用广告连播的名称和状态过滤结果。 输出就像
$ 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
现在您可以再次根据广告连播名称进行过滤
$ SERVICE=$(echo $VAR | grep my-deployment-55bc8b77dd-8plsw)
输出将是
$ echo $SERVICE
my-deployment-55bc8b77dd-8plsw Running
现在拆分结果并根据需要显示状态。 霍普这有帮助。 如果这不是您想要的。请发表评论。
谢谢。