garbagecollector的功能主要有以下三点:
layStore负责Docker的layer的管理,具体有镜像层的管理,容器init层的管理,容器读写层的管理。layerStore的管理目录为/var/lib/docker/image/aufs/layerdb,主要有以下目录:
referenceStore用来管理镜像名称和id之前的关系,主要和/var/lib/docker/image/aufs/repositories.json打交道。本次分析将介绍关于referenceStore的代码。
来看下referenceStore(即store)的定义,在/reference/store.go中:
之前在”Docker镜像存储分析”中已经介绍过Docker是如何组织镜像存储目录的。在Docker中,主要有三个store来负责对镜像进行管理:
在Kubernetes中,在删除资源时,常常需要做些额外的操作,如删除namespace时,需要删除该namespace下所有资源,然后再删除namepsace;又如联级删除rc时,需要删除该rc所关联的pods,然后再删除rc。finalizer机制就是为了这些功能而加入的。
在v1.5.2中,主要有两个finalizer,”namespace”和”orphan”,其中”namespace”对应namespace的删除;”orphan”对应联级资源的删除。
finalizer机制有点像标签,一个标签代表着某个处理。比如,到超市购物,我们通常会列一个购物清单,然后买一件物品,就在购物清单上把对应的物品名称划掉,当购物清单上的物品名称全部划掉的时候,那么,就可以去结算了。finalizer机制也一样,如果需要某项处理时,就在object上贴上该项的标签,当程序处理完时,再把该项的标签去除。所以我们可以给object贴上很多finalizer标签,触发处理后,如果检测到不存在finalizer标签了,则认为对于该object来说,所有finalizer处理全部完成。
之前我们分析过SharedIndexInformer,SharedIndexInformer提供了一种单reflector多处理函数的informer机制。本次分析将来介绍kube-controller中的sharedInformerFactory。
我们知道,如果一个informer使用一个reflector,那么过多的listwatcher会导致系统负载过重。对同一类资源进行操作的多个informer可以
共享一个reflector,这样将会节省很多资源。而SharedIndexInformer就提供了这样一种机制,允许用户自己在SharedIndexInformer中添加处
理函数。sharedInformerFactory就是利用SharedIndexInformer的这种特性:在sharedInformerFactory中缓存着多个SharedIndexInformer,
如pod资源对应的sharedIndexInformer,现在只要往该sharedIndexInformer中添加处理函数,即可完成多个informer所要求的处理。
sharedInformerFactory定义在/pkg/controller/infoermers/factory.go中:
显然,dynamicClient还需要用户自己设置resource资源。其实更多的时候用户只是希望如果要操作pod,那么生成一个podClient;如果要操作service,那么 生成一个serviceClient。ClientSet就是满足用户的这种需要。
ClientSet是多个Client的集合,定义在/pkg/client/clientset_generated/release_1_5/clientset.go中: