资源使用配置 #
本文档将指导你如何模拟 Pod 的资源使用。
什么是资源使用? #
ResourceUsage 是一个 kwok
配置,允许用户定义和模拟单个 Pod 的资源使用。
下面的 YAML 显示了 ResourceUsage 资源的所有字段
kind: ResourceUsage
apiVersion: kwok.x-k8s.io/v1alpha1
metadata:
name: <string>
namespace: <string>
spec:
usages:
- containers:
- <string>
usage:
cpu:
value: <quantity>
expression: <string>
memory:
value: <quantity>
expression: <string>
要将 ResourceUsage 与要模拟的特定 Pod 关联,用户必须确保 metadata.name
和 metadata.namespace
与目标 Pod 的名称和命名空间不一致。
Pod 的资源使用通过 usages
字段指定。usages
字段按组组织,每个组对应于共享相同资源使用模拟设置的一组容器。每个组由容器名称列表(containers
)和共享的资源使用设置(usage
)组成。
如果未在组中给出containers
,则该组中的usage
将应用于目标 Pod 的所有容器。
您可以简单地通过 cpu.value
和 memory.value
设置一个静态的 数量值(100Mi
、1000m
等)来分别定义 CPU 和内存资源使用量。此外,用户还可以通过 expressions
提供一个 CEL 表达式 来更灵活地描述资源使用量。例如,以下表达式尝试从 Pod 的注释(如果有)中提取 CPU 资源使用量,或使用默认值。
expression: |
"kwok.x-k8s.io/usage-cpu" in pod.metadata.annotations
? Quantity(pod.metadata.annotations["kwok.x-k8s.io/usage-cpu"])
: Quantity("1m")
- 如果同时设置了
value
和expressions
,则value
的优先级高于expressions
。- 在 CEL 表达式中,数量值必须显式地用
Quantity
函数包装。
使用 CEL 表达式,甚至可以动态模拟资源使用量。例如,以下表达式生成随时间线性增长的内存使用量。
expression: (pod.SinceSecond() / 60.0) * Quantity("1Mi")
请参阅 kwok
中的 CEL 表达式,了解可能有助于配置动态资源使用量的详尽列表。
ClusterResourceUsage #
除了模拟单个 Pod 之外,用户还可以通过 ClusterResourceUsage 模拟多个 Pod 的资源使用量。
以下 YAML 显示了 ClusterResourceUsage 资源的所有字段
kind: ClusterResourceUsage
apiVersion: kwok.x-k8s.io/v1alpha1
metadata:
name: <string>
spec:
selector:
matchNamespaces:
- <string>
matchNames:
- <string>
usages:
- containers:
- <string>
usage:
cpu:
value: <quantity>
expression: <string>
memory:
value: <quantity>
expression: <string>
与 ResourceUsage 相比,ResourceUsage 的 metadata.name
和 metadata.namespace
必须与关联的 Pod 匹配,而 ClusterResourceUsage 有一个额外的 selector
字段,用于指定要模拟的目标 Pod。matchNamespaces
和 matchNames
都表示为列表,它们旨在按不同级别获取 Pod 集合
- 如果
matchNamespaces
为空,则 ClusterResourceUsage 将应用于由kwok
管理且名称列在matchNames
中的所有 Pod。 - 如果
matchNames
为空,则 ClusterResourceUsage 将应用于由kwok
管理且位于matchNamespaces
中列出的命名空间下的所有 Pod。 - 如果
matchNames
和matchNamespaces
都未设置,则 ClusterResourceUsage 将应用于kwok
管理的所有 Pod。
ClusterResourceUsage 的 usages
字段与 ResourceUsage 中的 usages
字段具有相同的语义。
依赖 #
- 指标 和
/metrics/resource
端点 - metrics-server 版本 >= 0.7.0,它将为节点获取注释
metrics.k8s.io/resource-metrics-path
,而不是默认的/metrics/resource
端点。
从哪里获取模拟数据? #
数据可以从 kwok
的指标服务中获取,路径为 /metrics/nodes/{nodeName}/metrics/resource
,其中 {nodeName}
是伪节点的名称。返回的指标类似于 kubelet 的 /metrics/resource
端点的响应。
请参阅 kwok
指标,了解如何将 kwok
模拟的指标端点与 metrics-server 集成。
开箱即用 #
目前,提供了一种配置来快速模拟 Pod 的资源使用情况。
# the <nodeName> should be replaced with the name of the node
kind: Node
apiVersion: v1
metadata:
annotations:
metrics.k8s.io/resource-metrics-path: "/metrics/nodes/<nodeName>/metrics/resource"
...
# specify the resource usage of a pod via annotation
kind: Pod
apiVersion: v1
metadata:
annotations:
kwok.x-k8s.io/usage-cpu: "100m"
kwok.x-k8s.io/usage-memory: "100Mi"
...