ConfigStore
数据对象
ConfigStore
ConfigStore描述了基础平台必须支持的一组平台无关的API,以存储和检索Istio配置。配置键定义为配置对象的类型,名称和命名空间的组合。保证配置密钥在存储中是唯一的。此处显示的存储接口假定基础存储层支持Get(列表),Update(更新),Create(创建)和Delete语义,但不保证任何事务语义。Update, Create,和Delete是变量操作。这些操作是异步的,您可能不会立即看到效果(例如,在对存储进行更改后,Get可能不会立即通过键返回对象。)即使操作成功,也可能会出现间歇性错误,因此您应始终检查对象存储是否已被修改即使变异操作返回错误。应该使用Create操作创建对象并使用Update操作更新对象。资源版本记录每个对象上的最后一个变异操作。如果将变异应用于对象的修订版本与纯等式定义的基础存储所期望的版本不同,则操作将被阻止。此接口的客户端不应假设版本标识符的结构或顺序。从此接口提供和返回的对象引用应视为只读。修改它们会违反线程安全性。
ConfigStoreCache
ConfigStoreCache是配置存储的本地完全复制的缓存。缓存主动将其本地状态与远程存储同步,并提供通知机制以接收更新事件。这样,通知处理程序必须在调用Run之前注册,并且缓存在调用Run之后需要初始同步宽限期。
更新通知要求以下一致性保证:通知到达时,缓存中的视图必须至少是最新的,但是可能更新鲜(例如Delete取消Add事件)。
处理程序按照附加的顺序在单个工作程序队列上执行。 处理程序接收通知事件和关联的对象。 请注意,在启动缓存控制器之前,必须注册所有处理程序。
ConfigStoreCache 相较于ConfigStore多了三个方法
type ConfigStoreCache interface {
ConfigStore
// RegisterEventHandler 为指定的类型的更新时间添加处理器
RegisterEventHandler(kind config.GroupVersionKind, handler func(config.Config, config.Config, Event))
// 运行
Run(stop <-chan struct{})
// 初始高速缓存同步完成后,HasSynced返回true
HasSynced() bool
}handler
当Config发生变化,处理event事件
ConfigStoreCache 类型
memory
istio中有两处用到了memory ConfigStore
监听registry配置文件变化,写入到mem store
监听xds数据变化,写入到mem store
ingress
监听k8s ingress资源变化
Kubernetes
监听k8s资源变化
configaggregate
将所有的 []model.ConfigStoreCache转化为一个,从而统一管理,注册对应的EventHandler
eventhandler
configHandler
用来监听以下crd obj的事件变化
confighandler的具体实现
workloadentryhandler
WorkloadEntryHandler定义WorkloadEntry的handler
serviceEntryHandler
serviceEntryHandler 为 service entries定义handler
kubecontroller.WorkloadInstanceHandler
当worloadentry更新时触发k8s对应service的更新及缓存
serviceentrystore.WorkloadInstanceHandler
当k8spod变化时触发对应service entry的变化
serviceentry 感知pod变化
默认开启,当pod发生变化时进行调用
具体处理逻辑
service感知workloadentry变化
默认开启
扫描关注我:

Last updated
Was this helpful?