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
- 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.
- 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.
- 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
- Crea un namespace llamado
test-namespace
. - 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
- Crea un pod en el namespace
test-namespace
con un contenedor que use la imagennginx
. - Establece las solicitudes de recursos a 100 MiB de memoria y 200 milicores de CPU.
- 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
- ¿Qué es Kubernetes?
- Arquitectura de Kubernetes
- Conceptos y Terminología Clave
- Configuración de un Clúster de Kubernetes
- CLI de Kubernetes (kubectl)
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
- Monitoreo con Prometheus
- Registro con Elasticsearch, Fluentd y Kibana (EFK)
- Verificaciones de Salud y Sondas
- Servidor de Métricas
Módulo 8: Seguridad en Kubernetes
- Control de Acceso Basado en Roles (RBAC)
- Políticas de Seguridad de Pods
- Seguridad de Red
- Seguridad de Imágenes
Módulo 9: Escalado y Rendimiento
- Autoescalado Horizontal de Pods
- Autoescalado Vertical de Pods
- Autoescalado de Clúster
- Ajuste de Rendimiento
Módulo 10: Ecosistema y Herramientas de Kubernetes
Módulo 11: Estudios de Caso y Aplicaciones del Mundo Real
- Despliegue de una Aplicación Web
- CI/CD con Kubernetes
- Ejecución de Aplicaciones con Estado
- Gestión Multi-Clúster