如何在 Kubernetes 中获取容器的磁盘使用情况(没有 docker 命令)?
Posted
技术标签:
【中文标题】如何在 Kubernetes 中获取容器的磁盘使用情况(没有 docker 命令)?【英文标题】:How to get container's disk usage in Kubernetes (without docker command)? 【发布时间】:2019-04-19 01:35:38 【问题描述】:我有一个 Kubernetes 集群,想知道我的容器使用了多少磁盘空间。我不是在谈论已安装的卷。
我可以通过使用诸如docker system df -v
或docker ps -s
之类的docker 命令来获取此信息,但我不想连接到每个工作节点。
有没有办法通过kubectl
获取容器的磁盘使用情况,或者是否有可以从中获取这些信息的 kubelet 指标?
【问题讨论】:
【参考方案1】:是的,但目前不使用 kubectl,您可以通过 kube-apiserver(代理)或直接调用 kubelet HTTP(s) 服务器端点(默认端口 10250
)从 kubelet 获取指标。磁盘指标通常在/stats/summary
端点上可用,您还可以在/metrics/cavisor
端点上找到一些cAdvisor 指标。
例如,要获取通过kube-apiserver 返回的第一个 pod 中的第一个容器的“usedBytes”:
$ curl -k -s -H 'Authorization: Bearer <REDACTED>' \
https://kube-apiserver:6443/api/v1/nodes/<node-name>/proxy/stats/summary \
| jq '.pods[0].containers[0].rootfs.usedBytes'
Bearer 令牌可以是绑定到 ClusterRole 的服务帐户令牌,如下所示:
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
annotations:
name: myrole
rules:
- apiGroups:
- ""
resources:
- nodes
- nodes/proxy
verbs:
- get
- list
- watch
- nonResourceURLs:
- /metrics
- /api/*
verbs:
- get
【讨论】:
太好了,谢谢。我正在使用kops
启动 k8s 测试集群,并且能够使用以下命令获取令牌:kops get secrets --type secret admin -oplaintext
。我还找到了此信息的 cadvisor 指标container_fs_usage_bytes
。【参考方案2】:
添加到 Rico 的答案中,您可以使用 kubectl
设置 API 服务器的代理,以便您可以查询 API 并了解服务器地址和身份验证的详细信息。
为 API 服务器设置本地代理
kubectl proxy --port=8080
然后你可以使用类似的命令
curl http://localhost:8080/api/v1/nodes/<node-name>/proxy/stats/summary 2>/dev/null | jq '.pods[].containers[].rootfs.usedBytes'
这将为您提供每个容器的 rootfs 使用列表。
【讨论】:
以上是关于如何在 Kubernetes 中获取容器的磁盘使用情况(没有 docker 命令)?的主要内容,如果未能解决你的问题,请参考以下文章
Kubelet运行在容器下使用LocalPV磁盘地址不存在问题