• 聊聊crd和list-watch


    一、聊聊什么是CRD

    CRD是用户自定义的资源模型,是K8S原生API的扩展,可以通过集群管理员向已有的K8S集群中动态的注册或者删除或者更新,对集群现有资源不影响,一旦注册了某种CRD资源,操作人员就可以像直接操作pod一样通过api或者kubelet操作,就像pod,service等内部资源一样

    自定义controller是一种控制器,用户可以在正在运行的集群上部署和更新,而与集群自身生命周期无关
    crd中指定用户期望的状态,然后controller通过监控crd的数据实际状态以及相关联资源的状态来向实际状态靠齐,从而达到最终的期望状态

    二、聊聊K8S的list-watch机制

    1、在通信时,要保证消息实时性经常采用轮询,可能导致问题出现:

    1、客户端轮询服务端:那么服务端压力会很大

    2、服务端主动建立连接发消息告知,此时若http消息则不安全,而且还有大量端口占用问题

    2、K8s的List-Watch机制:

    1、依赖于K8s组件中的Etcd分布式数据库存储集群信息,任何操作都是通过apiserver来修改Etcd的,其它组件不可以直接与Etcd通信,客户端(kubelet/scheduler/controller-manager)通过list-watch监听apiserver中资(pod/rs/rc等等)的create,update和delete事件,并针对事件类型调用相应的事件处理函数。

    2、list-watch有两部分组成,分别是list和watch。list:调用资源的list API罗列资源,基于HTTP短链接实现;watch:调用资源的watch API监听资源变更事件,基于HTTP 长链接实现;

    3、K8S的informer模块封装list-watch API,用户只需要指定资源,编写事件处理函数,AddFunc,UpdateFunc和DeleteFunc等。informer首先通过list API罗列资源,然后调用watch API监听资源的变更事件,并将结果放入到一个FIFO 队列,队列的另一头有协程从中取出事件,并调用对应的注册函数处理事件。

    注意:Informer还维护了一个只读的Map Store缓存,提升查询的效率,降低apiserver负载。

    K8S 的informer 模块封装 list-watch API,用户只需要指定资源,编写事件处理函数,AddFunc, UpdateFunc和 DeleteFunc等。如下图所示,informer首先通过list API 罗列资源,然后调用 watch API监听资源的变更事件,并将结果放入到一个 FIFO 队列,队列的另一头有协程从中取出事件,并调用对应的注册函数处理事件。Informer还维护了一个只读的Map Store 缓存,主要为了提升查询的效率,降低apiserver 的负载

  • 相关阅读:
    高性能分布式计算与存储系统设计概要
    .NET核心代码保护策略
    Web 通信 之 长连接、长轮询(long polling)
    C++数据结构之二叉查找树(BST)
    T4:T4 笔记 + Trait 示例
    腾讯2014软件开发
    CSS选择器从右向左的匹配规则
    Js面向对象编程
    Js杂谈-正则的测试与回溯次数
    Microsoft Message Analyzer (微软消息分析器,“网络抓包工具
  • 原文地址:https://www.cnblogs.com/wuchangblog/p/14841126.html
Copyright © 2020-2023  润新知