k8s通過request(下限)和limit(上限)限制容器的CPU和內存的使用范圍
在容器運行的過程中需要實時監控容器對cpu的使用情況
1、 容器用戶態占用CPU的時間總和
container_cpu_user_seconds_total
2、 容器內核態占用CPU的時間總和
container_cpu_system_seconds_total
3、 container_cpu_user_seconds_total與container_cpu_system_seconds_total的總和,代表容器占用CPU的總和
container_cpu_usage_seconds_total
4、 由於這些指標都是計數器類型的,所以可以通過rate函數獲取樣本變化率
獲取5min的樣本變化率的表達式如下:
sum (rate(container_cpu_usage_seconds_total[5m])) by (container_name)
5、容器的每次CPU消耗超過設置的上限后,都會以累加的方式得到記錄
在 container_cpu_cfs_throttled_seconds_total 指標中可以通過rate函數獲取變化率
sum (rate(container_cpu_cfs_throttled_seconds_total[5m])) by (container_name)
如果容器的這個指標過高,則需要調整CPU的上限或者查看程序是有死循環等問題
6、 查詢容器相關的 數據:查詢所有POD的1min內CPU使用情況,用到的數據指標是<container_cpu_usage_seconds_total>
由於查詢到的數據都是容器相關的,所以最好按照Pod聚合,對應的promQL語句如下
sum by (pod) ( rate(container_cpu_usage_seconds_total{image!="",pod!=""}[1m]))