在 Kubernetes 中,RESTful API 和 Watch 机制是控制平面组件协同工作的核心通信方式,也是用户与集群交互的基础。两者结合实现了高效的状态同步和实时响应。

1. Kubernetes 的 RESTful API

Kubernetes 集群的所有操作(创建、查询、更新、删除资源)都通过 API Server 提供的 RESTful API 完成,它是集群的统一入口。

核心特点:
  • 资源导向:所有 Kubernetes 资源(Pod、Deployment、Service 等)都对应 API 中的资源路径,例如:

    • GET /api/v1/pods:查询所有 Pod
    • POST /apis/apps/v1/deployments:创建 Deployment
    • PUT /api/v1/pods/{name}:更新指定 Pod
    • DELETE /api/v1/pods/{name}:删除指定 Pod
  • 版本化:API 分为不同版本(如 v1apps/v1),确保功能迭代的兼容性。

  • 声明式 API:用户通过提交 "期望状态"(如 Deployment 的副本数),由 Kubernetes 自动协调实际状态,而非直接执行命令。

  • 认证与授权:API Server 负责验证请求的合法性(如 RBAC 权限控制),确保集群安全。

2. Watch 机制

Watch 机制是基于 RESTful API 的实时监听能力,允许客户端(如控制器、调度器、kubectl)持续跟踪资源的变化,无需轮询查询。

核心作用:
  • 实时感知状态变化:当资源(如 Pod、Node)的状态发生变更时(创建、更新、删除),API Server 会主动向监听的客户端推送事件。

  • 实现 "观察 - 行动" 循环:控制平面组件(如 Controller Manager、Scheduler)通过 Watch 机制监控资源状态,当实际状态与期望状态不一致时,触发调谐操作(例如:Deployment 控制器发现 Pod 数量不足时,会创建新 Pod)。

工作方式:
  • 客户端通过 API 请求添加 watch=true 参数开启监听,例如:

    bash

    kubectl get pods --watch  # 等价于 API 请求:GET /api/v1/pods?watch=true
    
  • API Server 会保持长连接,当资源发生变化时,推送包含资源类型、操作类型(ADDED/UPDATED/DELETED)、变化内容的事件。
  • 若连接中断,客户端可通过 resourceVersion 参数重新连接,从断点处继续接收事件,避免重复处理。

3. 两者协同:构建 Kubernetes 的事件驱动架构

RESTful API 和 Watch 机制的结合,是 Kubernetes 实现自动化和自愈能力的核心:

  1. 用户 / 组件通过 RESTful API 声明期望状态(如创建 Deployment),API Server 将状态存入 etcd。
  2. 控制器通过 Watch 机制监听资源变化,发现实际状态与期望状态的差异。
  3. 控制器通过 RESTful API 执行调谐操作(如创建 Pod),更新资源状态。
  4. 状态变更再次通过 Watch 机制通知相关组件,形成闭环。

例如,创建 Pod 的流程:

  • 用户通过 POST /api/v1/pods 创建 Pod(REST API)。
  • Scheduler 通过 Watch 发现 "未调度的 Pod",完成调度后通过 PUT 请求更新 Pod 的 nodeName 字段(REST API)。
  • 目标节点的 kubelet 通过 Watch 发现 "分配给自己的 Pod",执行创建容器的操作,再通过 REST API 反馈 Pod 状态。

这种设计既保证了组件间通信的标准化(RESTful API),又实现了高效的实时协作(Watch 机制),使 Kubernetes 具备了灵活、可靠的集群管理能力。

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐