meta data de esta página
Limitar el consumo de los recursos
Limitar la Ram y la CPU de un pod
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"
LimitRange
Un LimitRange permite poner limitaciones :
- Limitar la cantidad mínima y máxima de recursos que puede usar un pod o un contenedor en un namespace
- Definir los valores por defecto de request y limits para un recurso en el namespace
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:alpine
Ejemplo 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>
ResourceQuota
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"