您现在的位置是:首页 >学无止境 >kubectl top pod输出的cpu、内存使用率是怎么计算的网站首页学无止境
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和内存使用量。