Puntos clave: Los recursos de cómputo de Kubernetes gestionan la asignación de CPU y memoria para los pods, asegurando un uso eficiente de los recursos. Esta guía detalla las solicitudes de recursos, límites y clases de calidad de servicio (QoS) para mantener el rendimiento de la aplicación.
- Los recursos de cómputo incluyen CPU y memoria medibles para pods.
- Las clases de QoS priorizan la terminación de pods según la disponibilidad de recursos.
En el mundo Kubernetes, son dos tipos de recursos:
- Cálculo de recursos, como CPU (unidades) y memoria (bytes), que pueden medirse.
- Recursos de API, como pods, servicios, etc., que son simplemente objetos de K8.
En este artículo, explicaré los recursos de cómputo.
Calidad del servicio (QoS)
Por defecto, cuando te despliega un pod, los contenedores pod consumen esencialmente los recursos de cómputo son disponibles en esa instancia del nodo trabajador. Eso está genial—entonces no tenemos que preocuparnos por nada, ¿verdad?
¿Qué ocurre cuando uno de los contenedores consume más recursos de CPU y memoria que otros? ¿Qué ocurre con los otros contenedores pod que se ejecutan en el nodo? Está muy probable que algunos contenedores fallen por falta de recursos; si son ejecutamos una aplicación con una base de código pobre, eso puede tener un impacto en el negocio.
Para resolver este problema, Kubernetes tiene solicitudes de recursos y límites que ayudan a controlar la cantidad de recursos que consume un contenedor pod, asegurando el máximo nivel de calidad de servicio (QoS). están importante señalar que la QoS (solicitudes y límites) también puede aplicarse a espacios de nombres, no solo a pods. De este modo, si te varios equipos de desarrollo desplegándose en un clúster, te puede controlar el consumo de recursos dependiendo de la prioridad del servicio.
Cómo funcionan las solicitudes y límites de recursos
Fundamentalmente, un nodo o instancia de trabajo solo asigna una cierta porción de su recurso total de cómputo para que los pods utiliza así que esa parte están lo que están compartido entre todos los pods programados en ese nodo. El planificador de Kubernetes se asegura de que la suma de todos los recursos de cómputo de los contenedores que se ejecutan en la instancia no supere el recurso total asignado para los pods. están importante conocer la diferencia entre petición y límite.
- La petición están cuántos recursos garantizará Kubernetes para un pod.
- El límite están la cantidad máxima de recursos que Kubernetes permite que un pod use.
Ten en cuenta que la planificación de pods están basada en la solicitud, no en el límite, pero un pod y sus contenedores no son permitido superar el límite especificado. Cuando te despliega un pod, una comprobación de capacidad determina si la cantidad total de recursos de cómputo solicitados están no mayor que lo que el nodo puede asignar.
Cómo se aplican son las solicitudes y los límites
Cómo se son aplicados la petición y el límite está basado en si el recurso está comprimible o incompresible. Un recurso compresible puede ser limitado, pero un recurso impresionante no tanto. Por ejemplo, la CPU se está considerada compresible y la memoria está incompresible.
Los pods son garantizados con la cantidad de CPU solicitada; pueden o no Obtén más CPU dependiendo de que otros pods estén en funcionamiento y cualquier cosa que supere el límite están limitados. Las solicitudes de memoria pod también son garantizadas, pero cuando los pods superan el límite de memoria, el proceso dentro del contenedor que están usando más memoria se eliminará. El pod no será terminado, pero el proceso dentro del contenedor que usa la memoria será terminado.
Son momentos en los que un nodo está completamente sin recursos de cómputo; la suma de todos los recursos de cálculo de los contenedores en ejecución está mayor que el recurso de cómputo del propio nodo. En casos extremos como este, tenemos que Comienza a matar contenedores en marcha en el nodo. Idealmente, primero eliminamos contenedores menos críticos para liberar recursos. Entonces, ¿cómo le decimos a Kubernetes qué pod debe ir primero en caso de que todos son los recursos del nodo se agoten? Usando clases QoS.
Podemos designar tres tipos de clases—mejor esfuerzo, garantizado y burstable—para indicar al sistema qué pods terminar primero.
- El mejor esfuerzo. Pods sin petición ni límites, que son eliminados primero en caso de agotamiento de recursos.
Containers:
name: foo
Resources:
name: bar
resources:
- Garantizado. Pods donde son configurados tanto límite como (opcionalmente) petición para todos los recursos (CPU y memoria) y sus valores son los mismos. Estos pods son de alta prioridad, por lo tanto solo son terminados si son superiores al límite y no son pods de menor prioridad que terminar.
containers:
name: pong
resources:
limits:
cpu: 100m
memory: 100Mi
requests:
cpu: 100m
memory: 100Mi
- Burstable. Pods donde son se establecen límites de solicitud y (opcionalmente) para uno o más recursos (CPU y/o memoria) y sus valores NO son los mismos. Estos pods son terminados cuando no son pods de mejor esfuerzo para terminar.
containers:
name: foo
resources:
limits:
memory: 1Gi
name: bar
resources:
limits:
cpu: 100m
Como el tiempo de actividad de las aplicaciones está formando parte de los SLA empresariales, es importante aplicar recursos adecuados a estas aplicaciones. Entender cómo planificar correctamente estos recursos está crucial para el negocio. Usar peticiones y límites ayudará al equipo a asignar correctamente recursos a aplicaciones críticas y el QoS ayudará a controlar el ciclo de vida de la aplicación en caso de agotamiento de recursos en el nodo trabajador. Los equipos también pueden Define estas peticiones y límites a nivel de espacio de nombres, de modo que los recursos pueden dividirse en función de los equipos de desarrollo.
Guía Kubernetes
- ¿Qué es Kubernetes (K8s)? Un tutorial básico de Kubernetes
- Mejores prácticas de Kubernetes para mejorar la eficiencia del clúster
- Mejores Prácticas: Cómo Diseñar Aplicaciones para Kubernetes
- Kubernetes Pods: Una introducción
- Kubernetes ReplicaSets: Una breve introducción
- Despliegues de Kubernetes completamente explicados
- Cómo utilizar y gestionar los DaemonSets de Kubernetes
- Cómo funcionan los servicios de Kubernetes
- Uso de Kubernetes Port, TargetPort y NodePort
- Creación y uso de ConfigMaps en Kubernetes
- Introducción a Kubernetes Secrets
- Fundamentos de las redes de Kubernetes
- Explicación de Kubernetes Ingress
- Introducción a las Listas de Helm de Kubernetes
- ¿Qué están el patrón de operador Kubernetes?
- Despliegue de PostgreSQL como un StatefulSet en Kubernetes
- Definición de Recursos Personalizados (CRDs) de Kubernetes Explicada
- 3 Patrones Kubernetes para aplicaciones nativas en la nube
- Explicación de los recursos de cómputo de Kubernetes
- Kubernetes Security for DevOps Pipelines
- Uso de spinnaker con Kubernetes para entrega continua
- Multi-Clústeres Kubernetes: Cómo y por qué utilizarlos
- Monitorización de Kubernetes: Una guía completa
- Kubernetes vs Docker: Una comparación rápida
- Kubernetes vs Docker Swarm: Comparando herramientas de orquestación de contenedores
- Kubernetes vs OpenShift: ¿Cuál es la diferencia?
- Certificaciones Kubernetes: Cómo y por qué Obtén la certificación
Estas publicaciones son mías y no representan necesariamente la posición, estrategias u opinión de BMC.