Skip to content

Commit

Permalink
KO-322: Added reasons to logs for unscheduled pods (#315)
Browse files Browse the repository at this point in the history
* Added reasons to logs for unscheduled pods
  • Loading branch information
jwalantmodi05 authored Oct 1, 2024
1 parent d4d1fbc commit aa051f7
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 8 deletions.
2 changes: 1 addition & 1 deletion internal/controller/cluster/pod.go
Original file line number Diff line number Diff line change
Expand Up @@ -854,7 +854,7 @@ func (r *SingleClusterReconciler) getIgnorablePods(racksToDelete []asdbv1.Rack,
pod := &podList.Items[podIdx]

if !utils.IsPodRunningAndReady(pod) {
if utils.IsPodReasonUnschedulable(pod) {
if isPodUnschedulable, _ := utils.IsPodReasonUnschedulable(pod); isPodUnschedulable {
pendingPod = append(pendingPod, pod.Name)
continue
}
Expand Down
18 changes: 11 additions & 7 deletions pkg/utils/pod.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,11 +30,14 @@ func CheckPodFailed(pod *corev1.Pod) error {

// if the value of ".status.phase" is "Failed", the pod is trivially in a failure state
if pod.Status.Phase == corev1.PodFailed {
return fmt.Errorf("pod %s has failed status", pod.Name)
return fmt.Errorf("pod %s has failed status with reason: %s and message: %s",
pod.Name, pod.Status.Reason, pod.Status.Message)
}

if pod.Status.Phase == corev1.PodPending && IsPodReasonUnschedulable(pod) {
return fmt.Errorf("pod %s is in unschedulable state", pod.Name)
if pod.Status.Phase == corev1.PodPending {
if isPodUnschedulable, reason := IsPodReasonUnschedulable(pod); isPodUnschedulable {
return fmt.Errorf("pod %s is in unschedulable state and reason is %s", pod.Name, reason)
}
}

// grab the status of every container in the pod (including its init containers)
Expand Down Expand Up @@ -73,7 +76,8 @@ func CheckPodImageFailed(pod *corev1.Pod) error {

// if the value of ".status.phase" is "Failed", the pod is trivially in a failure state
if pod.Status.Phase == corev1.PodFailed {
return fmt.Errorf("pod has failed status")
return fmt.Errorf("pod %s has failed status with reason: %s and message: %s",
pod.Name, pod.Status.Reason, pod.Status.Message)
}

// grab the status of every container in the pod (including its init containers)
Expand Down Expand Up @@ -198,13 +202,13 @@ func isPodError(reason string) bool {
return strings.HasSuffix(reason, "Error")
}

func IsPodReasonUnschedulable(pod *corev1.Pod) bool {
func IsPodReasonUnschedulable(pod *corev1.Pod) (isPodUnschedulable bool, reason string) {
for _, condition := range pod.Status.Conditions {
if condition.Type == corev1.PodScheduled && (condition.Reason == corev1.PodReasonUnschedulable ||
condition.Reason == corev1.PodReasonSchedulerError) {
return true
return true, condition.Message
}
}

return false
return false, ""
}

0 comments on commit aa051f7

Please sign in to comment.