Indexer是client-go中实现的一个本地存储,它可以建立索引并存储Resource的对象。Reflector通过Delta FIFO Queue将资源对象存储到Indexer中。 需要注意的是,Indexer中的数据与etcd中的数据是完全一致的,这样client-go需要数据时,无须每次都从api-server获取,从而减少了请求过多造成对api-server的压力。 一句话总结:Indexer...
第二个接口:remote/get_obj_by_obj_key_remote_query,此接口会调用client-go库的api,向api-server发起http请求,查找指定pod的信息返回 部署情况说明 今天的压测所涉及的服务和应用,它们的部署情况如下图所示,共两台Ubuntu电脑,电脑1用于执行压测,上面部署了k6(或者部署docker,用docker来运行k6),电脑2部署了kubernet...
// k8s.io/client-go/tools/cache/index.go:35 type Indexer interface { // Store Interface Store // Index 通过给定索引名称返回其索引值集 Index(indexName string, obj interface{}) ([]interface{}, error) // 该方法通过索引名称和索引值获取所有值的 key IndexKeys(indexName, indexedValue string)...
Indexer是client-go用来存储资源对象并自带索引功能的本地存储,Reflector从DeltaFIFO中将消费出来的资源对象存储至Indexer。Indexer中的数据与Etcd集群中的数据保持完全一致。client-go可以很方便地从本地存储中读取相应的资源对象数据,而无须每次都从远程Etcd集群中读取,这样可以减轻Kubernetes API Server和Etcd集群的压力。
client-go之Indexer源码分析 1.Indexer概述 Indexer中有informer维护的指定资源对象的相对于etcd数据的一份本地内存缓存,可通过该缓存获取资源对象,以减少对apiserver、对etcd的请求压力。 // staging/src/k8s.io/client-go/tools/cache/thread_safe_store.gotypethreadSafeMapstruct{ ...
// k8s.io/client-go/tools/cache/indexer.go// Indexer 使用多个索引扩展了 Store,并限制了每个累加器只能容纳当前对象// 这里有3种字符串需要说明:// 1. 一个存储键,在 Store 接口中定义(其实就是对象键)// 2. 一个索引的名称(相当于索引分类名称)// ...
通读下client-go\tools\cache 包下的 store.go 和 thread_safe_store.go 的代码,其中索引有点绕,多次反复对照上图可以获得更好理解。再结合下面实际的建立和查询索引的例子更加有助理解代码: 代码语言:javascript 复制 packagemainimport("fmt"v1"k8s.io/api/core/v1""k8s.io/apimachinery/pkg/api/meta"meta...
Indexer是一个用来存储资源对象的内存存储,处理用户的查询是非常快速高效的。源码路径为k8s.io/client-go/tools/cache/index.go。 Indexer的实现主要分为2部分,ThreadSafeMap是底层的并发安全存储,Indexer索引器用来注册索引函数。 1.ThreadSafeMap并发安全存储 ...
Informer机制是Kubernetes中Client-Go库的核心组件之一,它负责监控和同步Kubernetes API对象的状态。在Informer机制中,Cache.Indexer是一个关键组件,它提供了内存存储和快速索引的功能,使得Informer能够高效地处理和同步API对象。 首先,我们需要了解Informer机制的整体架构。Informer主要由三部分组成:Reflector、DeltaFIFO和Indexer...
// staging/src/k8s.io/client-go/tools/cache/thread_safe_store.go type threadSafeMap struct { items map[string]interface{} indexers Indexers indices Indices ... } informer 所维护的缓存依赖于 threadSafeMap 结构体中的 items 属性,其本质上是一个用 map 构建的键值对,资源对象都存在 items 这个 ma...