PV / PVC触发了哪些事件?从何处触发?

问题描述

kubectl get events列出K8s对象的事件。 PV / PVC实际上是从哪里触发的? 有音量事件列表 https://docs.openshift.com/container-platform/4.5/nodes/clusters/nodes-containers-events.html 但是它不能确定哪些事件是针对哪个资源的?

解决方法

让我们从一个Kubernetes事件开始吧。这些对象可以洞悉集群内部发生的情况,例如调度程序做出了哪些决定或为什么从节点中驱逐了某些吊舱。这些API对象保留在etcd中。

您可以详细了解herehere。 您还可以找到有关here的Kubernetes事件的精彩教程。


有两种方法可以从Kubernetes查看/获取更详细的事件:

使用kubectl get events -o wide。这将为您提供有关事件的objectsubobjectsource的信息。这是一个示例:

LAST SEEN   TYPE      REASON                  OBJECT                            SUBOBJECT                         SOURCE                                                          MESSAGE

<unknown>   Warning   FailedScheduling        pod/web-1                                                           default-scheduler                                               running "VolumeBinding" filter plugin for pod "web-1": pod has unbound immediate PersistentVolumeClaims

6m2s        Normal    ProvisioningSucceeded   persistentvolumeclaim/www-web-1                                     k8s.io/minikube-hostpath 2481b4d6-0d2c-11eb-899d-02423db39261   Successfully provisioned volume pvc-a56b3f35-e7ac-4370-8fda-27342894908d

6m2s        Normal    ProvisioningSucceeded   persistentvolumeclaim/www-web-1                                     k8s.io/minikube-hostpath 2481b4d6-0d2c-11eb-899d-02423db39261   Successfully provisioned volume pvc-a56b3f35-e7ac-4370-8fda-27342894908d

使用kubectl get events --output json将以json格式为您提供事件列表,其中包含其他详细信息,例如selflink

        ---
                "apiVersion": "v1","count": 1,"eventTime": null,"firstTimestamp": "2020-10-13T12:07:17Z","involvedObject": {
        ---  
        "kind": "Event","lastTimestamp": "2020-10-13T12:07:17Z","message": "Created container nginx","metadata": {       
        ---    

Selflink可用于确定从中提取数据的API位置。

我们可以以/api/v1/namespaces/default/events/为例,并使用kubectl proxy从API服务器获取数据:

kubectl proxy --port=8080 & curl http://localhost:8080/api/v1/namespaces/default/events/

使用所有这些信息,您可以使用field-selector从基础对象中缩小到特定的详细信息:

    kubectl get events --field-selector type=!Normal
    or
    kubectl get events --field-selector involvedObject.kind=PersistentVolumeClaim
    
    LAST SEEN   TYPE     REASON                  OBJECT                            MESSAGE
    44m         Normal   ExternalProvisioning    persistentvolumeclaim/www-web-0   waiting for a volume to be created,either by external provisioner "k8s.io/minikube-hostpath" or manually created by system administrator
    44m         Normal   Provisioning            persistentvolumeclaim/www-web-0   External provisioner is provisioning volume for claim "default/www-web-0"
    44m         Normal   ProvisioningSucceeded   persistentvolumeclaim/www-web-0   Successfully provisioned volume pvc-815beb0a-b5f9-4b27-94ce-d21f2be728d5

请记住,kubectl events提供的所有信息都与kubectl describe <ojbect>中的信息相同。

最后,如果您仔细查看event.go代码,可能会看到有关卷的所有事件参考。如果将它们与Table 13. Volumes进行比较,您会发现它们几乎相同(WaitForPodScheduledExternalExpanding的执行结果)

这意味着Openshift提供了有关该集群中可能发生的来自不同kubernetes的可能事件的汇总信息。