【问题标题】:How to get the running pod name when there are other pods terminating?当有其他 Pod 终止时,如何获取正在运行的 Pod 名称?
【发布时间】: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


    【解决方案1】:

    用这个

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

    $ kubectl exec -it $(kubectl get pods --selector=run=${service} -o=jsonpath='{.items[?(@.status.phase==“Running”)].metadata.name}') -- bash;
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-08-23
      • 2022-01-27
      • 2021-12-06
      • 2018-12-12
      • 1970-01-01
      • 1970-01-01
      • 2019-09-10
      • 1970-01-01
      相关资源
      最近更新 更多