【问题标题】:How to correctly give patterns for POD name in kubernetes?如何在 kubernetes 中正确给出 POD 名称的模式?
【发布时间】:2021-09-09 16:56:36
【问题描述】:

我正在使用 kubernetes 来部署应用程序,并且

kubect logs

用于查看日志。 重新部署非常频繁,所以有点不舒服 - 每次都复制 pod 名称以粘贴到日志命令中(因为 pod 名称的结尾每次都会发生变化),例如以下是相同应用程序的命令,经过 2 次部署

kubectl logs -n=testns --since=1m testapp-2818008534-jx2vv
kubectl logs -n=testns --since=1m testapp-2818008534-xls93

所以,我想使用一个命令,它会在我们每次运行“kubectl logs”时正确“获取”所需的 POD 名称。

但是有点喜欢

$kubectl logs -n=testns --since=1h $(kubectl get pods --namespace=testns | grep testapp)

返回一个错误,我们没有“给出” pod 名称,但该 pod 确实存在:

error: expected 'logs (POD | TYPE/NAME) [CONTAINER_NAME]'.
POD or TYPE/NAME is a required argument for the logs command

那么,如何正确设置这个命令,在每次查看日志时都使用它,而不需要重新复制粘贴完整的 POD 名称?

【问题讨论】:

    标签: kubernetes kubectl


    【解决方案1】:

    当你这样做时:

    kubectl get pods --namespace=testns | grep testapp

    你会得到类似的东西:

    testapp-54d99599bc-g2gs4 1/1 Running 0 56m

    因此,logs 命令不能很好地执行此操作,因为它有一些 Kubectl 无法理解的额外数据。你可以做的是:

    kubectl get pods --namespace=testns | grep testapp | cut -d' ' -f1

    这将只生成 POD 的名称,然后您的日志命令应该可以工作。

    【讨论】:

    • 即使没有检查我也看到了它的正确性 - tnx man!我只是不完全理解“get pods”返回“full row”
    【解决方案2】:

    接受的答案在大多数情况下应该有效,但以防万一尝试这个替代方案:

    kubectl get po | grep testapp | tr -s ' ' | cut -d\  -f 1
    

    【讨论】:

      【解决方案3】:

      您可以使用选择器(label 查询)来过滤 pod:

      kube logs -lapp.kubernetes.io/name=testapp --all-containers=true
      

      使用 kubectl v1.15.0

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-08-23
        • 2021-11-30
        • 1970-01-01
        • 2017-07-05
        • 2021-12-09
        • 2019-01-07
        • 1970-01-01
        相关资源
        最近更新 更多