En Kubernetes, la gestión eficiente de los recursos es crucial para asegurar que las aplicaciones funcionen de manera óptima y que los recursos del clúster se utilicen de manera justa y eficiente. Las cuotas y límites de recursos son herramientas esenciales para lograr este objetivo.

Conceptos Clave

  1. Cuotas de Recursos (Resource Quotas)

Las cuotas de recursos permiten a los administradores de clústeres limitar la cantidad de recursos que un namespace puede consumir. Esto es útil para evitar que un solo namespace consuma todos los recursos del clúster, afectando a otras aplicaciones.

  1. Límites de Recursos (Resource Limits)

Los límites de recursos se utilizan para definir la cantidad máxima de recursos (CPU y memoria) que un contenedor puede usar. Esto ayuda a prevenir que un contenedor consuma más recursos de los necesarios, lo que podría afectar a otros contenedores en el mismo nodo.

  1. Solicitudes de Recursos (Resource Requests)

Las solicitudes de recursos especifican la cantidad mínima de recursos que un contenedor necesita para funcionar. Kubernetes utiliza estas solicitudes para decidir en qué nodo programar un pod.

Configuración de Cuotas de Recursos

Para establecer cuotas de recursos en un namespace, se crea un objeto ResourceQuota. A continuación se muestra un ejemplo de cómo definir una cuota de recursos:

apiVersion: v1
kind: ResourceQuota
metadata:
  name: example-quota
  namespace: example-namespace
spec:
  hard:
    pods: "10"
    requests.cpu: "4"
    requests.memory: "8Gi"
    limits.cpu: "10"
    limits.memory: "16Gi"

Explicación del Ejemplo

  • pods: "10": Limita el número total de pods en el namespace a 10.
  • requests.cpu: "4": Limita la cantidad total de CPU solicitada a 4 unidades.
  • requests.memory: "8Gi": Limita la cantidad total de memoria solicitada a 8 GiB.
  • limits.cpu: "10": Limita la cantidad total de CPU que los contenedores pueden usar a 10 unidades.
  • limits.memory: "16Gi": Limita la cantidad total de memoria que los contenedores pueden usar a 16 GiB.

Configuración de Límites de Recursos

Para establecer límites de recursos en un contenedor, se definen en la especificación del pod. A continuación se muestra un ejemplo:

apiVersion: v1
kind: Pod
metadata:
  name: example-pod
spec:
  containers:
  - name: example-container
    image: nginx
    resources:
      requests:
        memory: "64Mi"
        cpu: "250m"
      limits:
        memory: "128Mi"
        cpu: "500m"

Explicación del Ejemplo

  • requests.memory: "64Mi": El contenedor solicita 64 MiB de memoria.
  • requests.cpu: "250m": El contenedor solicita 250 milicores de CPU.
  • limits.memory: "128Mi": El contenedor puede usar hasta 128 MiB de memoria.
  • limits.cpu: "500m": El contenedor puede usar hasta 500 milicores de CPU.

Ejercicio Práctico

Ejercicio 1: Crear una Cuota de Recursos

  1. Crea un namespace llamado test-namespace.
  2. Define una cuota de recursos para test-namespace que limite el número de pods a 5, la CPU solicitada a 2 unidades y la memoria solicitada a 4 GiB.

Solución

# Crear el namespace
apiVersion: v1
kind: Namespace
metadata:
  name: test-namespace
---
# Definir la cuota de recursos
apiVersion: v1
kind: ResourceQuota
metadata:
  name: test-quota
  namespace: test-namespace
spec:
  hard:
    pods: "5"
    requests.cpu: "2"
    requests.memory: "4Gi"

Ejercicio 2: Establecer Límites de Recursos en un Pod

  1. Crea un pod en el namespace test-namespace con un contenedor que use la imagen nginx.
  2. Establece las solicitudes de recursos a 100 MiB de memoria y 200 milicores de CPU.
  3. Establece los límites de recursos a 200 MiB de memoria y 400 milicores de CPU.

Solución

apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
  namespace: test-namespace
spec:
  containers:
  - name: nginx-container
    image: nginx
    resources:
      requests:
        memory: "100Mi"
        cpu: "200m"
      limits:
        memory: "200Mi"
        cpu: "400m"

Resumen

En esta sección, hemos aprendido sobre las cuotas y límites de recursos en Kubernetes. Las cuotas de recursos ayudan a controlar el uso de recursos a nivel de namespace, mientras que los límites de recursos aseguran que los contenedores no consuman más recursos de los necesarios. Estos mecanismos son esenciales para mantener un clúster de Kubernetes eficiente y equilibrado.

En el próximo módulo, exploraremos las redes en Kubernetes, incluyendo la configuración de redes de clúster, tipos de servicios y políticas de red.

Curso de Kubernetes

Módulo 1: Introducción a Kubernetes

Módulo 2: Componentes Principales de Kubernetes

Módulo 3: Gestión de Configuración y Secretos

Módulo 4: Redes en Kubernetes

Módulo 5: Almacenamiento en Kubernetes

Módulo 6: Conceptos Avanzados de Kubernetes

Módulo 7: Monitoreo y Registro

Módulo 8: Seguridad en Kubernetes

Módulo 9: Escalado y Rendimiento

Módulo 10: Ecosistema y Herramientas de Kubernetes

Módulo 11: Estudios de Caso y Aplicaciones del Mundo Real

Módulo 12: Preparación para la Certificación de Kubernetes

© Copyright 2024. Todos los derechos reservados