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.
<sxh yaml> 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"]
</sxh>
Para limitar la cantidad de CPU a utilizar <sxh yaml> 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"
</sxh>
Un LimitRange permite poner limitaciones :
Veamos un ejemplo para definir los limits y los request <sxh yaml> 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
</sxh> Ejemplo para definir unos valores mínimos y máximos <sxh yaml> 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
</sxh>
para ver los límites <sxh>kubectl get limitrange -n <nombredelnamespace></sxh>
Limita el consumo de recursos por namespace
<sxh yaml> 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 </sxh>
Tambien es posible limitar el número de pods de un namespace <sxh yaml > — apiVersion: v1 kind: Namespace metadata:
name: pre labels: name: pre
— apiVersion: v1 kind: ResourceQuota metadata:
name: pod-demo namespace: pre
spec:
hard: pods: "3"
</sxh>