【发布时间】:2019-04-24 08:58:40
【问题描述】:
我正在使用 kubernetes 集群为自己和其他开发人员运行开发环境。我编写了一些 shell 函数来帮助每个人处理他们的 pod,而无需手动输入长的 kubectl 命令。例如,要在其中一个 pod 上获得提示,我的函数使用以下
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,一个显示为终止,另一个显示为在kubectl get pods 输出中运行。我想确保上面的命令选择正在运行的 pod 而不是终止的。我以为--field-selector=status.phase=Running flag 会这样做,但事实并非如此。显然,即使 pod 正在终止,它仍然会在 status.phase 字段中报告 Running 状态。我可以使用什么来过滤终止的 pod?
【问题讨论】:
标签: bash kubernetes kubectl