Focusing specifically on the example showed in the question.
The setup is following:
- 1
GKE
node with:1 vCPU
and3.75
GB ofRAM
The resources scheduled onto this single node cluster:
- 4
Deployments
where 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
:
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.