如何在 kubernetes python 中使用 kubectl 顶级节点?

Ore*_*n_C 3 python kubernetes

更新

关于空间,我意识到我可以将根路径“/”安装到容器中并使用这段代码来获取我的统计信息:

import shutil

total, used, free = shutil.disk_usage("/")

print("Total: %d GiB" % (total // (2**30)))
print("Used: %d GiB" % (used // (2**30)))
print("Free: %d GiB" % (free // (2**30)))
Run Code Online (Sandbox Code Playgroud)

不过,仍在寻找一种通过 Kubernetes 本身来实现这一点的方法。

原始问题

我正在构建一项服务,其部分功能是监视我的 kubernetes 集群的系统资源(不是特定的 Pod - 节点运行的整个机器),我意识到这kubectl top node是获取该信息(不包括存储)的好方法。

有没有办法使用 kubernetes python 包获取此信息?

我试图在包文档中找到解决方案,并意识到该操作不存在。(也许用不同的名字?我找不到它)
也在 Github 上发现了这个问题,它部分解决了我的问题,但我仍在寻找更简单的东西。

我的问题:如何通过 Kubernetes Python 包检查 kubernetes 节点的系统资源(例如内存、存储和 CPU 使用情况)?

mat*_*t_j 5

Kubernetes 中可通过 Metrics API 获取资源使用情况指标,例如 Pod 或节点 CPU 和内存使用情况。
您可以使用命令访问Metrics APIkubectl get --raw,例如:

kubectl get --raw /apis/metrics.k8s.io/v1beta1/nodes
Run Code Online (Sandbox Code Playgroud)

更多示例可以在Metrics API 文档中找到。


使用Kubernetes Python 客户端,您应该能够检查 Kubernetes 节点的内存和 CPU 使用情况,就像使用命令一样kubectl top nodes
注意:内存在kilobytes,但可以轻松转换为megabytes.

#!/usr/bin/python
# Script name: usage_info.py

from kubernetes import client, config

config.load_kube_config()

api = client.CustomObjectsApi()
k8s_nodes = api.list_cluster_custom_object("metrics.k8s.io", "v1beta1", "nodes")


for stats in k8s_nodes['items']:
    print("Node Name: %s\tCPU: %s\tMemory: %s" % (stats['metadata']['name'], stats['usage']['cpu'], stats['usage']['memory']))
Run Code Online (Sandbox Code Playgroud)

和示例输出:

$ ./usage_info.py
Node Name: node01     CPU: 82845225n  Memory: 707408Ki
Node Name: node02     CPU: 99717207n  Memory: 613892Ki
Node Name: node03     CPU: 74841362n  Memory: 625316Ki
Run Code Online (Sandbox Code Playgroud)

在存储使用方面,我认为应该以不同的方式检查,因为此信息在端点上不可用/apis/metrics.k8s.io/v1beta1/nodes

  • 可以在[此处](https://discuss.kubernetes.io/t/metric-server-cpu-and-memory-units/7497)找到一个有趣的讨论 - 它应该可以回答您的所有问题。指标服务器不提供资源利用率百分比(例如使用的CPU 百分比)。Kubectl top 和 HPA 根据 pod 资源请求或节点容量自行计算这些值。 (2认同)