Kubernetes1.3新特性:新的资源回收控制器

原创 2016年08月29日 13:07:50

(一)  核心概念

在kubernetes1.3中新增了一个资源回收控制器GarbaseCollector,用这个控制器来替代kubernetes1.3中的资源回收控制器GC。

如下为kubernetes1.2中的资源回收控制器结构体:


如下为kubernetes1.3中的资源回收控制器结构体:


在kubernetes1.2中,如果要实现对资源级联回收功能,需要通过客户端进行资源级联回收调用的方式实现,比如存在一个replica set类型的资源,在这个资源下面存在多个POD资源,如果我们使用命令行的方式进行级联删除,我们需要使用kubect命令先删除replica set下面对应的所有POD资源,然后在删除这个replica set资源,对资源级联删除的逻辑处理都要通过客户端来实现。

在kubernetes1.3中,可以将对资源级联回收功能的逻辑处理放到服务端来实现,这样就减少了客户端维护逻辑处理的工作量,方便了用户使用,从而进一步完善了kubernetes作为一个平台的资源回收功能。为了实现上面的想法,在kubernetes1.3中重新设计了资源回收控制器结构体,并且引入了finalizer机制,比如1.3中的“orphan” finalizer机制,以此来让用户进行灵活的选择。

(二)  使用介绍

这个新增的回收控制器是一个阿尔法版本的新特性,也就是说不建议在生产环节下来进行使用。

在kubernetes1.3中新增加了一个启动参数enable-garbage-collector,这个参数的类型是布尔型,如果这个参数设置成true,那么表示启用回收控制器GarbaseCollector。需要注意的是这个启动参数enable-garbage-collector在kube-apiserver和kube-controller-manager两个模块中都存在,如果要让这个功能生效,需要在kube-apiserver和kube-controller-manager两个模块中同时设置。

结构体ObjectMeta表示kubernetes中每个对象的元数据,在kubernetes1.3中新增加了两个变量OwnerReferences和Finalizers,其中第一个变量OwnerReferences是一个结构体数组,对应的结构体是OwnerReference,表示这个对象依赖的其他对象列表;其中第二个变量Finalizers是一个字符串数组,表示这个对象被删除之前需要运行的所有Finalizers。

结构体OwnerReference中有个布尔型变量Controller,如果这个变量值为true,那么表示这个关联对象是管理控制器。因为ObjectMeta对象同这个对象关联的所有OwnerReference对象都必须在相同的namespace中,所以在OwnerReference中就没有namespace变量。


通过ObjectMeta和OwnerReference两个结构体之间的关联关系,就可以实现先删除对象依赖的所有其他对象,最后删除这个对象,以此来达到对资源进行级联回收的目的。

回收控制器GarbageCollector提供了一个管理队列dirtyQueue:


回收控制器会将kubernetes系统中的所有对象都放入这个管理队列中,然后回收控制器会从这个dirtyQueue队列中取出对象,然后进行资源回收处理,资源回收处理的过程是并发运行的,在kube-controller-manager中默认启动5个worker来进行处理。

每个worker的处理过程如下图所示:


回收控制器GarbageCollector还提供了一个变量propagator:


这个变量propagator对应的结构体如下:


这个结构体的作用是监控kubernetes中所有资源的各种事件,包括创建、更新、删除,然后将这些事件放入事件队列eventQueue中,然后启动一个worker,这个worker从事件队列eventQueue中取出事件,然后进行处理,处理的目的是维护正确的对象依赖关系。

比如当对象存在创建或者更新事件时,Propagator会判断这个对象是否存在所有者,也就是说判断这个对象是否存在Owner,如果存在Owner,并且这个Owner已经不存在了,那么将这个对象放入dirtyQueue队列中等待处理。

在比如当对象存在删除事件时,Propagator会从对象依赖关系中删除这个对象,并且把这个对象所依赖的所有对象都放入dirtyQueue队列中等待处理。

Propagator维护对象依赖关系需要使用到结构体node,如下图所示:


通过这个结构体,从Owner的角度出发,可以查询到所有dependent对象,如下图所示:


从整体出发,每个node都存在owner,也都存在dependent,如下图所示:


kubernetes1.3中回收控制器GarbageCollector提供了finalizer机制,也就是说对象在被删除前ObjectMeta.Finalizers中的内容必须都被处理过,Finalizers是一个字符串数组,里面每个字符串表示一个finalizer处理逻辑。在这个机制下回收控制器GarbageCollector提供了一个“orphan” finalizer逻辑,利用到了回收控制器结构体中的orphanQueue队列变量:


同时还利用了结构体DeleteOptions中的OrphanDependents变量:


变量OrphanDependents是一个布尔型变量。当取值为true时,如果这个时候apiserver接收到了一个删除请求,那么api server会更新删除对象所在的ObjectMeta结构体中的Finalizers变量,添加入字符串“orphan”,表示这个对象需要执行“orphan”的finalizer处理逻辑;当取值为false时,如果这个时候api server接收到了一个删除请求,那么api server会更新删除对象所在的ObjectMeta结构体中的Finalizers变量,删除字符串“orphan”,表示这个对象不需要执行“orphan”的finalizer处理逻辑。

这个“orphan”的finalizer处理逻辑就是kubernetes1.3新增加的在服务端进行资源级联删除的功能。回收控制器会从orphanQueue队列中取出对象,然后进行“orphan”处理,“orphan”处理过程是并发运行的,在kube-controller-manager中默认启动5个worker来进行处理,处理过程就是查询这个对象对应的node结构体中的dependent对象,并向api server发送“PATCH”指令进行删除。在“orphan”的finalizer处理最后会从ObjectMeta结构体的Finalizers变量中将“orphan”字符串删除掉,至此完成了整个“orphan”处理过程。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Kubernetes GC in V1.3 源码分析

本文是对Kubernetes V1.3发布的新Garbage Collector模块的源码解读。实际上本文的是基于kubernetes v1.4的代码进行分析的,和V1.3没有大的改动。GC work...

gRPC的Go语言使用例子

gRPC刚被Google开源, gRPC是啥? 先照抄一段说明: gRPC是一个高性能、通用的开源RPC框架,其由Google主要面向移动应用开发并基于HTTP/2协议标准而设计,基于ProtoBuf...

gRpc的demo测试过程

这里是一个关于gRpc的demo,和网上的例子一模一样,但是在运行demo时会出现各种各样的问题,导致放弃grpc的学习,本例子就是一步一步的教大家把demo运行通过,这里是用maven和Idea进行...

Kubernetes1.3新特性:集群联盟-在全球快速部署和管理应用

Kubernetes1.3新特性:集群联盟----在全球快速部署和管理应用 Kubernetes作为生成级别的容器编排管理工具,从发布到现在已经一年多的时间了。作为从Kubernetes诞生就可开始...

Kubernetes1.3新特性:支持GPU

(一)  背景资料 GPU就是图形处理器,是Graphics Processing Unit的缩写。电脑显示器上显示的图像,在显示在显示器上之前,要经过一些列处理,这个过程有个专有的名词叫“渲染" ,...

kubernetes1.5新特性:自定义资源类型

一、自定义资源类型 在Kubernetes1.5中,在CPU、内存、GPU三种类型资源的基础上新增了一种资源类型:Opaque Integer Resources,从英文直接翻译成不透明整数资源,但...

kubernetes1.4新特性:支持两种新的卷插件

背景介绍 在Kubernetes中卷的作用在于提供给POD持久化存储,这些持久化存储可以挂载到POD中的容器上,进而给容器提供持久化存储。 从图中可以看到结构体PodSpec有个属性是...

kubernetes1.4新特性:增加新的节点健康状况类型DiskPressure

背景资料 在Kubernetes架构图中可以看到,节点(Node)是一个由管理节点委托运行任务的worker。 它能运行一个或多个Pods,节点(Node)提供了运行容器环境所需要的所有必要条件,在K...

kubernetes1.6新特性:支持新的卷插件

背景介绍 在Kubernetes中卷的作用在于提供给POD持久化存储,这些持久化存储可以挂载到POD中的容器上,进而给容器提供持久化存储。 从图中可以看到结构体PodSpec有个属...

OpenGL 1.3 新特性 多重贴图示例

  • 2006年03月16日 00:00
  • 86KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Kubernetes1.3新特性:新的资源回收控制器
举报原因:
原因补充:

(最多只允许输入30个字)