当其他吊舱终止时,如何获取运行中的吊舱名称?

时间:2018-11-21 17:58:08

标签: bash kubernetes kubectl

我正在使用kubernetes集群为自己和其他开发人员运行开发环境。我写了一些shell函数来帮助每个人处理他们的pod,而无需手动输入长的kubectl命令。例如,要在其中一个窗格上获得提示,我的函数使用以下

kubectl exec -it $(kubectl get pods --selector=run=${service} --field-selector=status.phase=Running -o jsonpath="{.items[*].metadata.name}") -- bash;

其中$ service设置为我要访问的服务标签,例如postgres或redis或uwsgi。

由于这些是开发环境,因此每种类型的Pod始终都是其中一种。我遇到的问题是,如果我删除一个Pod以使其重新生成新映像(所有Pod由部署管理,那么如果我删除Pod,它将创建一个新的Pod),一段时间内有两个Pod,一个Pod显示为终止,另一个显示为在kubectl get pods输出中运行。我要确保上面的命令选择正在运行的Pod,而不是选择终止的Pod。我以为--field-selector=status.phase=Running标志可以做到,但事实并非如此。显然,即使吊舱正在终止,它仍会在status.phase字段中报告运行状态。我可以使用什么来过滤终止的Pod?

1 个答案:

答案 0 :(得分:2)

使用这个

swap-pane

$ kubectl exec -it $(kubectl get pods --selector=run=${service} | grep "running" | awk '{print $1}') -- bash;

参考:https://kubernetes.io/docs/reference/kubectl/jsonpath/