统计k8s中资源使用情况

#!/bin/bash

# 创建一个包含标题行的 CSV 文件
echo "资源类型,名称,CPU 使用量,内存使用量,CPU 限制,内存限制" > k8s_resources.csv

# 获取所有 StatefulSet 的资源使用情况和限制
statefulsets=$(kubectl get statefulset --all-namespaces -o json)
for namespace in $(echo "$statefulsets" | jq -r '.items[].metadata.namespace' | uniq); do
    echo "正在处理 StatefulSet,命名空间:$namespace"
    sts_names=$(echo "$statefulsets" | jq -r ".items[] | select(.metadata.namespace==\"$namespace\") | .metadata.name")
    for sts_name in $sts_names; do
        echo "正在处理 StatefulSet:$sts_name"
        cpu_usage=$(kubectl describe statefulset "$sts_name" -n "$namespace" | grep "cpu:" | awk '{print $2}')
        memory_usage=$(kubectl describe statefulset "$sts_name" -n "$namespace" | grep "memory:" | awk '{print $2}')
        cpu_limit=$(kubectl get statefulset "$sts_name" -n "$namespace" -ojsonpath='{.spec.template.spec.containers[*].resources.limits.cpu}')
        memory_limit=$(kubectl get statefulset "$sts_name" -n "$namespace" -ojsonpath='{.spec.template.spec.containers[*].resources.limits.memory}')
        echo "StatefulSet,$sts_name,$cpu_usage,$memory_usage,$cpu_limit,$memory_limit" >> k8s_resources.csv
    done
done

# 获取所有 Deployment 的资源使用情况和限制
deployments=$(kubectl get deployment --all-namespaces -o json)
for namespace in $(echo "$deployments" | jq -r '.items[].metadata.namespace' | uniq); do
    echo "正在处理 Deployment,命名空间:$namespace"
    deploy_names=$(echo "$deployments" | jq -r ".items[] | select(.metadata.namespace==\"$namespace\") | .metadata.name")
    for deploy_name in $deploy_names; do
        echo "正在处理 Deployment:$deploy_name"
        cpu_usage=$(kubectl describe deployment "$deploy_name" -n "$namespace" | grep "cpu:" | awk '{print $2}')
        memory_usage=$(kubectl describe deployment "$deploy_name" -n "$namespace" | grep "memory:" | awk '{print $2}')
        cpu_limit=$(kubectl get deployment "$deploy_name" -n "$namespace" -ojsonpath='{.spec.template.spec.containers[*].resources.limits.cpu}')
        memory_limit=$(kubectl get deployment "$deploy_name" -n "$namespace" -ojsonpath='{.spec.template.spec.containers[*].resources.limits.memory}')
        echo "Deployment,$deploy_name,$cpu_usage,$memory_usage,$cpu_limit,$memory_limit" >> k8s_resources.csv
    done
done

# 获取所有 DaemonSet 的资源使用情况和限制
daemonsets=$(kubectl get daemonset --all-namespaces -o json)
for namespace in $(echo "$daemonsets" | jq -r '.items[].metadata.namespace' | uniq); do
    echo "正在处理 DaemonSet,命名空间:$namespace"
    ds_names=$(echo "$daemonsets" | jq -r ".items[] | select(.metadata.namespace==\"$namespace\") | .metadata.name")
    for ds_name in $ds_names; do
        echo "正在处理 DaemonSet:$ds_name"
        cpu_usage=$(kubectl describe daemonset "$ds_name" -n "$namespace" | grep "cpu:" | awk '{print $2}')
        memory_usage=$(kubectl describe daemonset "$ds_name" -n "$namespace" | grep "memory:" | awk '{print $2}')
        cpu_limit=$(kubectl get daemonset "$ds_name" -n "$namespace" -ojsonpath='{.spec.template.spec.containers[*].resources.limits.cpu}')
        memory_limit=$(kubectl get daemonset "$ds_name" -n "$namespace" -ojsonpath='{.spec.template.spec.containers[*].resources.limits.memory}')
        echo "DaemonSet,$ds_name,$cpu_usage,$memory_usage,$cpu_limit,$memory_limit" >> k8s_resources.csv
    done
done

echo "脚本执行完毕,结果已保存在 k8s_resources.csv 文件中。"

在 Kubernetes (k8s) 中,可以借助 `kubectl` 命令行工具结合其他组件(如 Metrics Server 或者 kubelet 的 API)来查看节点的内存使用情况。 以下是几种常见的方式: --- ### **方法一:通过 Metrics Server 查看** 1. 确保集群已启用并运行了 Metrics Server。如果未安装,需要先部署它。 - 检查是否启用:`kubectl get pods -n kube-system | grep metrics-server` 2. 使用命令获取节点资源信息: ```bash kubectl top nodes ``` 输出示例: ``` NAME CPU(cores) CPU% MEMORY(bytes) MEMORY% node-01 456m 23% 1234Mi 75% node-02 987m 49% 3456Mi 90% ``` 其中,`MEMORY` 列显示的是每个节点当前使用的内存量及其百分比。 --- ### **方法二:直接查询 Kubelet 接口** Kubernetes 节点上的 Kubelet 提供了一个 HTTP API 来访问性能指标数据。 1. 找到目标节点 IP 地址,并通过以下 URL 查询内存详情: ``` curl http://<node-ip>:10255/stats/summary ``` 这会返回 JSON 格式的详细统计信息,包括容器、Pod 和整个节点级别的资源消耗。 注意:该端口通常只允许本地访问,默认情况下不允许外部连接。 --- ### **方法三:利用监控系统 Grafana + Prometheus** 如果你已经集成了监控解决方案,比如 Prometheus 和 Grafana,则可以在仪表盘上更直观地观察所有节点的历史及实时内存利用率曲线图等高级功能。 步骤概述: 1. 部署并配置好Prometheus采集任务; 2. 创建相应的Dashboards展示所需字段值; --- 以上就是常用的三种途径用于了解Kubernets环境中各个物理机或虚拟主机实际分配了多少RAM容量以及剩余空间比例等情况
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值