【问题标题】:Can I get events from other resources in addition to the pod in Kubernetes?除了 Kubernetes 中的 pod,我还能从其他资源中获取事件吗?
【发布时间】:2020-11-26 05:40:08
【问题描述】:

为 Pod 以外的资源(部署、ReplicaSet ...)运行此命令时

$ kubectl describe deployment xxx-deployment 

----           ------  ------

Events:          <none>

我已经部署了几个资源,但是除了 Pod 还没有看到事件。

如果事件发生在其他资源中会发生什么类型的事件?

您能推荐一些可以参考的材料吗?

【问题讨论】:

  • 能否提供您的部署 YAML 以及您使用的 K8s 版本?如果您使用K8s docs example,然后使用$ kubectl scale deploy nginx-deployment --replicas=5 将其放大,您将获得什么输出。如果你$ kubectl describe deploy nginx-deployment 得到类似Normal ScalingReplicaSet 5m44s deployment-controller Scaled up replica set nginx-deployment-7fd6966748 to 5 的输出
  • 在使用kubectl get events --all-namespaces的时候还能看到pod以外的其他资源吗?

标签: kubernetes kubectl


【解决方案1】:

您还可以使用--labels按标签过滤以描述所有资源

【讨论】:

    【解决方案2】:

    是的,部署确实有事件。但请记住,活动仅在 1 小时左右可用。

    【讨论】:

    • 我不知道有一个默认的 1 小时限制。谢谢!!
    【解决方案3】:

    很好地解释了Kubernetes 中的事件你可以在Types of Kubernetes Events 文章中找到。作者还提到了事件的类型。

    Kubernetes 事件是 Kubernetes 中的一种资源类型,当其他资源发生状态更改、错误或其他应广播到系统的消息时自动创建。虽然没有太多可用于事件的文档,但在调试 Kubernetes 集群中的问题时,它们是非常宝贵的资源。

    您不仅可以描述poddeploymentreplicaset,还可以描述几乎所有 Kubernetes 中的资源。

    例子:

    • kubectl describe job pi -n test
    Events:
      Type    Reason            Age   From            Message
      ----    ------            ----  ----            -------
      Normal  SuccessfulCreate  12s   job-controller  Created pod: pi-5rgbz
    
    • kubectl describe node ubuntu
    Events:
      Type     Reason                   Age                 From                   Message
      ----     ------                   ----                ----                   -------
      Warning  MissingClusterDNS        22h (x98 over 23h)  kubelet, ubuntu-18     kubelet does not have ClusterDNS IP configured and cannot create Pod using "ClusterFirst" policy. Falling back to "Default" policy.
      Normal   Starting                 22h                 kubelet, ubuntu-18     Starting kubelet.
      Warning  InvalidDiskCapacity      22h                 kubelet, ubuntu-18     invalid capacity 0 on image filesystem
      Normal   NodeHasSufficientMemory  22h                 kubelet, ubuntu-18     Node ubuntu-18 status is now: NodeHasSufficientMemory
      Normal   NodeHasSufficientPID     22h    
    

    列出您可以使用的所有资源事件 $ kubectl get events --all-namespaces

    $ kubectl get events --all-namespaces
    NAMESPACE     LAST SEEN   TYPE      REASON                    OBJECT                                                           MESSAGE
    default       50m         Normal    Starting                  node/gke-cluster-1-default-pool-XXXXXXXXXXXXX                    Starting kubelet.
    default       50m         Normal    NodeHasSufficientMemory   node/gke-cluster-1-default-pool-XXXXXXXXXXXXX                    Node gke-cluster-1-default-pool-XXXXXXXXXXXXX status is now: NodeHasSufficientMemory
    default       2m47s       Normal    SuccessfulCreate          job/pi                                                           Created pod: pi-5rgbz
    kube-system   50m         Normal    ScalingReplicaSet         deployment/fluentd-gcp-scaler                                    Scaled up replica set fluentd-gcp-scaler-6855f55bcc to 1
    

    在“对象”列中您的资源类型。

    如果您想了解更多详细信息,可以使用-o wide 标志 - $ kubectl get events --all-namespaces -o wide

    $ kubectl get events -o wide
    LAST SEEN   TYPE      REASON                    OBJECT                                   SUBOBJECT                      SOURCE                     MESSAGE                                      
                                                                                                                                                                        FIRST SEEN   COUNT   NAME
    20m         Normal    Scheduled                 pod/hello-world-86d6c6f84d-8qz9d                                        default-scheduler          Successfully assigned default/hello-world-86d
    6c6f84d-8qz9d to ubuntu-18  
    

    可能是根本原因。

    一开始我无法在没有任何事件的情况下创建部署我猜你已经设置了--event-ttl,这在Kube-apiserver docs中进行了描述。

    --event-ttl duration Default: 1h0m0s

    保留事件的时间。

    Github thread中也提到过。

    简而言之,如果您设置了此标志,所有事件将在 1 小时后消失。

    要检查您是否在kube-apiserver 中设置了此标志,您可以检查this StackOverflow thread

    如果这对您没有帮助,请使用您的配置 YAML、您使用的 K8 版本、重现步骤等信息编辑您的问题。

    【讨论】:

    • 感谢您的详细解释!我不知道有一个默认的 1 小时限制。这对我很有帮助。
    猜你喜欢
    • 1970-01-01
    • 2016-11-10
    • 1970-01-01
    • 2018-02-07
    • 2019-01-09
    • 1970-01-01
    • 2017-09-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多