Skip to content

Commit

Permalink
fix node check
Browse files Browse the repository at this point in the history
  • Loading branch information
Ilja Weis authored and Ilja Weis committed Jan 25, 2018
1 parent 5926bdc commit d8a54e1
Show file tree
Hide file tree
Showing 2 changed files with 59 additions and 2 deletions.
39 changes: 37 additions & 2 deletions check_kubernetes.go
Original file line number Diff line number Diff line change
Expand Up @@ -252,6 +252,10 @@ func checkNode(name string, kube kubernetes.Interface) (nrpe.Result, string) {

nosched := node.Spec.Unschedulable
ready := false
unknown := true

resourceTroubleMsg := ""
resourceTrouble := false

if len(node.Status.Conditions) < 1 {
return nrpe.UNKNOWN, "node in unknown state"
Expand All @@ -260,14 +264,41 @@ func checkNode(name string, kube kubernetes.Interface) (nrpe.Result, string) {
for _, cond := range node.Status.Conditions {
switch cond.Type {
case corev1.NodeReady:
unknown = false
if cond.Status == corev1.ConditionTrue {
ready = true
}
default: // invalid value for Type
return nrpe.UNKNOWN, "node in unknown state (invalid condition)"
case corev1.NodeOutOfDisk:
if cond.Status == corev1.ConditionTrue {
resourceTrouble = true
resourceTroubleMsg = resourceTroubleMsg + "out of disk "
}
case corev1.NodeDiskPressure:
if cond.Status == corev1.ConditionTrue {
resourceTrouble = true
resourceTroubleMsg = resourceTroubleMsg + "has disk pressure "
}
case corev1.NodeMemoryPressure:
if cond.Status == corev1.ConditionTrue {
resourceTrouble = true
resourceTroubleMsg = resourceTroubleMsg + "has memory pressure "
}
case corev1.NodeNetworkUnavailable:
if cond.Status == corev1.ConditionTrue {
resourceTrouble = true
resourceTroubleMsg = resourceTroubleMsg + "network unavailable "
}
}
}

if unknown {
return nrpe.UNKNOWN, "node in unknown state (invalid condition)"
}

if ready && resourceTrouble {
return nrpe.WARNING, "node ready but hits resource limits ( " + resourceTroubleMsg + ")"
}

if ready && nosched {
return nrpe.WARNING, "node ready but no scheduling allowed"
}
Expand All @@ -276,6 +307,10 @@ func checkNode(name string, kube kubernetes.Interface) (nrpe.Result, string) {
return nrpe.OK, "node ready"
}

if !ready && resourceTrouble {
return nrpe.CRITICAL, "node not ready ( " + resourceTroubleMsg + ")"
}

return nrpe.CRITICAL, "node not ready"
}

Expand Down
22 changes: 22 additions & 0 deletions check_kubernetes_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -462,6 +462,28 @@ func TestNode(t *testing.T) {
result: nrpe.UNKNOWN,
message: "unknown",
},
{
node: corev1.Node{
ObjectMeta: metav1.ObjectMeta{Name: "foo10"},
Status: corev1.NodeStatus{Conditions: []corev1.NodeCondition{
{Type: corev1.NodeReady, Status: corev1.ConditionTrue},
{Type: corev1.NodeOutOfDisk, Status: corev1.ConditionFalse}}},
},
name: "Ready",
result: nrpe.OK,
message: "ready",
},
{
node: corev1.Node{
ObjectMeta: metav1.ObjectMeta{Name: "foo11"},
Status: corev1.NodeStatus{Conditions: []corev1.NodeCondition{
{Type: corev1.NodeReady, Status: corev1.ConditionTrue},
{Type: corev1.NodeOutOfDisk, Status: corev1.ConditionTrue}}},
},
name: "OutOfDisk",
result: nrpe.WARNING,
message: "disk",
},
}

for _, test := range tests {
Expand Down

0 comments on commit d8a54e1

Please sign in to comment.