0

我正在尝试使用 API 获取分配给 pod 的实际和总内存量。虽然我能够使用指标服务器 api 获取实际内存消耗。如何使用指标服务器 API 获取分配给 pod 的总内存?

我正在开发一个仪表板,我需要在其中展示 pod 内存和 cpu。ui 图已输入实际和总数量。我可以获取命令 kubectl get --raw /apis/metrics.k8s.io/v1beta1/namespaces/default/pods/ 使用的实际内存,但是如何获取 pod 的总内存?

4

2 回答 2

1

Kubernetes API 指南中描述了所有可用的 API 。它适用于不同的 K8s 版本(只需注意 URL)。

Nick,我如何使用 API 获取这个值?

乍一看,甚至 /api/v1/namespaces/<namespace>/pods/可以完成这项工作。

请看我的例子(我决定自己动手)。

$ cat pod.yaml 

apiVersion: v1
kind: Pod
metadata:
  name: server-go-lim 
  ...
spec:
  containers:
  - image: nkolchenko/enea:server_go_latest
    resources:
      ...
      limits:
        memory: 1024Mi   # Here is the Limit
    ...

$ kubectl create -f pod.yaml
pod/server-go-lim created


$ kubectl get --raw /api/v1/namespaces/default/pods/server-go-lim | json_pp 
{
   ...
   "spec" : {
      "containers" : [
         {
            "resources" :  
               "limits" : {
                  "memory" : "1Gi"
               }

正如我们所见,API 返回 pod 的 Limits。让我知道这是否是您一直在寻找的那个。

于 2020-09-11T14:35:11.310 回答
0

您只需运行kubectl describe pod <pod>并查看.Containers.<container>.Limits

分配给 pod 的内存总量受您分配给 pod 容器的内存限制的限制。https://kubernetes.io/docs/tasks/configure-pod-container/assign-memory-resource/#specify-a-memory-request-and-a-memory-limit

要为容器指定内存请求,请在容器的资源清单中包含 resources:requests 字段。要指定内存限制,请包括 resources:limits。

如果不指定内存限制,则容器没有上限。https://kubernetes.io/docs/tasks/configure-pod-container/assign-memory-resource/#if-you-do-not-specify-a-memory-limit

如果您不为 Container 指定内存限制,则适用以下情况之一:

• 容器对其使用的内存量没有上限。容器可以使用它正在运行的节点上的所有可用内存,这反过来又可以调用 OOM Killer。此外,在 OOM Kill 的情况下,没有资源限制的容器将有更大的机会被杀死。

• Container 在具有默认内存限制的命名空间中运行,并且自动为Container 分配默认限制。集群管理员可以使用 LimitRange 来指定内存限制的默认值。

于 2020-08-06T23:40:15.830 回答