资讯详情

资讯详情

蓝鲸配置平台(bk-cmdb)批量删除 Kubernetes Pod 接口实战指南:参数、权限与底层实现解析

后端企业应用运维【免费下载链接】bk-cmdb蓝鲸智云配置平台(BlueKing CMDB)项目地址https://gitcode.com/gh_mirrors/bk/bk-cmdb点击查看免费下载导读本文围绕蓝鲸配置平台BlueKing CMDBbk-cmdb中“批量删除 Pod”这一容器管理 API版本 v3.12.1权限要求“容器 Pod 删除”完整讲解接口请求/返回结构与调用示例并结合仓库源码剖析参数校验、权限鉴权、共享集群校验、级联删除容器与审计日志生成等底层实现链路。读完本文你将能够独立构造并调用该接口完成 Kubernetes Pod 的批量删除并理解删除操作在 bk-cmdb 容器拓扑体系中的完整执行过程。接口概述“批量删除 Pod”是 bk-cmdb 容器资源管理能力的一部分。随着蓝鲸配置平台在 v3.12.1 版本引入对 Kubernetes 容器编排资源的纳管Pod、Workload、Namespace、Node、Cluster 等CMDB 可以同步并维护集群中的 Pod 实例数据。该接口用于按业务biz与 Pod 在 CMDB 中的自增主键cc ID批量删除 Pod 记录。该接口同时存在于两套 API 网关文档体系中蓝鲸 API 网关APIGW后端文档docs/apidoc/apigw/backend/zh/batch_delete_kube_pod.md以及对应英文版 docs/apidoc/apigw/backend/en/batch_delete_kube_pod.mdCMDB 内部 OpenAPI 文档docs/apidoc/cc/zh_hans/batch_delete_kube_pod.md两套文档描述的是同一删除能力data数组中按业务聚合需要删除的 Pod每个业务下通过ids指定 Pod 的 CMDB 内部 ID。需要特别注意的是该删除操作删除的是CMDB 中纳管的 Pod 实例数据即资源入库后的台账数据删除动作发生一次Pod 记录即从 CMDB 库中移除。请求参数详解通用参数common args与 CMDB 其他 OpenAPI 一致调用方需在请求体中携带身份认证与调用方信息包括字段类型必选描述bk_app_codestring是应用 ID用于标识调用方应用bk_app_secretstring是应用密钥用于应用级鉴权bk_usernamestring否操作者用户名用户名与 token 至少提供其一bk_tokenstring否用户登录票据用户名与 token 至少提供其一接口参数字段类型必选描述dataobject array是要删除的 Pod 信息数组data里所有 Pod 总和最多200 条data 数组元素字段类型必选描述bk_biz_idint是业务 IDidsint array是要删除的 Pod 的 cc ID 数组data里所有 Pod 的 ID 总和最多 200 条参数约束的源码证据上述“200 条”限制并非文档单方面约定而是代码中的硬性校验。在 src/kube/types/pod.go 的DeletePodsOption.Validate()中可以看到data为空时返回CCErrCommParamsNeedSet必填参数缺失data长度超过common.BKMaxWriteOpLimit时返回CCErrCommXXExceedLimit每个data元素中bk_biz_id为 0 时返回业务 ID 缺失错误每个元素ids为空时返回 ID 缺失错误累加所有元素中的 Pod ID 数量超过common.BKMaxWriteOpLimit即 200时返回超限错误。DeletePodsOption与DeletePodData的结构定义src/kube/types/pod.go与文档字段一一对应// DeletePodsOption delete pods option, pods are aggregated by biz id type DeletePodsOption struct { Data []DeletePodData json:data } // DeletePodData delete pods data, including biz id and pods in it type DeletePodData struct { BizID int64 json:bk_biz_id PodIDs []int64 json:ids }由此可见data支持一次请求内携带多个业务多个bk_biz_id每个业务下挂各自待删除的 Pod ID 列表但全量总和不得超过 200。请求参数示例以 CMDB 内部 OpenAPI 的完整请求体为例需带通用鉴权参数{ bk_app_code: code, bk_app_secret: secret, bk_username: xxx, bk_token: xxxx, data: [ { bk_biz_id: 123, ids: [ 5, 6 ] } ] }通过 APIGW 调用时通用鉴权参数由网关上下文注入请求体仅需携带业务参数参考 docs/apidoc/apigw/backend/zh/batch_delete_kube_pod.md{ data: [ { bk_biz_id: 123, ids: [ 5, 6 ] } ] }返回结果示例与参数说明返回结果示例{ result: true, code: 0, message: , permission: null, request_id: 87de106ab55549bfbcc46e47ecf5bcc7 }返回结果参数response字段类型描述resultbool请求成功与否。true: 请求成功false: 请求失败codeint错误编码。0 表示 success0 表示失败错误messagestring请求失败返回的错误信息permissionobject权限信息无权限时返回request_idstring请求链 id其中code、message、permission、request_id均来自 CMDB 统一的响应封装metadata.BaseResp定义见 src/common/metadata/result.go。APIGW 后端文档的响应示例中省略了request_id但该字段在 CMDB 内部 OpenAPI 的实际响应中存在用于全链路日志追踪。权限要求与鉴权实现接口文档明确标注权限容器 Pod 删除。这是 bk-cmdb 接入蓝鲸权限中心IAM后定义的标准权限动作。在源码中可以找到完整的权限动作定义与映射关系权限动作 IDdelete_container_pod中文名“容器Pod删除”定义于 src/ac/iam/types.go名称映射见 src/ac/iam/initial_actions.go权限动作被注册进默认动作分组见 src/ac/iam/initial_action_groups.go资源类型CMDB 侧 Pod 资源类型为kube_pod定义于 src/ac/meta/resource.go动作与资源的绑定在 src/ac/iam/adaptor.go 中meta.KubePod资源的meta.Delete动作映射到DeleteContainerPodmeta.Create映射到CreateContainerPodmeta.Find映射到ViewBusinessResource。也就是说调用者必须拥有对应业务下“容器 Pod 删除”权限否则请求会在鉴权阶段被拦截返回permission信息。删除流程的底层实现解析1. 路由入口topo_server 的 DeletePods该接口的 HTTP 路由注册于 src/scene_server/topo_server/service/kube/service.goutility.AddHandler(rest.Action{Verb: http.MethodDelete, Path: /deletemany/kube/pod, Handler: s.DeletePods})对应的处理器为 src/scene_server/topo_server/service/kube/pod.go 中的DeletePods其执行链路为参数解析ctx.DecodeInto将请求体解析为types.DeletePodsOption随后调用opt.Validate()完成上文所述的 200 条上限、业务 ID、ID 数组等校验权限鉴权遍历opt.Data为每个业务构造acmeta.ResourceAttribute{Type: acmeta.KubePod, Action: acmeta.Delete, BusinessID: data.BizID}调用AuthManager.Authorize统一鉴权任一业务无权限即返回RespNoAuth数据预检checkDelPodData汇总所有ids通过CoreService().Kube().ListPod按bk_pod_id in ids查询现存 Pod若全部已不存在len(pods) 0直接返回成功幂等行为共享集群校验checkDeletePodSharedNs会比对 Pod 实际归属业务与请求携带业务若 Pod 的命名空间属于共享命名空间shared namespace场景则调用Logics.KubeOperation().CheckPlatBizSharedNs校验是否允许该业务删除防止越权删除共享集群资源src/scene_server/topo_server/service/kube/pod.go生成审计日志auditlog.NewKubeAudit(...).GeneratePodAuditLog为每个待删除 Pod 生成AuditDelete类型的审计记录事务执行通过CoreService().Txn().AutoRunTxn开启分布式事务事务内先调用CoreService().Kube().DeletePods执行真实删除成功后SaveAuditLog落审计日志任一步失败则整体回滚。2. RPC 封装apimachinery 的 DeletePodstopo_server 通过 apimachinery 客户端调用 core_service 的 RPC 接口。封装定义于 src/apimachinery/coreservice/kube/api.go// DeletePods delete pods api func (k *kube) DeletePods(ctx context.Context, h http.Header, opt *types.DeletePodsByIDsOption) errors.CCErrorCoder { resp : new(metadata.Response) subPath : /deletemany/pod err : k.client.Delete(). WithContext(ctx). Body(opt). SubResourcef(subPath). WithHeaders(h). Do(). Into(resp) ... }这里透传的DeletePodsByIDsOption仅包含ids字段src/kube/types/pod.go即经过 topo_server 校验与聚合后的纯 ID 列表。3. 数据落库coreservice 的 DeletePods真正操作 MongoDB 的逻辑位于 src/source_controller/coreservice/service/kube/pod.go其核心步骤级联删除容器先以bk_pod_id in ids为条件删除容器表cc_ContainerBasetypes.BKTableNameBaseContainer中的数据——Pod 删除会连带删除其下所有容器记录找出受影响的节点在删除 Pod 前先对 Pod 表cc_PodBasetypes.BKTableNameBasePod定义见 src/kube/types/types.go按bk_node_id字段Distinct出这些 Pod 关联的节点 ID删除 Pod 记录以id in ids为条件从cc_PodBase表删除 Pod 数据回写节点状态调用getNodeIDsWithoutPod并发统计每个受影响节点上是否还残留 Pod若某节点已无任何 Pod则通过updateNodeHasPodField将该节点的has_pod字段置为 false保证容器拓扑中节点状态的准确性。4. 事件与缓存联动删除后的后续影响Pod 数据被删除后CMDB 的事件订阅与缓存体系会自动感知变化事件监听WatchKubePod动作kube_pod定义于 src/ac/meta/meta.go对应的 watch 事件可通过事件服务器对外推送依赖方可持续消费 Pod 删除事件拓扑缓存缓存服务cacheservice的 biz-topo 模块会 watch kube 相关表见 src/source_controller/cacheservice/cache/biz-topo/watch/kube.goPod 删除后相关拓扑缓存随之更新。调用注意事项与最佳实践数量上限单次请求data中所有ids总和最多 200 条超出将返回CCErrCommXXExceedLimit错误。需要删除更多 Pod 时应分批调用。幂等性若请求中的 Pod ID 已全部不存在接口直接返回成功不会报错适合重复调用场景源码见 src/scene_server/topo_server/service/kube/pod.go。权限前置调用前需为对应业务的操作用户授予“容器 Pod 删除”权限无权限时响应resultfalse并携带permission字段调用方应根据该字段引导用户完成权限申请。共享集群场景当 Pod 位于共享集群的共享命名空间、且请求业务并非 Pod 实际归属业务时删除会被CheckPlatBizSharedNs拦截。请确保bk_biz_id与 Pod 实际归属业务一致。级联语义删除 Pod 会连带删除其下全部容器数据并自动更新节点has_pod状态无需额外调用其他接口。请求链追踪建议记录返回的request_id排查问题时可通过该 ID 串联全链路日志。相关文档与源码导航接口文档中文docs/apidoc/cc/zh_hans/batch_delete_kube_pod.md接口文档APIGW 网关版docs/apidoc/apigw/backend/zh/batch_delete_kube_pod.mdPod 请求/响应类型与校验逻辑src/kube/types/pod.go接口路由注册src/scene_server/topo_server/service/kube/service.gotopo_server 层删除处理器src/scene_server/topo_server/service/kube/pod.goapimachinery RPC 封装src/apimachinery/coreservice/kube/api.gocoreservice 数据层删除实现src/source_controller/coreservice/service/kube/pod.go权限动作与资源映射src/ac/iam/adaptor.go、src/ac/meta/resource.go赞分享后端企业应用运维【免费下载链接】bk-cmdb蓝鲸智云配置平台(BlueKing CMDB)项目地址https://gitcode.com/gh_mirrors/bk/bk-cmdb点击查看免费下载相关推荐蓝鲸配置平台 bk-cmdb 批量删除 Kubernetes Workload 接口batch_delete_kube_workload实战指南蓝鲸配置平台 bk cmdb 批量删除 Kubernetes Workload 接口batch_delete_kube_workload实战指南 本篇技术指后端企业应用运维蓝鲸配置平台bk-cmdb批量删除 Pod 接口调用与源码级实现解析蓝鲸配置平台bk cmdb批量删除 Pod 接口调用与源码级实现解析 导读 本文围绕蓝鲸配置平台BlueKing CMDB对外 API 网关中的「批量删后端企业应用运维蓝鲸配置平台bk-cmdb服务实例批量删除接口实战指南delete_service_instance 参数、响应与底层实现全解析蓝鲸配置平台bk cmdb服务实例批量删除接口实战指南delete_service_instance 参数、响应与底层实现全解析 导读 本文围绕蓝鲸配置平后端企业应用运维创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →