
后端云原生容器编排【免费下载链接】pythonOfficial Python client library for kubernetes项目地址https://gitcode.com/gh_mirrors/python1/python点击查看免费下载本篇聚焦 Kubernetes 官方 Python 客户端kubernetes-python异步 API 中kubernetes.aio.client.models.v1_tcp_socket_action模块所定义的V1TCPSocketAction模型。读懂它你不仅能掌握该模型host、port两个字段的确切类型、默认值与取值约束还能理解它在容器探针Probe与生命周期钩子Lifecycle Handler中的挂载位置、snake_case 属性与 JSON wire 格式tcpSocket之间的双向映射机制以及to_dict/to_json/from_dict/from_json序列化接口在异步客户端中的正确用法。1. 模块定位与生成机制doc/source/kubernetes.aio.client.models.v1_tcp_socket_action.rst是 Sphinx 文档源文件通过automodule指令自动生成 kubernetes.aio.client.models.v1_tcp_socket_action 模块的 API 文档含继承关系与未单独编写文档的成员。该模块文件头部声明了明确的生成来源与适用前提模块头注释 Kubernetes No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) The version of the OpenAPI document: release-1.37 Generated by OpenAPI Generator (https://openapi-generator.tech) Do not edit the class manually. 可以确认三个事实该模型基于 OpenAPI 文档release-1.37版本自动生成与仓库中维护的 scripts/swagger.json 定义保持一致不应手工编辑该文件字段增删应由 swagger 规范更新后重新生成仓库提供 scripts/update-client-asyncio.sh 脚本模型基于 PydanticBaseModel构建kubernetes/py.typed标记表明该包提供静态类型检查支持。同一模型在同步客户端中存在完全对应的实现 kubernetes/client/models/v1_tcp_socket_action.py两者字段定义一致本文以异步版本为主线展开。2. 字段定义host 与 portV1TCPSocketAction的类文档说明为 TCPSocketAction describes an action based on opening a socket即描述一个打开一个 TCP socket的动作。其字段定义见 v1_tcp_socket_action.py#L105-L116host: Optional[StrictStr] Field( defaultNone, descriptionOptional: Host name to connect to, defaults to the pod IP. ) port: StrictInt | StrictStr Field( descriptionNumber or name of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME. )字段Python 类型必填默认值说明hostOptional[StrictStr]否None要连接的主机名缺省时默认为 Pod IPportStrictInt \| StrictStrUnion[int, str]是无要访问的容器端口数字必须在165535范围内字符串必须是合法的IANA_SVC_NAME即端口名与 OpenAPI 规范相互印证scripts/swagger.json 中v1.TCPSocketAction的定义声明required: [port]且port的format为int-or-string、type为object——这正是模型中将port声明为StrictInt | StrictStr联合类型的来源。openapi_types元数据也反映了这一点port: object。模型同时维护两份元数据字典L107-L116openapi_types属性名到 OpenAPI 类型的映射host → str、port → objectattribute_mapPython 属性名到 JSON wire 键的映射host → host、port → port。本例中两侧同名但对于像V1Probe.tcp_socket → tcpSocket这样的跨模型字段则依赖该映射见下一节。3. 使用场景一容器探针 V1Probe.tcp_socket从源码结构看V1TCPSocketAction在异步客户端模型层被两个模型消费第一个是探针模型 V1Probe。V1Probe描述针对容器执行的健康检查用于判断容器存活或是否就绪其tcp_socket字段定义v1_probe.py#L118tcp_socket: Optional[V1TCPSocketAction] Field( defaultNone, validation_aliasAliasChoices(tcpSocket, tcp_socket), serialization_aliastcpSocket )关键点反序列化from_dict/model_validate时同时接受 JSON 的tcpSocket或 Python 风格tcp_socketAliasChoices序列化回 API 请求体时统一输出为驼峰tcpSocketserialization_alias。探针场景下TCP socket 检查仅验证能否建立 TCP 连接不涉及 HTTP 方法或具体报文内容因此是数据库、消息队列等长连接服务的常用探针方式。V1Probe的其余调度参数均可选见 v1_probe.py#L112-L120failure_threshold默认 3最小 1、period_seconds默认 10最小 1、success_threshold默认 1存活/启动探针必须为 1、initial_delay_seconds、timeout_seconds默认 1 秒最小 1 秒以及用于探测失败后优雅终止的termination_grace_period_seconds。4. 使用场景二生命周期钩子 V1LifecycleHandler.tcp_socket第二个消费方是生命周期处理器 V1LifecycleHandler其tcp_socket字段定义v1_lifecycle_handler.py#L114与探针侧写法完全一致tcp_socket: Optional[V1TCPSocketAction] Field( defaultNone, validation_aliasAliasChoices(tcpSocket, tcp_socket), serialization_aliastcpSocket )该模型的类文档给出了一条重要的语义约束LifecycleHandler defines a specific action that should be taken in a lifecycle hook.One and only one of the fields, except TCPSocket must be specified. 即生命周期钩子postStart/preStop中应且仅应指定一个动作字段exec、httpGet、sleep或tcp_socket但 TCPSocket 是例外——从源码结构看生成的 Python 模型本身不做互斥校验互斥性由 Kubernetes API Server 侧保证。5. 序列化接口to_dict / to_json / from_dict / from_jsonV1TCPSocketAction继承自 OpenAPI Generator 生成的公共序列化骨架v1_tcp_socket_action.py#L127-L214对外暴露四组接口接口签名/行为说明to_dict(serializeFalse)实例方法返回含全部声明字段的 dict字段值经_to_legacy_value递归处理嵌套模型to_json()实例方法基于to_dict()经to_jsonable_python转为 JSON 字符串from_dict(obj)类方法None输入返回Nonedict 输入走model_validate({host: obj.get(host), port: obj.get(port)})仅提取已知字段from_json(json_str)类方法json.loads后委托from_dict辅助接口还有to_str()基于pprint.pformat(self.to_dict())、__repr__、基于to_dict()相等比较的__eq__/__ne__。模型级配置L118-L124值得注意model_config ConfigDict( validate_by_nameTrue, validate_by_aliasTrue, validate_assignmentTrue, extraforbid, protected_namespaces(), )其中extraforbid意味着传入未声明字段会触发 Pydantic 校验错误validate_assignmentTrue保证属性重新赋值时也执行类型校验。6. 实战示例用异步客户端提交带 TCP 探针的 Deployment以下示例展示V1TCPSocketAction与V1Probe组合后通过异步客户端kubernetes.aio完整提交到集群的流程。aio客户端的 API 方法均需await这是它相对同步客户端的核心使用差异import asyncio from kubernetes import config from kubernetes.aio import client from kubernetes.aio.client.rest import AsyncRESTClientObject from kubernetes.aio.client.models.v1_pod_spec import V1PodSpec from kubernetes.aio.client.models.v1_container import V1Container from kubernetes.aio.client.models.v1_probe import V1Probe from kubernetes.aio.client.models.v1_tcp_socket_action import V1TCPSocketAction from kubernetes.aio.client.models.v1_deployment import V1Deployment from kubernetes.aio.client.models.v1_deployment_spec import V1DeploymentSpec from kubernetes.aio.client.models.v1_pod_template_spec import V1PodTemplateSpec from kubernetes.aio.client.models.v1_object_meta import V1ObjectMeta async def main() - None: config.load_kube_config() # 集群外场景集群内可改用 config.load_incluster_config() api client.AppsV1Api(client.ApiClient()) # TCP 存活探针连接 Pod 内 8080 端口host 缺省即 Pod IP liveness V1Probe( tcp_socketV1TCPSocketAction(port8080), initial_delay_seconds5, period_seconds10, timeout_seconds1, failure_threshold3, ) container V1Container( nameapp, imageyour-registry/app:latest, ports[client.V1ContainerPort(container_port8080)], liveness_probeliveness, ) body V1Deployment( metadataV1ObjectMeta(nametcp-probe-demo), specV1DeploymentSpec( templateV1PodTemplateSpec( specV1PodSpec(containers[container]), ) ), ) try: await api.create_namespaced_deployment(namespacedefault, bodybody) finally: await api.api_client.close() asyncio.run(main())要点回顾V1TCPSocketAction(port8080)中host未提供按字段语义默认连接 Pod IP如需探测 Pod 内 Sidecar 容器可显式指定host为容器监听的主机名port既可用整数165535也可用容器containerPort中声明的nameIANA_SVC_NAME字符串序列化到 API 请求体时探针结构中的键为驼峰tcpSocket由serialization_alias自动完成无需手工拼接 wire 格式。7. 官方文档示例与注意事项仓库为每个模型生成了配套 Markdown 文档kubernetes/docs/V1TCPSocketAction.md 给出了from_json/to_json/to_dict/from_dict的最小闭环示例针对同步导入路径kubernetes.client.models.v1_tcp_socket_actionfrom kubernetes.client.models.v1_tcp_socket_action import V1TCPSocketAction json {} v1_tcp_socket_action_instance V1TCPSocketAction.from_json(json) print(V1TCPSocketAction.to_json()) v1_tcp_socket_action_dict v1_tcp_socket_action_instance.to_dict() v1_tcp_socket_action_from_dict V1TCPSocketAction.from_dict(v1_tcp_socket_action_dict)需要注意该示例中的json {}是占位模板由于port为必填字段实际使用时应传入形如{host: db, port: 5432}的合法 JSON否则 Pydantic 会抛出port缺失的校验错误。最后梳理适用前提与限制该模型绑定OpenAPI release-1.37规范字段与校验语义以 scripts/swagger.json 为准集群实际行为由 API Server 校验Python 模型只做客户端侧类型约束V1Probe/V1LifecycleHandler侧字段互斥校验不在 Python 客户端执行源码中仅见别名归一化处理见 v1_probe.py#L187-L189 的__preprocess_input_names提交前应自行保证探针只启用一种动作类型模块由 OpenAPI Generator 生成并明确标注 Do not edit the class manually扩展需求应通过更新 swagger 规范重新生成而非直接修改模型文件。赞分享后端云原生容器编排【免费下载链接】pythonOfficial Python client library for kubernetes项目地址https://gitcode.com/gh_mirrors/python1/python点击查看免费下载相关推荐Kubernetes Python 异步客户端kubernetes.aio事件模型 EventsV1Event 深度解析Kubernetes Python 异步客户端kubernetes.aio事件模型 EventsV1Event 深度解析 本篇技术指南聚焦 Kubernet后端云原生容器编排深入解析 Kubernetes Python 异步客户端模型 AdmissionregistrationV1ServiceReference深入解析 Kubernetes Python 异步客户端模型 AdmissionregistrationV1ServiceReference 导读 Admiss后端云原生容器编排Python-100-Days 数据可视化入门matplotlib 绘图体系与七大统计图表实战Python 100 Days 数据可视化入门matplotlib 绘图体系与七大统计图表实战 数据透视完成之后如何把结果变成漂亮的统计图表是数据分析的后端云原生容器编排上一篇jc 解析 systemctl 输出将 systemd 单元状态转换为结构化 JSON 的完整指南下一篇FunASR 官方 checkpoint 原生 vLLM 验证实战指南Fun-ASR-Nano 固定 revision 的服务化复现与边界创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考