mirror of
https://github.com/k8sgpt-ai/k8sgpt.git
synced 2025-09-20 10:55:07 +00:00
reads the event stream to correlate against OOMKill events
Signed-off-by: AlexsJones <alexsimonjones@gmail.com>
This commit is contained in:
@@ -47,6 +47,18 @@ func RunAnalysis(ctx context.Context, client *kubernetes.Client, aiClient *ai.Cl
|
|||||||
failureDetails = append(failureDetails, containerStatus.State.Waiting.Message)
|
failureDetails = append(failureDetails, containerStatus.State.Waiting.Message)
|
||||||
brokenPods[fmt.Sprintf("%s/%s", pod.Namespace, pod.Name)] = failureDetails
|
brokenPods[fmt.Sprintf("%s/%s", pod.Namespace, pod.Name)] = failureDetails
|
||||||
}
|
}
|
||||||
|
// This represents a container that is still being created or blocked due to conditions such as OOMKilled
|
||||||
|
if containerStatus.State.Waiting.Reason == "ContainerCreating" && pod.Status.Phase == "Pending" {
|
||||||
|
|
||||||
|
// parse the event log and append details
|
||||||
|
evt, err := FetchLatestPodEvent(ctx, client, &pod)
|
||||||
|
if err != nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
failureDetails = append(failureDetails, evt.Message)
|
||||||
|
brokenPods[fmt.Sprintf("%s/%s", pod.Namespace, pod.Name)] = failureDetails
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -97,6 +109,8 @@ func RunAnalysis(ctx context.Context, client *kubernetes.Client, aiClient *ai.Cl
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
color.Green(response)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
33
pkg/analyzer/events.go
Normal file
33
pkg/analyzer/events.go
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
package analyzer
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
|
||||||
|
"github.com/k8sgpt-ai/k8sgpt/pkg/kubernetes"
|
||||||
|
v1 "k8s.io/api/core/v1"
|
||||||
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
|
)
|
||||||
|
|
||||||
|
func FetchLatestPodEvent(ctx context.Context, kubernetesClient *kubernetes.Client, pod *v1.Pod) (*v1.Event, error) {
|
||||||
|
|
||||||
|
// get the list of events
|
||||||
|
events, err := kubernetesClient.GetClient().CoreV1().Events(pod.Namespace).List(ctx,
|
||||||
|
metav1.ListOptions{
|
||||||
|
FieldSelector: "involvedObject.name=" + pod.Name,
|
||||||
|
})
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
// find most recent event
|
||||||
|
var latestEvent *v1.Event
|
||||||
|
for _, event := range events.Items {
|
||||||
|
if latestEvent == nil {
|
||||||
|
latestEvent = &event
|
||||||
|
}
|
||||||
|
if event.LastTimestamp.After(latestEvent.LastTimestamp.Time) {
|
||||||
|
latestEvent = &event
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return latestEvent, nil
|
||||||
|
}
|
Reference in New Issue
Block a user