您现在的位置是:首页 >学无止境 >kubectl top pod输出的cpu、内存使用率是怎么计算的网站首页学无止境

kubectl top pod输出的cpu、内存使用率是怎么计算的

panbuhei 2024-06-17 10:48:56
简介kubectl top pod输出的cpu、内存使用率是怎么计算的

使用 kk 创建 k8s 集群

文档:https://github.com/kubesphere/kubekey/blob/master/README_zh-CN.md

1、下载 kk

export KKZONE=cn
curl -sfL https://get-kk.kubesphere.io | sh -
yum -y install conntrack socat

2、生成配置文件,根据环境修改配置文件
注意: 由于 Kubernetes 暂不支持大写 NodeName, hostname 中包含大写字母将导致后续安装过程无法正常结束

./kk create config --with-kubernetes v1.24.1 -f panbuhei-k8s.yml

3、使用配置文件创建 k8s 集群

./kk create cluster -f panbuhei-k8s.yml

4、使用配置文件为 k8s 集群添加节点
将新节点的信息添加到集群配置文件,然后应用更改。

./kk add nodes -f panbuhei-k8s.yml

·

Metrics Server

https://github.com/kubernetes-sigs/metrics-server
https://kubernetes.io/zh-cn/docs/tasks/debug/debug-cluster/resource-metrics-pipeline/

安装 metrics-server

kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml

默认安装时,pod会因为TLS验证失败而一直处于非Running状态,日志中会有报错: x509: cannot validate certificate for 192.168.1.3 because it doesn’t contain any IP SANs" node=“panbuhei”。这时,修改deployment在args部分增加--kubelet-insecure-tls配置可以禁用TLS验证。

kubectl top pod查看cpu测试

1、创建一个nginx工作负载,yaml如下:我们设置cpu的限制为500m,压测时看pod最大可以使用的cpu量。

apiVersion: apps/v1
kind: Deployment
metadata:
  annotations:
  labels:
    app: nginx
  name: nginx
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - image: nginx
        name: nginx
        resources:
          limits:
            cpu: 500m
          requests:
            cpu: 100m

2、使用ab命令进行压测。

# 安装ab命令:yum -y install httpd-devel
ab -c 1000 -n 10000000  http://10.233.122.16/

3、使用kubectl top pod查看。

# 这里需要多次执行命令查看
[root@panbuhei ~]# kubectl top pod
NAME                     CPU(cores)   MEMORY(bytes)
nginx-74477ffc8c-lkkzk   500m         3Mi

·

kubectl top pod 查看内存测试

kubectl top pod命令通过与kubelet节点上运行的cAdvisor(容器监控代理)进行通信,获取每个Pod中各个容器的CPU使用量和内存使用量。然后,它将这些值与Pod的请求资源(在Pod定义中指定的资源限制和请求)进行比较,并计算出CPU使用率和内存使用率。

计算CPU使用率时,kubectl top pod使用的是CPU使用量(CPU usage)除以CPU请求量(CPU request),然后乘以100。这表示CPU使用量相对于请求量的百分比。

计算内存使用率时,kubectl top pod使用的是内存使用量(Memory usage)除以内存请求量(Memory request),然后乘以100。这表示内存使用量相对于请求量的百分比。

请注意,这些计算是基于从kubelet节点上获取的实时指标数据进行的,因此可以提供近似的使用率数据。实际的计算可能会因资源的精确度、采样间隔和聚合方式而有所不同。

··

kubectl top pod命令实际上是通过kubelet的metrics API获取指标数据。您可以直接调用kubelet的metrics API来获取Pod的CPU和内存使用量。在命令行中运行以下命令:

curl -k https://<kubelet-node>:10250/stats/summary

这将返回一个JSON响应,其中包含有关节点上所有Pod的指标数据。您可以在响应中查找您感兴趣的Pod,并检查其CPU和内存使用量。

检查cAdvisor的指标:kubelet使用cAdvisor来收集容器的指标数据。您可以直接访问cAdvisor的metrics API来获取容器的CPU和内存使用量。在命令行中运行以下命令:

curl -k https://<kubelet-node>:4194/api/v1.3/subcontainers/

这将返回一个JSON响应,其中包含有关节点上所有容器的指标数据。您可以在响应中查找您感兴趣的容器,并检查其CPU和内存使用量。

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。