要查看 Kubernetes 集群中各个 Pod 占用的资源大小(包括 CPU 和内存),可以使用多种方法。以下是详细的步骤介绍每种方案。
方案 1: 使用 kubectl top
命令
步骤
-
确保 Metrics Server 已安装:
-
kubectl top
命令依赖于 Metrics Server。您可以使用以下命令检查 Metrics Server 是否已安装:bashkubectl get pods -n kube-system | grep metrics-server
-
如果没有安装,可以通过以下命令安装 Metrics Server:
bashkubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
-
-
查看所有 Pod 的资源使用情况:
-
使用以下命令查看所有命名空间中 Pod 的 CPU 和内存使用情况:
bashkubectl top pods --all-namespaces
-
如果只想查看特定命名空间中的 Pod,可以使用:
bashkubectl top pods -n <namespace>
-
示例输出
plaintext
NAMESPACE NAME CPU(cores) MEMORY(bytes)
default my-app-1 500m 128Mi
default my-app-2 300m 256Mi
kube-system kube-dns 100m 64Mi
说明
CPU(cores)
: 显示 Pod 当前使用的 CPU 核心数。MEMORY(bytes)
: 显示 Pod 当前使用的内存量。
方案 2: 使用 kubectl describe
命令
步骤
- 查看特定 Pod 的详细信息 :
-
使用以下命令查看特定 Pod 的资源请求和限制:
bashkubectl describe pod <pod-name> -n <namespace>
-
示例输出
plaintext
Name: my-app-1
Namespace: default
Priority: 0
Node: node-1/192.168.1.1
Start Time: Mon, 01 Nov 2023 10:00:00 +0000
Labels: app=my-app
Annotations: <none>
Status: Running
IP: 10.244.1.2
Containers:
app-container:
Container ID: docker://abcdef123456
Image: my-app-image:latest
Port: 8080/TCP
State: Running
Started: Mon, 01 Nov 2023 10:00:01 +0000
Ready: True
Restart Count: 0
Limits:
cpu: 1
memory: 1Gi
Requests:
cpu: 500m
memory: 256Mi
说明
- Limits: 表示 Pod 可以使用的最大 CPU 和内存。
- Requests: 表示 Pod 启动时请求的 CPU 和内存量。
方案 3: 使用 Prometheus 和 Grafana
如果您已经配置了 Prometheus 和 Grafana,可以在 Grafana 中查看 Pod 的资源使用情况,并创建可视化仪表板。
步骤
-
确保 Prometheus 和 Grafana 已安装:
- 如果尚未安装,请参考之前的安装步骤。
-
在 Grafana 中查看指标:
- 登录 Grafana,创建一个新的仪表板。
- 使用 Prometheus 查询来查看 CPU 和内存使用情况。
示例 Prometheus 查询
-
查询所有 Pod 的 CPU 使用情况:
plaintextsum(rate(container_cpu_usage_seconds_total{container_name!="POD"}[5m])) by (pod_name)
-
查询所有 Pod 的内存使用情况:
plaintextsum(container_memory_usage_bytes{container_name!="POD"}) by (pod_name)
说明
- 这些查询将返回每个 Pod 的 CPU 和内存使用情况,可以在 Grafana 中生成图表或表格进行可视化。
方案 4: 使用 Kube Metrics API
Kubernetes Metrics API 提供了 Pod 和节点的资源使用情况,可以通过直接调用 API 来获取数据。
步骤
-
确保 Metrics Server 已安装:
- 请参考方案 1 中的步骤。
-
查询 Pod 资源使用情况:
-
使用以下命令获取所有 Pod 的 CPU 和内存使用情况:
bashkubectl get --raw "/apis/metrics.k8s.io/v1beta1/pods" | jq .
-
这将返回一个 JSON 对象,其中包含所有 Pod 的资源使用情况。
-
示例输出
json
{
"kind": "PodMetricsList",
"apiVersion": "metrics.k8s.io/v1beta1",
"items": [
{
"metadata": {
"name": "my-app-1",
"namespace": "default",
...
},
"containers": [
{
"name": "app-container",
"usage": {
"cpu": "500m",
"memory": "128Mi"
}
}
]
},
...
]
}
说明
- 通过解析 JSON 输出,您可以获取每个 Pod 的 CPU 和内存使用情况。
方案 5: 使用 Kubernetes Dashboard
Kubernetes Dashboard 是一个基于 Web 的用户界面,可以用于管理和监控 Kubernetes 集群。
步骤
-
安装 Kubernetes Dashboard:
bashkubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.5.0/aio/deploy/recommended.yaml
-
获取访问凭证 :
创建一个服务账户并赋予其适当的权限:
bashkubectl create serviceaccount dashboard-admin -n kubernetes-dashboard kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kubernetes-dashboard:dashboard-admin
-
获取 Token:
bashkubectl get secret -n kubernetes-dashboard | grep dashboard-admin-token kubectl describe secret <secret-name> -n kubernetes-dashboard
-
访问 Dashboard:
-
启动代理并访问 Dashboard:
bashkubectl proxy
-
打开浏览器,访问
http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/
-
-
登录:
- 使用上一步获取的 Token 登录。
6. 监控 Pod 资源使用情况
在 Dashboard 中,您可以查看各个 Pod 的 CPU 和内存使用情况,提供友好的用户界面。
总结
通过以上方案,您可以轻松查看 Kubernetes 集群中各个 Pod 的资源使用情况,包括 CPU 和内存。选择最适合您的需求的方案,确保集群在高负载情况下保持稳定。