【问题标题】:Filter Kubernetes events by deployment name or label selector按部署名称或标签选择器过滤 Kubernetes 事件
【发布时间】:2020-06-20 07:19:25
【问题描述】:

在运行kubectl get events时,有没有办法在不知道pod名称的情况下按事件过滤?

我正在尝试使用Azure Pipeline's Kubectl task 执行此操作,它仅限于将参数传递给kubectl get events,但不允许子shell 和管道,因此grepawk 不可用。

我尝试使用 kubectl get events --field-selector involvedObject.name=my-microservice-name,它在一定程度上有效(即,用于部署资源),但不适用于 pod。

使用kubectl get events --field-selector app.kubernetes.io/name=my-microservice-name 不会返回任何结果,尽管已按照kubectl describe pod <my-microservice-name>-pod-name 中的方式配置了该标签。

如果有办法使用通配符,例如kubectl get events --field-selector involvedObject.name=*my-microservice-name*,那将是最好的情况。

非常感谢任何帮助。

谢谢!

【问题讨论】:

    标签: azure kubernetes kubectl


    【解决方案1】:

    我没有 azure 环境,但我可以在 pod 上显示事件

    master $ kubectl get events --field-selector involvedObject.kind=Pod
    LAST SEEN   TYPE     REASON      OBJECT      MESSAGE
    <unknown>   Normal   Scheduled   pod/nginx   Successfully assigned default/nginx to node01
    5m13s       Normal   Pulling     pod/nginx   Pulling image "nginx"
    5m8s        Normal   Pulled      pod/nginx   Successfully pulled image "nginx"
    5m8s        Normal   Created     pod/nginx   Created container nginx
    5m8s        Normal   Started     pod/nginx   Started container nginx
    

    如果您需要特定 pod 上的目标,您应该与 involvedObject.kindinvolvedObject.name 一起使用。

    master $ kubectl run redis --image=redis --generator=run-pod/v1
    master $ kubectl run nginx --image=nginx --generator=run-pod/v1
    master $ kubectl get events --field-selector involvedObject.kind=Pod,involvedObject.name=nginx
    LAST SEEN   TYPE     REASON      OBJECT      MESSAGE
    <unknown>   Normal   Scheduled   pod/nginx   Successfully assigned default/nginx to node01
    16m         Normal   Pulling     pod/nginx   Pulling image "nginx"
    16m         Normal   Pulled      pod/nginx   Successfully pulled image "nginx"
    16m         Normal   Created     pod/nginx   Created container nginx
    16m         Normal   Started     pod/nginx   Started container nginx
    

    为什么我知道involvedObject.kind 有效,因为它的 json 输出显示密钥存在

            "involvedObject": {
                "apiVersion": "v1",
                "fieldPath": "spec.containers{nginx}",
                "kind": "Pod",
                "name": "nginx",
                "namespace": "default",
                "resourceVersion": "604",
                "uid": "7ebaaf99-aa9c-402b-9517-1628d99c1763"
            },
    

    你需要尝试的另一种方式是jsonpath,获取json格式的输出

    kubectl get events -o json
    

    然后将 json 复制并粘贴到 https://jsonpath.com/ 并与 jsonpath practices 一起玩

    【讨论】:

    • 感谢@BMW。如果 pod 名称的末尾有这样的随机字符,这也可以吗? ``` $ kubectl get pods NAME READY STATUS RESTARTS AGE my-microservice-name-4098151155-494nl 1/1 Running 0 1m ``` 由于额外的字符并且无法指定它们,这是我遇到最大问题的地方在 Azure 任务中。我可能不得不改用 PowerShell 或 Bash。
    • 它应该可以工作。 field-selector 正在寻找involvedObject.name 的密钥,它不介意随机字符,如果你担心它,你可以在上面添加配额或双倍配额
    • 似乎对我不起作用:$ kubectl get events Events: ` Type Reason Age From Message` ` ---- ------ ---- ---- - ------`11m Normal Killing pod/temp-centos-db2-connectivity-test-5b6fcb7d98-rn5mn Stopping container centos$ kubectl get events --field-selector involvedObject.kind=Pod,involvedObject.name=temp-centos-db2-connectivity-testNo resources found in default namespace.$
    • 您的 pod 似乎没有在 default 命名空间中运行,那么您可以再添加一个过滤器 involvedObject.namespace=xxxx
    • 他们实际上是在运行 default 命名空间。如果我使用全名作为字段选择器的一部分,我能够返回结果:--field-selector involvedObject.name=temp-centos-db2-connectivity-test-5b6fcb7d98-rn5mn。我们也有app.kubernetes.io/name/temp-centos-db2-connectivity-test 标签,但没有任何明显的区别。
    猜你喜欢
    • 2021-09-01
    • 1970-01-01
    • 2021-05-28
    • 2023-02-05
    • 1970-01-01
    • 2021-03-04
    • 2019-06-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多