1分钟计算k8s中Pod的CPU和内存使用率!
如何一分钟计算k8s中Pod的CPU和内存使用率?
首先需要确保你的集群中部署了Metrics Server,因为Kubernetes本身不直接提供资源使用率的百分比视图。Metrics Server会收集节点和Pod的资源使用情况,但它提供的是绝对值而不是百分比。要获取百分比,你需要手动计算或使用第三方工具和脚本来辅助完成这一任务。
使用kubectl top
命令来获取Pod的资源使用情况的绝对值(如CPU和内存使用量),然后结合节点或Pod资源的总量来手动计算百分比。这里是如何操作的:
-
使用
kubectl top pod
命令来查看Pod的CPU和内存使用情况:kubectl top pod openapi-api-6c7c4c67fd-vwv8v --namespace=test
这将显示指定Pod的CPU和内存使用量(注意,这里没有直接的百分比)。
-
你需要知道分配给该Pod的CPU和内存资源的总量,这可以通过查看Pod的定义来获取:
kubectl describe pod openapi-api-6c7c4c67fd-vwv8v --namespace=test
-
有了这两个信息(当前使用量和总量),你可以手动计算出使用率的百分比。
例如,如果一个Pod当前使用500m CPU(即0.5个CPU核心),而它被分配了1个CPU核心,那么CPU使用率就是50%。
如果你需要自动化地获取百分比,可能需要编写一个脚本,使用kubectl
命令获取必要的数据,然后进行计算。目前,没有直接的kubectl
命令可以直接输出资源使用的百分比。这种自动化通常涉及到解析kubectl top
和kubectl describe
命令的输出,然后基于这些信息计算出百分比。
对于更高级的监控和可视化,考虑使用如Prometheus和Grafana这样的工具,这些工具可以配置用于显示资源使用率的百分比,并提供丰富的可视化选项。
举个例子,如果这个Pod被分配了1核CPU和100Mi内存,那么:
-
CPU使用率的计算公式为:
(当前使用量 / 总分配量) * 100
。在这个例子中,如果假设总分配量为1核(即1000m),那么CPU使用率为(1m / 1000m) * 100 = 0.1%
。 -
内存使用率的计算公式同样为:
(当前使用量 / 总分配量) * 100
。如果假设总分配量为100Mi,那么内存使用率为(28Mi / 100Mi) * 100 = 28%
。
下面是通过脚本实现统计Pod的CPU和内存使用率。
# Pod名称和命名空间
POD_NAME="openapi-api-6c7c4c67fd-vwv8v"
NAMESPACE="test"
# 获取Pod的CPU和内存请求量
CPU_REQUEST=$(kubectl get pod $POD_NAME -n $NAMESPACE -o=jsonpath='{.spec.containers[*].resources.requests.cpu}')
MEM_REQUEST=$(kubectl get pod $POD_NAME -n $NAMESPACE -o=jsonpath='{.spec.containers[*].resources.requests.memory}')
# 将CPU转换为millicores,内存转换为Mi
CPU_REQUEST_MILLI=$(echo $CPU_REQUEST | sed 's/m//') # 假设CPU请求以m结尾
MEM_REQUEST_MI=$(echo $MEM_REQUEST | sed 's/Mi//') # 假设内存请求以Mi结尾
# 使用kubectl top获取当前的CPU和内存使用量
CURRENT_CPU_USAGE=$(kubectl top pod $POD_NAME -n $NAMESPACE --no-headers | awk '{print $2}' | sed 's/m//')
CURRENT_MEM_USAGE=$(kubectl top pod $POD_NAME -n $NAMESPACE --no-headers | awk '{print $3}' | sed 's/Mi//')
# 计算使用率百分比
CPU_USAGE_PERCENT=$(echo "scale=2; $CURRENT_CPU_USAGE / $CPU_REQUEST_MILLI * 100" | bc)
MEM_USAGE_PERCENT=$(echo "scale=2; $CURRENT_MEM_USAGE / $MEM_REQUEST_MI * 100" | bc)
echo "CPU Usage: $CPU_USAGE_PERCENT%"
echo "Memory Usage: $MEM_USAGE_PERCENT%"
下面是上述脚本的执行逻辑如下: