How to tag nodes in GKE, then assign pods to nodes?

9/30/2021

I have the standard 3-nodes pool in GKE.

I want to label 1 of these nodes to be something like dev or test, so all the pods in the namespace dev, qa or stage are loaded in that node, preferrably.

The pods in the namespace prod would use the other available nodes, be it 2, 3 or more nodes available.

Basically I want to restrict the CPU / memory load for non-important deployments to affect the prod deployments.

How can I do this automatically? Because when Google updates the nodes (for a software update) a new one is created.

-- JorgeeFG
google-kubernetes-engine
kubernetes

1 Answer

9/30/2021

If you want to restrict CPU/memory, using labels on nodes is not the right way to do this. Instead, set a quota on the dev/test namespace.

https://kubernetes.io/docs/concepts/policy/resource-quotas/

Basically, it would look something like this

apiVersion: v1
  kind: ResourceQuota
  metadata:
    name: low-priority
  spec:
    hard:
      cpu: "5"
      memory: 1Gi
      pods: "10"

I have a blog post about this as well: https://cloud.google.com/blog/products/containers-kubernetes/kubernetes-best-practices-resource-requests-and-limits

Edit:

If you really want to do this, I think the best way would be to use node pools, and then tag the pods to go into a specific pool.

-- Sandeep Dinesh
Source: StackOverflow