资讯动态

蓝鲸智云配置平台(bk-cmdb)批量创建 Kubernetes Workload 接口实战指南

发布时间:2026/10/14 18:32:44 来源:尧图企业网站定制
后端企业应用运维【免费下载链接】bk-cmdb蓝鲸智云配置平台(BlueKing CMDB)项目地址https://gitcode.com/gh_mirrors/bk/bk-cmdb点击查看免费下载本文基于 bk-cmdb 的 API 文档 batch_create_kube_workload.md 编写完整讲解批量创建 workload接口v3.12.1的请求参数结构、各字段语义、JSON 请求/响应示例与返回约定并结合 topo_server 路由注册、coreservice 落库实现 与 类型定义 等源码给出底层原理佐证。读者阅读后能够掌握该接口的参数规范、权限要求、批量上限、错误处理方式并可直接复制请求示例进行调用与二次开发。接口概览该接口用于在蓝鲸智云配置平台BlueKing CMDB以下简称 bk-cmdb中批量创建 Kubernetes workload 资源作为容器资源管理能力集群 / 节点 / 命名空间 / workload / Pod / 容器的一部分。项目说明功能批量创建 workload最低版本v3.12.1权限容器工作负载新建HTTP 方法POST内部路由/createmany/kube/workload/{kind}单次批量上限200 条data数组长度限制从源码看该接口实际挂载在 topo_server 的 kube 服务下路由定义为POST /createmany/kube/workload/{kind}其中kind是路径参数见 service.go随后通过 apimachinery 客户端转发给 coreservice 完成真正的写入见 coreservice kube 客户端。API 网关APIGW会在此基础上封装鉴权与bk_app_code等公共参数。请求参数接口整体采用公共参数 接口参数的结构bk_app_code、bk_app_secret、bk_username、bk_token等为调用方身份凭证common args接口自身的业务参数如下。接口参数顶层字段类型必选描述bk_biz_idint是业务 idkindstring是workload 类型目前支持deployment、daemonSet、statefulSet、gameStatefulSet、gameDeployment、cronJob、job、podspods 表示不通过 workload 而直接创建 Poddataarray是数组一次限制创建 200 条kind字段在源码中被定义为WorkloadType枚举除文档列出的 8 种外代码中还支持customResource自定义资源共 9 种类型每种类型对应一张独立的存储表见 types.gokind 取值常量定义对应存储表deploymentKubeDeploymentcc_DeploymentBasestatefulSetKubeStatefulSetcc_StatefulSetBasedaemonSetKubeDaemonSetcc_DaemonSetBasegameStatefulSetKubeGameStatefulSetcc_GameStatefulSetgameDeploymentKubeGameDeploymentcc_GameDeploymentcronJobKubeCronJobcc_CronJobBasejobKubeJobcc_JobBasepodsKubePodWorkloadcc_PodWorkloadBasecustomResourceKubeCustomResourcecc_CustomBasedata数组的长度上限 200 在源码中由常量WlCreateLimit 200控制WlCreateOption.Validate()会校验len(data) WlCreateLimit并返回超出限制错误见 workload.go。data[x]单个 workload 主体字段类型必选描述bk_namespace_idint是namespace 在 bk-cmdb 中的唯一标识namestring是workload 名称labelsmap否标签selectorobject否工作负载选择器replicasint否工作负载实例个数strategy_typestring否工作负载更新机制min_ready_secondsint否指定新创建的 Pod 在没有任意容器崩溃情况下的最小就绪时间只有超出这个时间 Pod 才被视为可用rolling_update_strategyobject否滚动更新策略从源码看data数组会依据kind反序列化为对应的 workload 结构体如Deployment每个结构体在WorkloadBase基础上扩展Labels、Selector、Replicas、MinReadySeconds、StrategyType、RollingUpdateStrategy等字段见 deployment.go。其中replicas在类型定义中是*int64创建时必填WorkLoadSpecFieldsDescriptor中标记为 required。bk_namespace_id必须指向当前业务bk_biz_id下已存在的命名空间否则创建会在 namespace 校验环节失败。selector工作负载选择器字段类型必选描述match_labelsmap否根据 label 匹配match_expressionsarray否匹配表达式源码中LabelSelector结构包含MatchLabels map[string]string与MatchExpressions []LabelSelectorRequirement语义与 Kubernetes 一致matchLabels与matchExpressions的结果取AND见 workload.go。match_expressions[x]匹配表达式字段类型必选描述keystring是标签的 keyoperatorstring是操作符可选值In、NotIn、Exists、DoesNotExistvaluesarray否字符串数组如果操作符为In或NotIn不能为空如果为Exists或DoesNotExist必须为空四种操作符在源码中分别对应常量LabelSelectorOpIn / LabelSelectorOpNotIn / LabelSelectorOpExists / LabelSelectorOpDoesNotExist见 workload.govalues与操作符的搭配规则与 Kubernetes 官方LabelSelectorRequirement完全一致。rolling_update_strategy滚动更新策略当strategy_type为RollingUpdate时该字段不为空其他情况为空。字段类型必选描述max_unavailableobject否最大不可用max_surgeobject否最大溢出max_unavailable / max_surge两个字段结构相同均采用 Kubernetes 的IntOrString语义——既可以传整数也可以传百分比字符串字段类型必选描述typeint是可选值0int 类型或1string 类型int_valint否当 type 为0时不能为空对应的 int 值str_valstring否当 type 为1时不能为空对应的 string 值对应源码IntOrString结构Type取值IntType 0/StringType 1IntVal int32与StrVal string二选一见 workload.go。文档示例中两者均使用整数max_unavailable1、max_surge1也可将max_surge写成type: 1, str_val: 10%形式的百分比。请求参数示例以下 JSON 完整示例创建 1 个 deployment 类型的 workload位于bk_biz_id3业务下、bk_namespace_id1的命名空间中{ bk_app_code: esb_test, bk_app_secret: xxx, bk_username: xxx, bk_token: xxx, bk_biz_id: 3, kind: deployment, data: [ { bk_namespace_id: 1, name: test, labels: { test: test, test2: test2 }, selector: { match_labels: { test: test, test2: test2 }, match_expressions: [ { key: tier, operator: In, values: [ cache ] } ] }, replicas: 1, strategy_type: RollingUpdate, min_ready_seconds: 1, rolling_update_strategy: { max_unavailable: { type: 0, int_val: 1 }, max_surge: { type: 0, int_val: 1 } } } ] }该示例与仓库中的集成测试 workload_test.go 高度一致——测试同样构造了test/test2标签、tier In [cache]的匹配表达式、RollingUpdate策略与IntOrString形式的滚动更新参数可作为验证接口行为的对照样本。多类型创建说明一次请求中data数组可包含多条记录上限 200 条kind是整个请求的公共属性data中所有记录必须属于同一种 workload 类型若需要直接创建 Pod不经过 workload可将kind设为pods此时 data 项按 Pod 结构传递。返回结果示例{ result: true, code: 0, data: { ids: [ 1 ] }, message: success, permission: null, request_id: 87de106ab55549bfbcc46e47ecf5bcc7 }注意返回的data中的 workloadID 数组顺序与参数中的数组数据顺序保持一致。也就是说ids[i]与请求data[i]一一对应便于调用方将新创建的 workload ID 回写到自己的业务数据中。这一约定在源码中有明确保证coreservice 按data索引顺序批量申请自增 ID并逐个写入respData.IDs[idx]见 workload.go。返回结果参数说明response公共返回体字段类型描述resultbool请求成功与否。true请求成功false请求失败codeint错误编码。0 表示 success0 表示失败错误messagestring请求失败返回的错误信息permissionobject权限信息request_idstring请求链 iddataobject请求返回的数据data字段类型描述idsarray新建 workload 在 bk-cmdb 中的唯一标识数组服务端处理流程与源码级原理一次成功的批量创建在服务端大致经历以下环节路由与鉴权topo_server 的 CreateWorkload 先从路径参数解析kind并校验其合法性然后解码请求体、执行参数校验最后进行权限校验——资源类型为KubeWorkload、动作为Create权限点对应容器工作负载新建。事务封装整个创建过程包裹在AutoRunTxn事务中创建失败时会整体回滚避免出现部分 workload 写入成功的情况。类型分派与校验coreservice 的 CreateWorkload 根据kind将原始 JSON 反序列化为对应 workload 结构体WlArrayUnmarshalJSON并逐条调用ValidateCreate()校验必填字段与取值合法性。ID 分配与 namespace 校验批量调用 MongoDB 的NextSequences按data顺序预取等量 ID随后按bk_namespace_id批量查询 namespace校验其归属业务是否与bk_biz_id一致含共享 namespace 的CheckPlatBizSharedNs检查。写入与审计数据携带创建人、创建时间等 Revision 信息批量Insert到对应类型表如cc_DeploymentBase并生成审计日志见 topo_server 审计逻辑。返回将按序生成的 ID 数组封装为metadata.RspIDs返回。常见错误与排查建议权限不足permission 非空调用账号缺少容器工作负载新建权限需在 bk-cmdb 权限中心为对应业务授权。kind 非法kind不在上述枚举范围内时WorkloadType.Validate()会返回can not support this type of workload见 types.go需检查路径/请求中的类型拼写。data 超过 200 条触发WlCreateLimit校验失败需拆分多次请求。namespace 不存在或不属于该业务GetNamespaceSpec在查询不到全部 namespace 时会返回未找到错误见 workload.go请先用命名空间查询接口确认bk_namespace_id有效。IntOrString 传参不一致type0时int_val不能为空、type1时str_val不能为空二者不可混填。相关资源接口文档batch_create_kube_workload.md路由注册与处理器topo_server kube service.go、workload.go数据写入实现coreservice workload.go请求/响应类型与校验规则src/kube/types/workload.go、src/kube/types/types.go、src/kube/types/deployment.go客户端封装src/apimachinery/toposerver/kube/kube.go集成测试样例src/test/topo_server/workload_test.go赞分享后端企业应用运维【免费下载链接】bk-cmdb蓝鲸智云配置平台(BlueKing CMDB)项目地址https://gitcode.com/gh_mirrors/bk/bk-cmdb点击查看免费下载相关推荐蓝鲸配置平台bk-cmdb批量更新 Kubernetes Workload 接口实战指南蓝鲸配置平台bk cmdb批量更新 Kubernetes Workload 接口实战指南 导读 本文围绕 bk cmdb蓝鲸智云配置平台API 网关提供后端企业应用运维蓝鲸配置平台 bk-cmdb 批量删除 Kubernetes Workload 接口batch_delete_kube_workload实战指南蓝鲸配置平台 bk cmdb 批量删除 Kubernetes Workload 接口batch_delete_kube_workload实战指南 本篇技术指后端企业应用运维蓝鲸智云配置平台BlueKing CMDBKubernetes workload 批量更新接口实战指南蓝鲸智云配置平台BlueKing CMDBKubernetes workload 批量更新接口实战指南 本文面向需要基于蓝鲸智云配置平台BlueKing后端企业应用运维创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑