eventos de reloj cliente-go para cápsulas específicas

Estoy viendo eventos a través de clienteset, pero quiero ver eventos para un Pod específico, así que agrego lablelselector para filtrarlos, por desgracia no funciona. Agregar LabelSelector es una buena manera de ver el estado de la cápsula, pero no funciona para eventos.

    watcher, err := clientset.CoreV1().Events(namespace).Watch(ctx, metav1.ListOptions{
        LabelSelector: labels, //it doesn't work
    })

Me pregunto qué es buena manera de filtrar los eventos para que sólo quiero ver los eventos que sólo están relacionados con el selector específico de lable.

Pregunta hecha hace 3 años, 5 meses, 5 días - Por scriptsorcerer


3 Respuestas:

  • Si quieres ver eventos para un Pod Específico puedes usar fieldselector

    watcher, err := clientset.CoreV1().Events(namespace).Watch(ctx, metav1.ListOptions{
        FieldSelector: "involvedObject.kind=Pod,involvedObject.name=",
    })
    

    Respondida el Dec 17, 2020 a las 21:14 - por codecraftsman

    Votos positivos: 0 | Votos negativos: 0

  • Al intentar filtrar eventos de Pod específicos a través del clientset de Kubernetes utilizando un LabelSelector en la función Watch, es importante tener en cuenta que los eventos en Kubernetes no admiten el uso de LabelSelectors para filtrar. Por lo tanto, la solución alternativa es realizar el filtrado de eventos después de recibirlos del Watcher.

    Una forma de lograrlo es implementando la lógica de filtrado directamente en el código al recibir cada evento del Watcher. Puedes usar la información del evento recibido para determinar si se relaciona con el Pod específico que estás interesado en monitorear.

    Aquí hay un ejemplo básico de cómo podrías implementar esta lógica de filtrado después de recibir eventos del Watcher:

    go
    watcher, err := clientset.CoreV1().Events(namespace).Watch(context.Background(), metav1.ListOptions{})
    if err != nil {
        // manejar error
    }
    
    for event := range watcher.ResultChan() {
        // Verificar si el evento está relacionado con el Pod específico
        if event.Object.(v1.Event).InvolvedObject.Name == "nombre-del-pod-especifico" {
            // Procesar el evento
            fmt.Printf("Evento relacionado con el Pod específico: %s\n", event.Object.(v1.Event).Message)
        }
    }
    

    En este código, después de iniciar el Watcher, se itera a través de los eventos recibidos y se verifica si el campo InvolvedObject.Name del evento coincide con el nombre del Pod específico que estás interesado en monitorear. Si hay una coincidencia, puedes procesar el evento según sea necesario.

    Recuerda personalizar la lógica de filtrado según tus necesidades específicas y manejar los errores adecuadamente. Espero que esta solución te ayude a lograr el filtrado de eventos para un Pod específico a través del clientset de Kubernetes.

    Respondida el Dec 18, 2020 a las 21:15 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • Para filtrar eventos para un Pod específico usando un selector de etiquetas en el cliente de Go, puedes utilizar el parámetro FieldSelector en lugar de LabelSelector. El FieldSelector te permite filtrar eventos basados en los metadatos del objeto relacionado, en este caso, el Pod.

    Aquí tienes un ejemplo de cómo puedes hacerlo:

    go
        watcher, err := clientset.CoreV1().Events(namespace).Watch(ctx, metav1.ListOptions{
            FieldSelector: fmt.Sprintf("involvedObject.kind=Pod,involvedObject.name=%s", podName),
        })
    

    En este ejemplo, estamos filtrando eventos donde el kind del objeto involucrado es Pod y el name del objeto involucrado coincide con el valor de podName. Esto te proporcionará eventos que están relacionados con el Pod específico con el nombre podName.

    Ten en cuenta que debes reemplazar namespace y podName con los valores reales para tu entorno.

    Respondida el Dec 18, 2020 a las 21:25 - por Gemini

    Votos positivos: 0 | Votos negativos: 0