如何在Kubernetes中获取容器的磁盘使用情况(无docker命令)?

ade*_*asi 2 kubernetes prometheus kubectl

我有一个Kubernetes集群,想知道我的容器使用多少磁盘空间。我不是在谈论已安装的卷。

我可以通过使用docker命令(例如docker system df -v或)来获取此信息docker ps -s,但我不想连接到每个工作节点。

有没有办法通过获取容器的磁盘使用率,kubectl还是有kubelet指标可以从中获取此信息?

Ric*_*ico 6

是的,但目前不适用于kubectl,您可以通过kube-apiserver(代理)或直接调用kubelet HTTP服务器端点(默认端口)从kubelet获取指标10250。磁盘指标通常在/stats/summary终结点计算机上可用,您还可以在/metrics/cavisor终结点计算机上找到一些cAdvisor指标。

例如,要获取通过kube-apiserver返回的第一个容器中的第一个容器的“ 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'
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)


Ste*_*ger 5

添加到 Rico 的答案中,您可以使用它kubectl来设置 API 服务器的代理,以便您可以查询 API,并处理服务器地址和身份验证的详细信息。

设置 API 服务器的本地代理

kubectl proxy --port=8080
Run Code Online (Sandbox Code Playgroud)

然后你可以使用类似的命令

curl http://localhost:8080/api/v1/nodes/<node-name>/proxy/stats/summary 2>/dev/null | jq '.pods[].containers[].rootfs.usedBytes'
Run Code Online (Sandbox Code Playgroud)

这将为您提供每个容器的 rootfs 使用情况列表。