揭秘高效运维:如何用kubectl top命令实时监控K8s资源使用情况?

往期精彩:

  • 提升CKA考试胜算:一文带你全面了解RBAC权限控制!

kubectl top 是一个用于查看 Kubernetes 集群中资源使用情况的命令。它可以显示节点或Pod的CPU、内存和存储的使用情况。该命令要求正确配置Metrics Server并在服务器上工作。

什么是Metrics Server

Metrics ServerKubernetes 内置自动缩放管道的可扩展、高效的容器资源指标来源。Metrics ServerKubelets 收集资源指标,并通过 Metrics API Kubernetes apiserver 中公开它们,以供 Horizontal Pod AutoscalerVertical Pod Autoscaler 使用。Metrics API 也可以通过访问kubectl top,从而更容易调试自动缩放管道。

安装Metrics Server

  1. 先到Metrics Server项目地址,查询对应版本支持那个K8S版本。如下图:

揭秘高效运维:如何用kubectl top命令实时监控K8s资源使用情况?_第1张图片

  1. 由于我安装的k8S版本是1.28.2,所以,需要下载上图的1.21+的版本。执行如下的命令:
wget  https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/high-availability-1.21+.yaml
  1. 修改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
  1. 执行kubectl apply -f components.yaml命令部署。成功后如下图,这样就可以通过kubectl top 命令查看节点和pod的资源情况。

揭秘高效运维:如何用kubectl top命令实时监控K8s资源使用情况?_第2张图片

kubectl top基本用法

详细的用法可以通过kebectl top pod|node -h。 以下列举工作中常用的命令:

  1. 查看集群中所有节点资源使用情况:
kubectl top nodes 

执行结果

  1. 查看集群中某个节点资源使用情况
kubectl top nodes k8s-node1

执行结果

  1. 查询集群中所有Pod资源使用情况:
kubectl top pods  -A  

-A 是列举所有命名空间的pod,默认是default名空间

揭秘高效运维:如何用kubectl top命令实时监控K8s资源使用情况?_第3张图片

  1. 查询集群中所有Pod资源情况,并安装CPU利用进行排序:
 kubectl top pods  -A --sort-by=cpu

sort-by: 支持两个参数 cpu和memory

揭秘高效运维:如何用kubectl top命令实时监控K8s资源使用情况?_第4张图片

  1. 通过lebel值查询Pod资源情况
kubectl top pod -l k8s-app=kube-dns  -A

揭秘高效运维:如何用kubectl top命令实时监控K8s资源使用情况?_第5张图片

CKA真题

揭秘高效运维:如何用kubectl top命令实时监控K8s资源使用情况?_第6张图片

切换 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:返回的结果没有表头,如下图

你可能感兴趣的:(K8S,CKA,运维,kubernetes,容器,v1.28.2,CKA)