Para limitar la ram de un pod usaremos en el manifiesto del pod las opciones request y limits.
La opción request es para definir la cantidad de memoria que asignamos al pod y la opción limits define el máximo de memoria que podría llegar a usar ese pod.
apiVersion: v1 kind: Pod metadata: name: limite-memoria spec: containers: - name: limite-memoria image: polinux/stress resources: limits: memory: "200Mi" # Definimos el límite de memoria que puede usar el pod a 200M requests: memory: "100Mi" #Definimos la cantidad de memoria que reservamos para este pod command: ["stress"] args: ["--vm", "1", "--vm-bytes", "150M", "--vm-hang", "1"]
Para limitar la cantidad de CPU a utilizar
apiVersion: v1 kind: Pod metadata: name: cpu-demo spec: containers: - name: cpu-demo-ctr image: vish/stress resources: limits: cpu: "1" requests: cpu: "0.5" args: - -cpus - "2"
Un LimitRange permite poner limitaciones :
Veamos un ejemplo para definir los limits y los request
apiVersion: v1 kind: Namespace metadata: name: dev labels: name: dev --- apiVersion: v1 kind: LimitRange metadata: name: mem-cpu-limit-range namespace: dev spec: limits: - default: memory: 512Mi cpu: 1 defaultRequest: memory: 256Mi cpu: 0.5 type: Container --- apiVersion: v1 kind: Pod metadata: name: podtest3 namespace: dev labels: app: backend env: dev spec: containers: - name: cont1 image: nginx:alpineEjemplo para definir unos valores mínimos y máximos
apiVersion: v1 kind: Namespace metadata: name: prod labels: name: prod --- apiVersion: v1 kind: LimitRange metadata: name: min-max namespace: prod #Definimos el namespace donde vamos a aplicar este limite spec: limits: - max: memory: 1Gi cpu: 1 min: memory: 100M cpu: 100m type: Container --- apiVersion: v1 kind: Pod metadata: name: podtest3 namespace: prod #Definimos el namespace para el pod labels: app: backend env: dev spec: containers: - name: cont1 image: nginx:alpine resources: limits: memory: 50M cpu: 50m
para ver los límites
kubectl get limitrange -n <nombredelnamespace>
Limita el consumo de recursos por namespace
apiVersion: v1 kind: Namespace metadata: name: uat labels: name: uat --- apiVersion: v1 kind: ResourceQuota metadata: name: res-quota namespace: uat spec: hard: requests.cpu: "1" requests.memory: 1Gi limits.cpu: "2" limits.memory: 2Gi
Tambien es posible limitar el número de pods de un namespace
--- apiVersion: v1 kind: Namespace metadata: name: pre labels: name: pre --- apiVersion: v1 kind: ResourceQuota metadata: name: pod-demo namespace: pre spec: hard: pods: "3"