Cara mengoptimalkan batas sumber daya Kubernetes

Menemukan nilai optimal untuk membatasi sumber daya Kubernetes bukanlah tugas yang mudah, karena Anda perlu menemukan jalan tengah antara kendala yang terlalu ketat dan tidak cukup.





Dalam artikel ini, yang merupakan kelanjutan dari seri manajemen sumber daya di Kubernetes , Anda akan mempelajari cara memilih batas sumber daya Kubernetes yang tepat: mulai dari menemukan container tanpa batasan apa pun hingga menentukan parameter optimal yang harus Anda tetapkan di cluster Anda.





Prometheus adalah salah satu solusi paling populer untuk memantau cluster Kubernetes. Oleh karena itu, setiap langkah dalam tutorial ini berisi contoh kueri PromQL .





Penemuan kontainer tanpa membatasi sumber daya

Langkah pertama dalam memilih batas yang benar adalah mendeteksi kontainer tanpa batas.





. 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