Focusing specifically on the example showed in the question.
The setup is following:
The resources scheduled onto this single node cluster:
Deploymentswhere each have following fields:
resources: requests: # <-- IMPORTANT cpu: "100m" # <-- IMPORTANT memory: "128Mi" limits: cpu: "100m" memory: "128Mi"
For an example I tried to replicate setup as close as possible to the one in the question:
$ kubectl get pods
NAME READY STATUS RESTARTS AGE nginx-four-99d88fccb-v664b 0/1 Pending 0 51m nginx-one-8584c66446-rcw4p 1/1 Running 0 53m nginx-three-5bcb988986-jp22f 1/1 Running 0 51m nginx-two-6c9545d7d4-mrpw6 1/1 Running 0 52m
As you can see there is a
Pod that is in
Pending state. Further investigation implies:
$ kubectl describe pod/nginx-four-99d88fccb-v664b
A lot of information will show about the
Pod but the part that needs to be checked is
Events: Type Reason Age From Message ---- ------ ---- ---- ------- Warning FailedScheduling 56m (x2 over 56m) default-scheduler 0/1 nodes are available: 1 Insufficient cpu. Normal Scheduled 56m default-scheduler Successfully assigned default/nginx-two-6c9545d7d4-mrpw6 to gke-gke-old-default-pool-641f10b7-36qb Normal Pulling 56m kubelet Pulling image "nginx" Normal Pulled 56m kubelet Successfully pulled image "nginx" Normal Created 56m kubelet Created container nginx Normal Started 56m kubelet Started container nginx
As you can see from above output:
FailedScheduling: ... 0/1 nodes are available: 1 Insufficient cpu
As posted in the question:
I keep getting not having enough cpu availability even the node is using only 9% cpu at the same time.