K8s的watch机制原理

kubernetes-watch

在Kubernetes(k8s)中,watch机制是一种基于HTTP长轮询的实时资源状态变更通知机制。它允许客户端持续监听特定资源集合的变化,
并在资源对象被创建、更新或删除时立即获取到相应的事件通知。
以下是watch机制的详细说明:

原理:
当客户端发起一个WATCH请求到API Server时,API Server并不会立即返回响应,而是保持连接打开。
在此期间,当API Server接收到任何与该请求所关注资源相关的操作时(例如:创建新的Pod、更新已有Pod的属性或删除Pod),会将对应
的操作类型和新状态作为事件消息通过同一条连接发送给客户端。
这种模式下,客户端只需维持一个网络连接,就可以持续地接收资源状态变化的通知,而不需要定期轮询来检查资源是否发生变化。

用法:
在Kubernetes的client库(如Go语言中的client-go)中,通常提供了封装好的Watch()方法,用户可以通过调用这些方法来订阅资源的
变更事件。
客户端可以指定要监听的资源类型、命名空间以及标签选择器等条件,以便精确地获取感兴趣的资源变化。

事件类型:
添加(ADDED):表示一个新的资源对象被创建。
更新(UPDATED):表示已存在的资源对象被修改了属性。
删除(DELETED):表示资源对象已被删除。
书籍(BOOKMARK):在某些版本中引入,用于标记某个资源版本,以辅助客户端恢复丢失的事件流。
错误(ERROR):在连接中断或者其他异常情况发生时,API Server可能会发送错误事件。

实现细节:
Kubernetes API Server使用etcd作为其存储后端,etcd本身就支持类似watch的机制,因此API Server能很容易地将底层存储的事件转换为
HTTP响应传递给客户端。
watch连接可能由于多种原因(比如网络问题、超时或者API Server重启)而断开,客户端需要能够重新建立连接并从上次断开的地方继续
接收事件,这通常涉及到事件序列号(ResourceVersion)的管理和重连逻辑。

应用场景:
控制器(Controller)是watch机制的主要使用者,它们通过监听资源状态变化来维护集群的实际状态与期望状态的一致性。
其他组件,如kubelet、kube-proxy,甚至第三方工具和服务也可以利用watch机制实时响应集群中的资源变动。
总之,Kubernetes中的watch机制极大地提高了系统整体效率,降低了延迟,并且使得各组件能够快速、有效地响应集群资源的任何变化。
  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值