创建 pod 资源池#
功能介绍#
创建 pod 资源池用于在 K8s 上部署 openYuanrong 集群时运行函数。该接口为异步接口,创建完成后,您可通过查询接口获取 Pod 资源池的状态。
接口约束#
pool 池的亲和基于 K8s 调度能力实现,详见将 Pod 指派给节点,使用约束如下。
多个 pool 池之间默认反亲和部署,如果您需要修改,可通过配置 PoolInfo 结构中的
affinities参数实现。配置 pool 池的亲和属性时,PoolInfo 结构中
node_selector与affinities参数会同时生效。配置冲突时可能导致 pool 池处于pending状态而无法拉起,建议您配置一项即可。
pool 池的自动扩缩通过 PoolInfo 结构中的 size 和 max_size 参数控制,原理详见 Pod 水平自动扩缩,使用约束如下。
开启自动扩缩时: 每个实例创建请求最多触发一次 Pod 扩容,但扩容出来的 Pod 并不与该实例绑定。可能存在扩容的 Pod 被其他实例占用的情况,这时无法获得可用 Pod 的实例将在 2 分钟超时后返回创建失败。
固定资源池大小时:可以在 PoolInfo 结构中的
labels参数增加键值对{"yr-idle-to-recycle":5}配置 Pod 回收时间, 值的单位是秒。如果永不回收,配置为{"yr-idle-to-recycle":"unlimited"}即可。
URI#
POST /serverless/v1/podpools
请求参数#
请求 Header 参数
参数 |
是否必选 |
参数类型 |
描述 |
|---|---|---|---|
Content-Type |
是 |
String |
消息体类型。 |
请求 Body 参数
参数 |
是否必选 |
参数类型 |
描述 |
|---|---|---|---|
pools |
是 |
Array of PoolInfo objects |
pool 信息数组。 |
PoolInfo 类型参数
参数 |
是否必选 |
参数类型 |
描述 |
|---|---|---|---|
id |
是 |
String |
pool 池 id,需保证全局唯一。 |
group |
否 |
String |
pool 池所属 group。 |
reuse |
否 |
Boolean |
pool 池是否复用。当 Pod 被函数实例独占时,如果 |
size |
否 |
int |
pool 池大小。当参数 |
max_size |
否 |
int |
pool 池最大副本数。当 |
image |
否 |
String |
runtime-manager 组件镜像 tag,不设置时使用版本默认镜像。 |
init_image |
否 |
String |
function-agent-init 组件镜像 tag,不设置时使用版本默认镜像。 |
labels |
否 |
Map[String,String] |
自定义 pool 池标签。 |
environment |
否 |
Map[String,String] |
自定义 runtime-manager 容器环境变量。 |
volumes |
否 |
String |
pool 池需要声明的 volume 卷,支持 HostPath、PVC。 |
volume_mounts |
否 |
String |
pool 池需要声明的 volumeMount 卷挂载。 |
resources |
是 |
ResourceRequirement object |
pool 池使用资源声明。 |
affinities |
否 |
String |
pool 池亲和声明。 |
node_selector |
否 |
Map[String,String] |
节点标签匹配,pool 池将选择特定节点调度。 |
runtime_class_name |
否 |
String |
容器运行时名称。 |
tolerations |
否 |
String |
pool 池可以容忍的污点。 |
horizontal_pod_autoscaler_spec |
否 |
String |
pool 池配置 HPA 声明。 |
topology_spread_constraints |
否 |
String |
pool 池配置拓扑分布约束。 |
pod_pending_duration_threshold |
否 |
int |
pool 池中 Pod 处于 Pending 状态时长告警阈值。pool 池中 Pod 持续处于 Pending 状态时长超过该值,将触发告警上报。 |
idle_recycle_time |
否 |
IdleRecyclePolicy object |
配置自动扩缩 pod 空闲回收时间。 |
IdleRecyclePolicy 类型参数
参数 |
是否必选 |
参数类型 |
描述 |
|---|---|---|---|
reserved |
否 |
int |
预留 pod 空闲回收时间。 |
scaled |
否 |
int |
弹性 pod 空闲回收时间。 |
ResourceRequirement 类型参数
参数 |
是否必选 |
参数类型 |
描述 |
|---|---|---|---|
requests |
是 |
Map[String,String] |
Pod request 资源定义。 |
limits |
是 |
Map[String,String] |
Pod limit 资源定义。 |
响应参数#
参数 |
是否必选 |
参数类型 |
描述 |
|---|---|---|---|
code |
是 |
int |
错误码。0 表示成功,非 0 表示失败。 |
message |
是 |
String |
错误信息。 |
result |
是 |
CreateResult object |
是 |
CreateResult 类型参数
参数 |
是否必选 |
类型 |
描述 |
|---|---|---|---|
failed_pools |
Array of String objects |
失败 id 列表 |
请求示例#
POST {meta service endpoint}/serverless/v1/podpools
{
"pools": [
{
"id": "pool1",
"size": 2,
"max_size": 3,
"group": "rg1",
"reuse": true,
"image": "runtime-manager:v1",
"init_image": "function-agent-init:v1",
"labels": {
"label1": "val1"
},
"environment": {
"env1": "key1"
},
"volumes": "[{\"name\":\"pv-function\",\"persistentVolumeClaim\":{\"claimName\":\"test-client-pvc-claim\"}}]",
"volume_mounts": "[{\"name\":\"pv-function\",\"mountPath\":\"/home/sn/function-packages\"}]",
"resources": {
"limits": {
"cpu": "600m",
"memory": "512Mi"
},
"requests": {
"cpu": "600m",
"memory": "512Mi"
}
},
"node_selector": {
"node-role.kubernetes.io/controlplane": "true"
},
"runtime_class_name": "runc",
"idle_recycle_time": {
"reserved": -1,
"scaled": 10
},
"tolerations": "[{\"key\":\"is-ds-worker-unready\",\"operator\": \"Equal\", \"value\": \"true\", \"effect\": \"NoSchedule\"}]",
"affinities": "{\"nodeAffinity\": {\"requiredDuringSchedulingIgnoredDuringExecution\":{\"nodeSelectorTerms\":[{\"matchExpressions\":[{\"key\":\"node-type\",\"operator\":\"In\",\"values\":[\"system\"]}]}]}}}",
"horizontal_pod_autoscaler_spec": "{\"minReplicas\": 1, \"maxReplicas\": 2, \"metrics\":[{\"resource\": {\"name\":\"cpu\", \"target\":{\"averageUtilization\":20, \"type\":\"Utilization\"}}, \"type\":\"Resource\"}, {\"resource\": {\"name\":\"memory\", \"target\":{\"averageUtilization\":50, \"type\":\"Utilization\"}}, \"type\":\"Resource\"}]}",
"topology_spread_constraints": "[{\"maxSkew\":1,\"minDomains\":1,\"topologyKey\":\"kubernetes.io/hostname\",\"whenUnsatisfiable\":\"DoNotSchedule\", \"matchLabelKeys\": [\"pod-template-hash\"],\"labelSelector\":{\"matchLabels\": {\"rg1\":\"rg1\"}} }]"
}
]
}
响应示例#
状态码:200
表示创建资源池成功。
{
"code": 0,
"message": "",
"result": {
"failed_pools": null
}
}
错误码#
请参见错误码。