资源指标管道

    HorizontalPodAutoscaler (HPA) 和 (VPA) 使用 metrics API 中的数据调整工作负载副本和资源,以满足客户需求。

    你也可以通过 kubectl top 命令来查看资源指标。

    说明:

    Metrics API 及其启用的指标管道仅提供最少的 CPU 和内存指标,以启用使用 HPA 和/或 VPA 的自动扩展。 如果你想提供更完整的指标集,你可以通过部署使用 Custom Metrics API 的第二个来作为简单的 Metrics API 的补充。

    图 1 说明了资源指标管道的架构。

    flowchart RL subgraph cluster[集群] direction RL S[

    ] A[Metrics-
    Server] subgraph B[节点] direction TB D[cAdvisor] —> C[kubelet] E[容器
    运行时] —> D E1[容器
    运行时] —> D P[Pod 数据] -.- C end L[API
    服务器] W[HPA] C ——>|Summary
    API| A —>|metrics
    API| L —> W end L —-> K[kubectl
    top] classDef box fill:#fff,stroke:#000,stroke-width:1px,color:#000; class W,B,P,K,cluster,D,E,E1 box classDef spacewhite fill:#ffffff,stroke:#fff,stroke-width:0px,color:#000 class S spacewhite classDef k8s fill:#326ce5,stroke:#fff,stroke-width:1px,color:#fff; class A,L,C k8s

    必须启用 JavaScript 才能查看此页内容

    图 1. 资源指标管道

    图中从右到左的架构组件包括以下内容:

    • : 用于收集、聚合和公开 Kubelet 中包含的容器指标的守护程序。

    • kubelet: 用于管理容器资源的节点代理。 可以使用 和 /stats kubelet API 端点访问资源指标。

    • : kubelet 提供的 API,用于发现和检索可通过 /stats 端点获得的每个节点的汇总统计信息。

    • Metrics API: Kubernetes API 支持访问用于工作负载自动缩放的 CPU 和内存。 要在你的集群中进行这项工作,你需要一个提供 Metrics API 的 API 扩展服务器。

      说明: cAdvisor 支持从 cgroups 读取指标,它适用于 Linux 上的典型容器运行时。 如果你使用基于其他资源隔离机制的容器运行时,例如虚拟化,那么该容器运行时必须支持 以便 kubelet 可以使用指标。

    特性状态: Kubernetes 1.8 [beta]

    metrics-server 实现了 Metrics API。此 API 允许你访问集群中节点和 Pod 的 CPU 和内存使用情况。 它的主要作用是将资源使用指标提供给 K8s 自动缩放器组件。

    下面是一个 minikube 节点的 Metrics API 请求示例,通过 jq 管道处理以便于阅读:

    这是使用 curl 来执行的相同 API 调用:

    1. curl http://localhost:8080/apis/metrics.k8s.io/v1beta1/nodes/minikube

    响应示例:

    下面是一个 kube-system 命名空间中的 kube-scheduler-minikube Pod 的 Metrics API 请求示例, 通过 jq 管道处理以便于阅读:

    1. kubectl get --raw "/apis/metrics.k8s.io/v1beta1/namespaces/kube-system/pods/kube-scheduler-minikube" | jq '.'

    这是使用 来完成的相同 API 调用:

    响应示例:

    1. "kind": "PodMetrics",
    2. "apiVersion": "metrics.k8s.io/v1beta1",
    3. "metadata": {
    4. "name": "kube-scheduler-minikube",
    5. "namespace": "kube-system",
    6. "selfLink": "/apis/metrics.k8s.io/v1beta1/namespaces/kube-system/pods/kube-scheduler-minikube",
    7. "creationTimestamp": "2022-01-27T19:25:00Z"
    8. },
    9. "timestamp": "2022-01-27T19:24:31Z",
    10. "window": "30s",
    11. "containers": [
    12. "name": "kube-scheduler",
    13. "cpu": "9559630n",
    14. "memory": "22244Ki"
    15. }
    16. }
    17. ]
    18. }

    Metrics API 在 代码库中定义。 你必须启用 API 聚合层并为 metrics.k8s.io API 注册一个 。

    要了解有关 Metrics API 的更多信息, 请参阅资源 Resource Metrics API Design、 和 Resource Metrics API

    说明:

    CPU 报告为以 cpu 为单位测量的平均核心使用率。在 Kubernetes 中, 一个 cpu 相当于云提供商的 1 个 vCPU/Core,以及裸机 Intel 处理器上的 1 个超线程。

    该值是通过对内核提供的累积 CPU 计数器(在 Linux 和 Windows 内核中)取一个速率得出的。 用于计算 CPU 的时间窗口显示在 Metrics API 的窗口字段下。

    要了解更多关于 Kubernetes 如何分配和测量 CPU 资源的信息,请参阅 。

    内存

    内存报告为在收集度量标准的那一刻的工作集大小,以字节为单位。

    在理想情况下,“工作集”是在内存压力下无法释放的正在使用的内存量。 然而,工作集的计算因主机操作系统而异,并且通常大量使用启发式算法来产生估计。

    Kubernetes 模型中,容器工作集是由容器运行时计算的与相关容器关联的匿名内存。 工作集指标通常还包括一些缓存(文件支持)内存,因为主机操作系统不能总是回收页面。

    要了解有关 Kubernetes 如何分配和测量内存资源的更多信息, 请参阅。

    metrics-server 从 kubelet 中获取资源指标,并通过 Metrics API 在 Kubernetes API 服务器中公开它们,以供 HPA 和 VPA 使用。 你还可以使用 kubectl top 命令查看这些指标。

    metrics-server 使用 Kubernetes API 来跟踪集群中的节点和 Pod。metrics-server 服务器通过 HTTP 查询每个节点以获取指标。 metrics-server 还构建了 Pod 元数据的内部视图,并维护 Pod 健康状况的缓存。 缓存的 Pod 健康信息可通过 metrics-server 提供的扩展 API 获得。

    例如,对于 HPA 查询,metrics-server 需要确定哪些 Pod 满足 Deployment 中的标签选择器。

    metrics-server 调用 API 从每个节点收集指标。根据它使用的度量服务器版本:

    • 版本 v0.6.0+ 中,使用指标资源端点 /metrics/resource
    • 旧版本中使用 Summary API 端点 /stats/summary

    了解更多 metrics-server,参阅 。

    你还可以查看以下内容: