首页 > 解决方案 > 除了 Kubernetes 中的 pod,我还能从其他资源中获取事件吗?

问题描述

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

$ kubectl describe deployment xxx-deployment 

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

Events:          <none>

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

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

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

标签: kuberneteskubectl

解决方案


Kubernetes您可以在Kubernetes 事件类型文章中找到很好的解释什么是事件。作者还提到了事件的类型。

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

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

例子:

  • 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 wideflag -$ 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  

可能是根本原因。

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

--event-ttl duration Default: 1h0m0s

保留事件的时间量。

Github线程中也提到了它。

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

要检查你是否设置了这个标志,kube-apiserver你可以检查这个 StackOverflow 线程

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


推荐阅读