我正在使用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?
答案 0 :(得分:2)
使用这个
swap-pane
或
$ kubectl exec -it $(kubectl get pods --selector=run=${service} | grep "running" | awk '{print $1}') -- bash;