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.