Cómo optimizar los límites de recursos de Kubernetes

Encontrar valores óptimos para limitar los recursos de Kubernetes no es una tarea fácil, porque necesita encontrar un término medio entre restricciones demasiado estrictas y no suficientes.





En este artículo, que es una continuación de la serie sobre administración de recursos en Kubernetes , aprenderá cómo elegir los límites de recursos de Kubernetes correctos: desde descubrir contenedores sin restricciones hasta determinar los parámetros óptimos que debe establecer en su clúster.





Prometheus es una de las soluciones más populares para monitorear clústeres de Kubernetes. Por lo tanto, cada paso de este tutorial contiene ejemplos de consultas PromQL .





Descubrimiento de contenedores sin limitar los recursos

El primer paso para elegir los límites correctos es detectar contenedores sin límites.





. pods QoS. - . - .





CPU Limit namespace





sum by (namespace)(count by (namespace,pod,container)(kube_pod_container_info{container!=""}) unless sum by (namespace,pod,container)(kube_pod_container_resource_limits{resource="cpu"}))
      
      



Memory Limit namespace





sum by (namespace)(count by (namespace,pod,container)(kube_pod_container_info{container!=""}) unless sum by (namespace,pod,container)(kube_pod_container_resource_limits{resource="memory"}))
      
      



, . ? ! , .





-10 CPU Limits, CPU





topk(10,sum by (namespace,pod,container)(rate(container_cpu_usage_seconds_total{container!=""}[5m])) unless sum by (namespace,pod,container)(kube_pod_container_resource_limits{resource="cpu"}))
      
      



-10 Memory Limits,





topk(10,sum by (namespace,pod,container)(container_memory_usage_bytes{container!=""}) unless sum by (namespace,pod,container)(kube_pod_container_resource_limits{resource="memory"}))
      
      



CPU Limits

, - .





, , :





(sum by (namespace,pod,container)(rate(container_cpu_usage_seconds_total{container!=""}[5m])) / sum by (namespace,pod,container)(kube_pod_container_resource_limits{resource="cpu"})) > 0.8
      
      



Memory Limits

, .





, .





, , :





(sum by (namespace,pod,container)(container_memory_usage_bytes{container!=""}) / sum by (namespace,pod,container)(kube_pod_container_resource_limits{resource="memory"})) > 0.8
      
      



?

— . :





. , .





CPU Limit :





max by (namespace,owner_name,container)((rate(container_cpu_usage_seconds_total{container!="POD",container!=""}[5m])) * on(namespace,pod) group_left(owner_name) avg by (namespace,pod,owner_name)(kube_pod_owner{owner_kind=~"DaemonSet|StatefulSet|Deployment"}))
      
      



Memory Limit :





max by (namespace,owner_name,container)((container_memory_usage_bytes{container!="POD",container!=""}) * on(namespace,pod) group_left(owner_name) avg by (namespace,pod,owner_name)(kube_pod_owner{owner_kind=~"DaemonSet|StatefulSet|Deployment"}))
      
      



99 . 1% . , , .





CPU Limit :





quantile by (namespace,owner_name,container)(0.99,(rate(container_cpu_usage_seconds_total{container!="POD",container!=""}[5m])) * on(namespace,pod) group_left(owner_name) avg by (namespace,pod,owner_name)(kube_pod_owner{owner_kind=~"DaemonSet|StatefulSet|Deployment"}))
      
      



Memory Limit :





quantile by (namespace,owner_name,container)(0.99,(container_memory_usage_bytes{container!="POD",container!=""}) * on(namespace,pod) group_left(owner_name) avg by (namespace,pod,owner_name)(kube_pod_owner{owner_kind=~"DaemonSet|StatefulSet|Deployment"}))
      
      



?

, pods Requests pods. , .





, Kubernetes .





, , . , pods, - .





?

:





100 * sum(kube_pod_container_resource_limits{container!="",resource="memory"} ) / sum(kube_node_status_capacity_memory_bytes)
      
      



:





100 * sum(kube_pod_container_resource_limits{container!="",resource="cpu"} ) / sum(kube_node_status_capacity_cpu_cores)
      
      



, . 100% — , .





, , 125%, , 150% .





. , CPU Requests - 2 CPU Limit - 8. 4 , , .





:





sum by (node)(kube_pod_container_resource_limits{container!=””,resource=”memory”} ) / sum by (node)(kube_node_status_capacity_memory_bytes)
      
      



:





sum by (node)(kube_pod_container_resource_limits{container!=””,resource=”cpu”} ) / sum by (node)(kube_node_status_capacity_cpu_cores)
      
      



, Kubernetes Limits and Requests, , Kubernetes.





, Kubernetes.








All Articles