Limitar los rangos en Kubernetes

Con Limit Range, podemos restringir el consumo y la creación de recursos, ya que por defecto los contenedores se ejecutan con recursos informáticos ilimitados en un clúster Kubernetes. Un Pod puede consumir tanta CPU y memoria como se defina en el Rango de Límites.

Un Rango de Límites proporciona restricciones sobre:

  • Recursos mínimos y máximos
  • La solicitud de almacenamiento mínima y máxima por PersistentVolumeClaim
  • Una relación entre solicitud y límite para un recurso en un espacio de nombres.
  • Establecer la solicitud/límite por defecto para los recursos informáticos

Para saber más sobre los Rangos de Límite visita la documentación oficial de Kubernetes aquí.

En este artículo, crearemos un rango de límites y veremos cómo establecer valores mínimos y máximos para los recursos de CPU utilizados por los Contenedores y Pods. Veremos diferentes escenarios con Límite y Solicitud en la CPU.

Requisitos previos

  1. Clúster Kubernetes con al menos 1 nodo trabajador.
    Si quieres aprender a crear un Clúster Kubernetes, haz clic aquí. Esta guía te ayudará a crear un clúster Kubernetes con 1 Maestro y 2 Nodos en Instancias EC2 de AWS Ubuntu 18.04.

¿Qué vamos a hacer?

  1. Crear un LimitRange en el espacio de nombres por defecto.
  2. Crear Pods con Límite y Rango de CPU en el espacio de nombres por defecto

Crea un LimitRange en el espacio de nombres por defecto

Crear un archivo para definir un rango de límites en el espacio de nombres por defecto.

vim set-limit-range.yml
apiVersion: v1
kind: LimitRange
metadata:
  name: set-limit-range
spec:
  limits:
  - max:
      cpu: "800m"
    min:
      cpu: "200m"
    type: Container

set-limit-range-definition

Obtén una lista de los rangos de límites existentes en el espacio de nombres por defecto y crea uno utilizando el archivo creado en el paso anterior.

kubectl get limitrange
kubectl create -f set-limit-range.yml
kubectl get limitrange
kubectl describe limitrange set-limit-range

crear-rango-límite

En la captura de pantalla anterior, se puede ver que hemos creado un rango de límites que define la CPU como «Min=200m» y «Max=800m».

Esto significa que los pods del espacio de nombres por defecto no pueden tener una CPU «menor que Min=200m» y «mayor que Max=800m».

Crear pods con límite y rango de CPU en el espacio de nombres por defecto

Pod con límite

Crea una definición de pod que solicite una CPU superior a 200m e inferior a 800m

vim pod-with-cpu-within-range.yml
apiVersion: v1
kind: Pod
metadata:
  name: pod-with-cpu-within-range
spec:
  containers:
  - name: pod-with-cpu-within-range
    image: nginx
    resources:
      limits:
        cpu: "800m"
      requests:
        cpu: "500m"

pod-con-pu-dentro-de-la-definición

Enumera los pods existentes y crea un nuevo pod con el archivo creado en el paso anterior.

kubectl get pods
kubectl create -f pod-with-cpu-within-range.yml
kubectl get pods
kubectl describe pod pod-with-cpu-within-range

crear-pod-con-cpu-dentro-del-rango

En la captura de pantalla anterior, se puede ver que el pod se ha creado con la solicitud de CPU y el límite definidos.

Pod con más CPU:

Esta vez vamos a crear un pod con límite de CPU 1,5, es decir, más de 800m.

vim pod-with-cpu-more-than-limit.yml
apiVersion: v1
kind: Pod
metadata:
  name: pod-with-cpu-more-than-limit
spec:
  containers:
  - name: pod-with-cpu-more-than-limit
    image: nginx
    resources:
      limits:
        cpu: "1.5"
      requests:
        cpu: "500m"

pod-con-pu-más-que-definición-de-límite

Obtén una lista de pods existentes e intenta crear un nuevo pod que tenga un límite de CPU «1,5» más que «800m» lo que hemos definido en el rango de límites.

kubectl get pods
kubectl create -f pod-with-cpu-more-than-limit.yml

intentar-crear-pod con-cpu-más-que-límite

En la captura de pantalla anterior, se puede ver que el pod no se ha creado.

Pod con menos CPU:

Ahora vamos a intentar crear un pod que solicite «CPU=100m» que sea inferior a «200m» que hemos definido en el rango de límites.

vim pod-with-cpu-less-than-limit.yml
apiVersion: v1
kind: Pod
metadata:
  name: pod-with-cpu-less-than-limit
spec:
  containers:
  - name: pod-with-cpu-less-than-limit
    image: nginx
    resources:
      limits:
        cpu: "800m"
      requests:
        cpu: "100m"

Ahora obtén una lista de los pods existentes e intenta crear un pod con el archivo de definición anterior.

kubectl get pods
kubectl create -f pod-with-cpu-less-than-limit.yml

Esta vez también fallará la creación del pod ya que hemos solicitado CPU=100m menos que 200m que hemos definido en el rango límite.

Pod sin CPU:

En este escenario no vamos a definir ninguna solicitud o límite para la CPU.

vim pod-with-no-cpu.yml
apiVersion: v1
kind: Pod
metadata:
  name: pod-with-no-cpu
spec:
  containers:
  - name: pod-with-no-cpu
    image: vish/stress

pod-con-sin-definición-de-cpu

Ahora vamos a intentar crear un pod y ver su descripción.

kubectl get pods
kubectl create -f pod-with-no-cpu.yml
kubectl describe pods pod-with-no-cpu

crear-pod con-cpu-menos-que-limite

En la captura de pantalla anterior, se puede ver que si no especificamos ninguna solicitud o límite para la CPU, el POD obtiene una asignación de CPU igual al límite especificado en el rango de límites, es decir, en este ejemplo, el pod obtuvo un límite de CPU y una solicitud igual a 800m que es el límite especificado en el rango de límites

Conclusión

En este artículo, hemos visto los pasos para crear un rango de límites en el espacio de nombres por defecto. A continuación, hemos probado diferentes escenarios para el límite y la solicitud de CPU en el pod.

También te podría gustar...