1分钟计算k8s中Pod的CPU和内存使用率!

kubectl

共 2903字,需浏览 6分钟

 ·

2024-04-10 22:16

如何一分钟计算k8s中Pod的CPU和内存使用率?

首先需要确保你的集群中部署了Metrics Server,因为Kubernetes本身不直接提供资源使用率的百分比视图。Metrics Server会收集节点和Pod的资源使用情况,但它提供的是绝对值而不是百分比。要获取百分比,你需要手动计算或使用第三方工具和脚本来辅助完成这一任务。

使用kubectl top命令来获取Pod的资源使用情况的绝对值(如CPU和内存使用量),然后结合节点或Pod资源的总量来手动计算百分比。这里是如何操作的:

  1. 使用kubectl top pod命令来查看Pod的CPU和内存使用情况:

            kubectl top pod  openapi-api-6c7c4c67fd-vwv8v --namespace=test
          

    这将显示指定Pod的CPU和内存使用量(注意,这里没有直接的百分比)。

  2. 你需要知道分配给该Pod的CPU和内存资源的总量,这可以通过查看Pod的定义来获取:

            kubectl describe pod openapi-api-6c7c4c67fd-vwv8v --namespace=test
          
  3. 有了这两个信息(当前使用量和总量),你可以手动计算出使用率的百分比。

例如,如果一个Pod当前使用500m CPU(即0.5个CPU核心),而它被分配了1个CPU核心,那么CPU使用率就是50%。

如果你需要自动化地获取百分比,可能需要编写一个脚本,使用kubectl命令获取必要的数据,然后进行计算。目前,没有直接的kubectl命令可以直接输出资源使用的百分比。这种自动化通常涉及到解析kubectl topkubectl 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和内存使用率。

      
        
          #!/bin/bash
        
      
      
        
          
# 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%"

下面是上述脚本的执行逻辑如下:

b25b20e04c2aad200c32fee4d9bc351e.webp


浏览 15
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报