后端云原生容器编排【免费下载链接】pythonOfficial Python client library for kubernetes项目地址https://gitcode.com/gh_mirrors/python1/python点击查看免费下载本篇技术指南聚焦于 Kubernetes 官方 Python 客户端本仓库kubernetes.aio异步客户端中的集合模型V1CertificateSigningRequestList。该模型对应 Kubernetes 的 CertificateSigningRequest证书签名请求资源集合是调用CertificatesV1Api.list_certificate_signing_request系列接口时返回结果的载体。读完本文你将掌握该模型的全部字段语义、别名映射机制、序列化/反序列化 API 的正确用法并能在同步与异步两种客户端下实现 CSR 列表查询、分页遍历与 watch 监听。一、模型定位CertificateSigningRequestList 在证书管理链路中的角色在 Kubernetes 集群中CertificateSigningRequestCSR是节点kubelet与应用获取 x509 证书的核心机制客户端提交一个签名请求经管理员审批approve后由签发器signer异步签发证书。而V1CertificateSigningRequestList就是这一资源的集合容器——Kubernetes API Server 在响应 list 类请求时返回的顶层对象正如V1PodList之于 Pod、V1NodeList之于 Node。该模型在仓库中的直接依据是文档骨架 doc/source/kubernetes.aio.client.models.v1_certificate_signing_request_list.rst通过 Sphinxautomodule指令自动收集模块成员生成 API 文档模型实现 kubernetes/aio/client/models/v1_certificate_signing_request_list.py异步版与其结构完全一致的同步版 kubernetes/client/models/v1_certificate_signing_request_list.py生成的 Markdown 参考文档 kubernetes/aio/docs/V1CertificateSigningRequestList.md。从源码头部的生成注释可以确认该模型基于 OpenAPI 规范release-1.37由 OpenAPI Generator 生成类定义在 v1_certificate_signing_request_list.py 第 98 行继承pydantic.BaseModel属于本客户端在 v1.x 基础上全面转向 Pydantic v2 模型的产物。二、V1CertificateSigningRequestList 字段详解先看模型的类定义kubernetes/aio/client/models/v1_certificate_signing_request_list.py中声明的四个字段Python 字段类型是否必填JSONwire名称说明api_versionOptional[str]否默认NoneapiVersion对象表示的版本化 schema。服务端应将已识别的 schema 转换为其内部最新值可能拒绝未识别的值itemsList[V1CertificateSigningRequest]是items本集合中的 CertificateSigningRequest 对象列表kindOptional[str]否默认Nonekind对象代表的 REST 资源种类服务端可从客户端提交请求的端点推断不可更新采用 CamelCase 写法metadataOptional[V1ListMeta]否默认Nonemetadata列表元数据continue 令牌、resourceVersion、剩余条目数等与常规单对象模型如V1CertificateSigningRequest不同items是唯一必填字段而api_version/kind/metadata均为可选。这一点从from_dict的实现可以印证items为None时会抛出校验错误其余字段则宽容处理kubernetes/aio/client/models/v1_certificate_signing_request_list.py。同时源码中定义了类型映射元数据方便上层代码做通用处理openapi_types: ClassVar[Dict[str, str]] { api_version: str, items: List[V1CertificateSigningRequest], kind: str, metadata: V1ListMeta } attribute_map: ClassVar[Dict[str, str]] { api_version: apiVersion, items: items, kind: kind, metadata: metadata }三、字段别名与驼峰/蛇形命名映射机制Kubernetes API 的 JSON 字段使用驼峰命名apiVersion而 Python 约定使用蛇形命名api_version。该模型通过 Pydantic 的AliasChoices同时接受两种输入api_version: Optional[StrictStr] Field( defaultNone, validation_aliasAliasChoices(apiVersion, api_version), serialization_aliasapiVersion, ... )配合model_config中的配置kubernetes/aio/client/models/v1_certificate_signing_request_list.pymodel_config ConfigDict( validate_by_nameTrue, validate_by_aliasTrue, validate_assignmentTrue, extraforbid, protected_namespaces(), )其实际效果为输入宽容构造对象时无论传{apiVersion: certificates.k8s.io/v1}还是{api_version: certificates.k8s.io/v1}均可被识别赋值即校验validate_assignmentTrue保证对已实例化对象重新赋值字段时同样触发类型校验拒绝未知字段extraforbid意味着传入未声明的键会直接抛校验异常避免静默吞掉拼写错误__preprocess_input_names归一化类方法会把api_version归一化为apiVersion再交给model_validate处理kubernetes/aio/client/models/v1_certificate_signing_request_list.py。这一机制意味着你可以放心地把kubectl get csr -o json的输出直接喂给模型也能按 Python 风格手写 snake_case 字典。四、序列化与反序列化 API 全景模型提供了完整的双向转换方法全部可以在 kubernetes/aio/client/models/v1_certificate_signing_request_list.py 中找到实现方法方向行为from_json(json_str)反序列化解析 JSON 字符串内部转调from_dictfrom_dict(obj)反序列化接受 dict可为None归一化字段名后逐个构造子模型to_dict(serializeFalse)序列化返回全部声明字段的 dictserializeFalse用 Python 字段名serializeTrue用 wire 驼峰名to_json()序列化返回 JSON 字符串使用 alias驼峰表示to_str()/__repr__展示使用pprint.pformat(self.to_dict())输出美观可读的多行文本__eq__/__ne__比较基于to_dict()结果做值比较而非身份比较from_dict的实现还展示了子模型的递归构造方式——items里的每个元素调用V1CertificateSigningRequest.from_dict()metadata调用V1ListMeta.from_dict()_obj cls.model_validate({ apiVersion: obj.get(apiVersion), items: [V1CertificateSigningRequest.from_dict(_item) for _item in obj[items]] if obj.get(items) is not None else None, kind: obj.get(kind), metadata: V1ListMeta.from_dict(obj[metadata]) if obj.get(metadata) is not None else None })此外模块中还引入了_to_openapi_value、_get_openapi_to_dict等辅助函数保证嵌套子模型在序列化时也走各自的to_dict()投影逻辑从而保持字段名只输出已设置的非 None 字段这一行为对应__openapi_generator_modern_projection的注释说明。一个典型的往返示例与 kubernetes/aio/docs/V1CertificateSigningRequestList.md 中的用法一致from kubernetes.aio.client.models.v1_certificate_signing_request_list import V1CertificateSigningRequestList # 从 JSON 字符串创建实例 csr_list V1CertificateSigningRequestList.from_json( {apiVersion: certificates.k8s.io/v1, kind: CertificateSigningRequestList, items: [{metadata: {name: csr-example}}]} ) # 转成 dictPython 字段名 d csr_list.to_dict() # 序列化为 JSON驼峰别名 print(csr_list.to_json()) # 从 dict 再次构造 back V1CertificateSigningRequestList.from_dict(d) assert csr_list back # 值比较五、在 CertificatesV1Api 中的实际使用list_certificate_signing_requestV1CertificateSigningRequestList最核心的使用场景是作为CertificatesV1Api.list_certificate_signing_request的返回值。该接口在异步客户端中的声明位于 kubernetes/aio/client/api/certificates_v1_api.py方法签名返回类型即V1CertificateSigningRequestList响应类型映射中200: V1CertificateSigningRequestList同步客户端的对应实现在 kubernetes/client/api/certificates_v1_api.py。同步客户端示例from kubernetes import client, config config.load_kube_config() # 或 config.load_incluster_config() api client.CertificatesV1Api() csr_list: client.V1CertificateSigningRequestList ( api.list_certificate_signing_request(limit10) ) print(csr_list.kind, csr_list.api_version) for csr in csr_list.items: print(csr.metadata.name, csr.spec.signer_name if csr.spec else None)异步aio客户端示例异步客户端的使用模式可参考 kubernetes/aio/README.md 中ApiClient的上下文管理器约定——API 实例可用async with托管或显式await api_instance.close()import asyncio import kubernetes.aio.client as k8s async def list_csrs(): async with k8s.ApiClient() as api_client: api k8s.CertificatesV1Api(api_client) csr_list: k8s.V1CertificateSigningRequestList ( await api.list_certificate_signing_request(limit10) ) for csr in csr_list.items: print(csr.metadata.name, csr.spec.signer_name if csr.spec else None) asyncio.run(list_csrs())list_certificate_signing_request还支持丰富的查询参数同步/异步签名一致见 kubernetes/aio/client/api/certificates_v1_api.py 的 docstring常用参数包括pretty是否美化输出label_selector/field_selector按标签/字段过滤默认返回全部limit单次返回的最大条目数_continue分页续传令牌resource_version/resource_version_match对 list 请求做资源版本约束timeout_secondslist/watch 调用的超时watch是否以 watch 流方式监听变更。六、分页与 watch利用 metadata 字段做增量拉取列表资源一大常见痛点是数据量大时的分页。V1ListMeta为此提供了专门字段kubernetes/aio/client/models/v1_list_meta.pycontinue属性_continue内部存储var_continue当设置了limit且服务端还有更多数据时返回的不透明令牌可用于下一次请求remaining_item_count后续未被本页包含的条目数仅用于估算集合规模客户端不应依赖其精确性resource_version标识对象内部版本的只读字符串需原样回传给服务端常用于并发控制与一致性检查self_link已废弃的只读遗留字段shard_info分片列表alpha 特性ShardedListAndWatch相关的分片信息。借助metadata._continue即可实现完整的分页遍历注意模型底部通过setattr安装了_continue转发属性kubernetes/aio/client/models/v1_list_meta.pyfrom kubernetes import client, config config.load_kube_config() api client.CertificatesV1Api() token None page 0 while True: page 1 resp api.list_certificate_signing_request(limit100, _continuetoken) print(f--- page {page}: {len(resp.items)} items ---) for csr in resp.items: print(csr.metadata.name, csr.spec.signer_name if csr.spec else None) token resp.metadata._continue if resp.metadata else None if not token: # continue 为空说明没有更多数据 break如果需要持续观察 CSR 的创建、审批、签发状态变化还可以结合watch参数与仓库内的 watch 模块kubernetes/watch/实现事件流监听from kubernetes import client, config, watch config.load_kube_config() w watch.Watch() for event in w.stream(client.CertificatesV1Api().list_certificate_signing_request): csr event[object] print(event[type], csr.metadata.name)七、组成元素源码解读V1CertificateSigningRequest 与 V1ListMeta集合模型的价值取决于其成员的类型安全。items的每个元素是 kubernetes/aio/client/models/v1_certificate_signing_request.py 中定义的V1CertificateSigningRequest它包含spec必填V1CertificateSigningRequestSpec签名请求体status可选V1CertificateSigningRequestStatus签发状态如CertificateIssuedmetadata可选V1ObjectMeta对象元数据api_version/kind版本与种类标识。从类 docstring 可以确认 CSR 的典型用途kubelet 通过kubernetes.io/kube-apiserver-client-kubelet签名者获取客户端证书、通过kubernetes.io/kubelet-serving获取 TLS 服务证书应用也可用kubernetes.io/kube-apiserver-client或自定义签名者申请证书。因此遍历V1CertificateSigningRequestList.items时判断csr.status.certificate是否存在即可区分已签发与待审批的请求。而metadata的V1ListMeta则承载了集合层面的元数据其 docstring 明确指出ListMeta 是合成资源synthetic resources必须拥有的元数据一个资源只能拥有 ObjectMeta 与 ListMeta 二者之一。这解释了为什么集合模型不使用V1ObjectMeta——列表本身不是一个可被 watch 到变更的独立对象。八、文档生成机制从 RST 到 HTML 的 automodule 链路本仓库的doc/source/下每个模型对应一个 RST 文件以本模型为例doc/source/kubernetes.aio.client.models.v1_certificate_signing_request_list.rstkubernetes.aio.client.models.v1\_certificate\_signing\_request\_list module .. automodule:: kubernetes.aio.client.models.v1_certificate_signing_request_list :members: :show-inheritance: :undoc-members:Sphinx 的automodule指令会在构建时读取模块自动提取类 docstringCertificateSigningRequestList is a collection of CertificateSigningRequest objects每个公开成员to_dict、from_dict、to_json、from_json等的签名与文档继承关系V1CertificateSigningRequestList(BaseModel)未被显式文档化的成员undoc-members。构建产物即为 doc/html/kubernetes.aio.client.models.v1_certificate_signing_request_list.html与仓库中的 kubernetes/aio/docs/V1CertificateSigningRequestList.md属性表格 序列化示例互为印证。理解这条链路的意义在于当你修改或扩展模型时重新构建文档见 doc/README.md 与 doc/Makefile即可自动同步 API 参考无需手工维护两套文档。九、小结何时使用 V1CertificateSigningRequestList需要列出/分页遍历集群中的全部 CSR判断待审批证书请求时使用CertificatesV1Api.list_certificate_signing_request返回值即本模型需要序列化一个 CSR 集合例如备份、迁移、审计导出时使用to_json()/to_dict(serializeTrue)需要从外部 JSON 构造集合例如读取导出的 YAML/JSON时使用from_json()/from_dict()需要监听证书请求状态流转时配合 watch 流使用其items[].status与metadata.resource_version是关键状态来源。相关延伸阅读路径同步模型实现 kubernetes/client/models/v1_certificate_signing_request_list.py、异步 API 定义 kubernetes/aio/client/api/certificates_v1_api.py、列表元数据模型 kubernetes/aio/client/models/v1_list_meta.py以及异步客户端整体使用说明 kubernetes/aio/README.md。赞分享后端云原生容器编排【免费下载链接】pythonOfficial Python client library for kubernetes项目地址https://gitcode.com/gh_mirrors/python1/python点击查看免费下载相关推荐Kubernetes Python 客户端 EventsV1EventList 模型详解事件列表的解析、序列化与异步查询实战Kubernetes Python 客户端 EventsV1EventList 模型详解事件列表的解析、序列化与异步查询实战 本文以 kubernetes P后端云原生容器编排Kubernetes Python 客户端之 V1CSINodeList 模型详解结构与实战Kubernetes Python 客户端之 V1CSINodeList 模型详解结构与实战 CSINodeList 是 Kubernetes 官方 Pyth后端云原生容器编排Kubernetes Python Client 的 DiscoveryV1EndpointPort 模型详解EndpointSlice 端口定义与异步客户端实战Kubernetes Python Client 的 DiscoveryV1EndpointPort 模型详解EndpointSlice 端口定义与异步客户端后端云原生容器编排上一篇TAESDXL实战教程5个步骤实现SDXL图像生成的实时预览优化下一篇LiteLLM 音频转录 Guardrail 翻译处理器深度解析为 Whisper 转写文本加装内容安全与 PII 防护创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考