【问题标题】:How to get container's disk usage in Kubernetes (without docker command)?如何在 Kubernetes 中获取容器的磁盘使用情况(没有 docker 命令)?
【发布时间】:2019-04-19 01:35:38
【问题描述】:

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

我可以通过使用诸如docker system df -vdocker ps -s 之类的docker 命令来获取此信息,但我不想连接到每个工作节点。

有没有办法通过kubectl 获取容器的磁盘使用情况,或者是否有可以从中获取这些信息的 kubelet 指标?

【问题讨论】:

    标签: kubernetes prometheus kubectl


    【解决方案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 使用列表。

    【讨论】:

      猜你喜欢
      • 2022-06-13
      • 1970-01-01
      • 2015-01-01
      • 2021-03-19
      • 1970-01-01
      • 2016-05-28
      • 2020-01-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多