Reduce unnecessary CPU requests
A default installation of these charts in GKE requests over 4 cores, which is too much but more importantly unnecessary.
Current State
Current default requests:
deployment | CPU requests | Mem requests | Default # | Total CPU |
---|---|---|---|---|
gitlab-shell | 200m | 64Mi | 2 | .4 |
gitaly | 100m | 384Mi | 1 | .1 |
sidekiq | 500m | 1024M | 1 | .5 |
task-runner | 200m | 500M | - | .4 |
unicorn | 200m | 2G | 2 | .4 |
minio | 250m | 256Mi | 1 | .25 |
redis | 100m | 128Mi | 1 | .1 |
registry | 50m | 64Mi | 2 | .1 |
gitlab-runner | 100m | - | 1 | .1 |
nginx | - | - | 1 controller, 1 backend | .2 |
postgres | 100m | 256Mi | 1 | .1 |
certmanager | - | - | - | - |
prometheus | - | - | - | - |
If you add all of these up, you get around 3 vCPU. So why, with 4 CPU's, is the chart failing to fully deploy?
On further look, it appears like there is a default CPU request on GKE in the default
namespace.
kubectl describe limitrange limits
Name: limits
Namespace: default
Type Resource Min Max Default Request Default Limit Max Limit/Request Ratio
---- -------- --- --- --------------- ------------- -----------------------
Container cpu - - 100m - -
What happens with this, is that all containers, including initContainers require .1 CPU. (initContainer resources are added to the normal container resources)
This is pushing our CPU requests to around 5 CPU.
Suggested actions
- Reduce Sidekiq CPU request to 100m
- Continue to set all CPU Requests to 100m
- Recommend in the installation guide to install in the
gitlab
namespace, to avoid the default CPU request indefault
- Keep the memory requests, as there are real consequences if a Node runs out of memory.
The rationale here, is that you generally want to underprovision CPU. This is because there is little to no harm in doing so, at worst things get slow. However by overprovisioning CPU, you are essentially causing the customer to throw away CPU, as it cannot be deployed for other uses.
For example in a idle state, the above GitLab instance consumes less 0.25 cores. Based on our sizing guidelines, 4CPU should support 2,000 users. That is far larger than our average deployment size.