meta data de esta página
  •  

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anteriorRevisión previa
Próxima revisión
Revisión previa
virtualizacion:kubernetes:limitar [262020/10/ 21:33] lcvirtualizacion:kubernetes:limitar [182023/01/ 13:37] (actual) – editor externo 127.0.0.1
Línea 1: Línea 1:
 +==== 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.
 +
 +<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>
 +
 +==== 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
 +<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>
 +
 +<note warning>Limitrange sólo se aplica en el namespace en el que este definido por lo que es muy importante que los pods se definan también dentro del namespace donde lo hemos declarado</note>
 +
 +==== ResourceQuota ====
 +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>
 + <note>En un RequestQuota es obligatorio definir los **requests** y los **limits**</note>
 +
 +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>
 +===== Referencias ====
 +  * https://github.com/ricardoandre97/k8s-resources/blob/master/limits-requests/limit-ram.yaml
 +  * https://github.com/ricardoandre97/k8s-resources/blob/master/limitRange/
 +  * https://v1-17.docs.kubernetes.io/docs/concepts/policy/limit-range/