kubectl top
是一个用于查看 Kubernetes
集群中资源使用情况的命令。它可以显示节点或Pod的CPU、内存和存储的使用情况。该命令要求正确配置Metrics Server
并在服务器上工作。
什么是Metrics Server
Metrics Server
是 Kubernetes
内置自动缩放管道的可扩展、高效的容器资源指标来源。Metrics Server
从 Kubelets
收集资源指标,并通过 Metrics API
在 Kubernetes apiserver
中公开它们,以供 Horizontal Pod Autoscaler
和Vertical Pod Autoscaler
使用。Metrics API
也可以通过访问kubectl top
,从而更容易调试自动缩放管道。
安装Metrics Server
- 先到Metrics Server项目地址,查询对应版本支持那个K8S版本。如下图:
- 由于我安装的k8S版本是1.28.2,所以,需要下载上图的1.21+的版本。执行如下的命令:
wget https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/high-availability-1.21+.yaml
- 修改components.yaml配置文件,把镜像的地址修改阿里云镜像,并添加一个参数
kubelet-insecure-tls
,如下
containers: - args: - --cert-dir=/tmp - --secure-port=10250 - --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname - --kubelet-use-node-status-port - --metric-resolution=15s - --kubelet-insecure-tls image: registry.aliyuncs.com/google_containers/metrics-server:v0.7.0 imagePullPolicy: IfNotPresent
- 执行
kubectl apply -f components.yaml
命令部署。成功后如下图,这样就可以通过kubectl top
命令查看节点和pod的资源情况。
kubectl top基本用法
详细的用法可以通过kebectl top pod|node -h
。 以下列举工作中常用的命令:
- 查看集群中所有节点资源使用情况:
kubectl top nodes
- 查看集群中某个节点资源使用情况
kubectl top nodes k8s-node1
- 查询集群中所有Pod资源使用情况:
kubectl top pods -A # -A 是列举所有命名空间的pod,默认是default名空间
- 查询集群中所有Pod资源情况,并安装CPU利用进行排序:
kubectl top pods -A --sort-by=cpu
sort-by: 支持两个参数 cpu和memory
- 通过lebel值查询Pod资源情况
kubectl top pod -l k8s-app=kube-dns -A
CKA真题
切换 k8s 集群环境:kubectl config use-context k8s
Task
找出标签是 name=cpu-user 的 Pod,并过滤出使用 CPU 最高的 Pod,然后把它的名字写在已经存在的 /opt/KUTR00401/KUTR00401.txt 文件里(注意他没有说指定 namespace,所以需要使用 -A 指定所有 namespace)。
我先在K8S环境新建了两个Pod模拟高CPU的应用,如下图:
解题思路:
#切换集群 kubectl config use-context k8s # 通过管道符,一条命令把结果保存到文件中 kubectl top pod -l name=cpu-user --sort-by=cpu --no-headers=true -A \ | head -n 1 | awk '{print $2}' >> /opt/KUTR00401/KUTR00401.txt
- -A:列出所有的命名空间的Pod
- --no-headers=true:返回的结果没有表头
https://player.bilibili.com/player.html?bvid=BV1um411f7Ns&p=16&page=16&autoplay=0