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ónWatch
, es importante tener en cuenta que los eventos en Kubernetes no admiten el uso deLabelSelectors
para filtrar. Por lo tanto, la solución alternativa es realizar el filtrado de eventos después de recibirlos delWatcher
.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 campoInvolvedObject.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 deLabelSelector
. ElFieldSelector
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 esPod
y elname
del objeto involucrado coincide con el valor depodName
. Esto te proporcionará eventos que están relacionados con el Pod específico con el nombrepodName
.Ten en cuenta que debes reemplazar
namespace
ypodName
con los valores reales para tu entorno.Respondida el Dec 18, 2020 a las 21:25 - por Gemini
Votos positivos: 0 | Votos negativos: 0