(一)  核心概念

在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”处理过程。

Kubernetes1.3新特性:新的资源回收控制器的更多相关文章

  1. 谈谈我的微软特约稿:《SQL Server 2014 新特性:IO资源调控》

    一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 撰写经历(Experience) 特约稿正文(Content-body) 第一部分:生活中资源 ...

  2. SQL Server 2014 新特性:IO资源调控

    谈谈我的微软特约稿:<SQL Server 2014 新特性:IO资源调控> 2014-07-01 10:19 by 听风吹雨, 570 阅读, 16 评论, 收藏, 收藏 一.本文所涉及 ...

  3. 重新想象 Windows 8.1 Store Apps (88) - 通信的新特性: 新的 HttpClient

    [源码下载] 重新想象 Windows 8.1 Store Apps (88) - 通信的新特性: 新的 HttpClient 作者:webabcd 介绍重新想象 Windows 8.1 Store ...

  4. Atitit.mysql 5.0 5.5  5.6 5.7  新特性 新功能

    Atitit.mysql 5.0 5.5  5.6 5.7  新特性 新功能 1. MySQL  5.6    5 大新特性1 1.1. 优化器的改进1 1.2. InnoDB 改进1 1.3. 使用 ...

  5. Atitit.linux 内核 新特性 新功能

    Atitit.linux 内核 新特性 新功能 1.  Linux 3.2内核新特性 2012-02-12 22:41:471 1.1. EXT4:支持更大的块2 1.2. BTRFS:更快的数据清理 ...

  6. Atitit. visual studio vs2003 vs2005 vs2008  VS2010 vs2012 vs2015新特性 新功能.doc

    Atitit. visual studio vs2003 vs2005 vs2008  VS2010 vs2012 vs2015新特性 新功能.doc 1.1. Visual Studio2 1.2. ...

  7. Atitit.mysql 5.0 5.5  5.6 5.7  新特性 新功能

    Atitit.mysql 5.0 5.5  5.6 5.7  新特性 新功能 1. MySQL  5.6    5 大新特性1 1.1. 优化器的改进1 1.2. InnoDB 改进1 1.3. 使用 ...

  8. webpack4.x配置详解,多页面,多入口,多出口,新特性新坑!!

    花了差不多一天多的时间,重新撸了一遍webpack4.x的常用配置. 基本上常用的配置都熟悉了一遍,总体上来讲,为了对parcel进行反击,webpack从4.x开始,正在朝着尽可能的简化配置文件的方 ...

  9. iOS10 新特性-新功能,以及ReplayKit库

    iOS的10.0 本文总结了iOS的10,运行于目前推出iOS设备推出的主要开发者相关的功能. iOS版10引入了新的方法来增加您的应用程序通过帮助系统参与在适当的时候建议你的应用程序给用户.如果你在 ...

随机推荐

  1. 树hash

    判断树的同构,采用树hash的方式. 树hash定义在有根树上.判断无根树同构的时候,可以比较重心为根的hash值或者比较每个点为根的hash值. h[x]表示x为根的子树的hash,g[x]表示x为 ...

  2. Django项目:CRM(客户关系管理系统)--34--26PerfectCRM实现King_admin自定义排序

    ordering = ['-qq'] #自定义排序,默认'-id' #base_admin.py # ————————24PerfectCRM实现King_admin自定义操作数据———————— f ...

  3. spring cloud深入学习(三)-----服务消费

    在上一篇博文中简单实现了eureka-server以及eureka-provider,后面会实现eureka-cosumer,现在针对eureka做进一步的详解. 微服务整体架构 文字再美也没有图片直 ...

  4. netbeans性能分析文件保存位置

    C:\Users\Administrator\AppData\Roaming\NetBeans\8.2\config\HTTPMonitor 分析完,记得把文件删除,不然系统盘要满了

  5. 使用session实现一次性验证码

    在登录页面和各种页面,会看到有验证码输入,这样做的目的是为了防止密码猜测工具破解密码,保护了用户密码安全,验证码只能使用一次,这样就给密码猜测工具带来了很大的困难,基本上阻断了密码猜测工具的使用. 可 ...

  6. Docker Mysql部署

    1.下载tomcat镜像 docker pull mysql 2.启动容器 docker run -d --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD ...

  7. python实例 文件处理

    对比Java,python的文本处理再次让人感动 #! /usr/bin/python spath="D:/download/baa.txt" f=open(spath," ...

  8. 洛谷P1072 [NOIP2009] Hankson 的趣味题

    P1072 Hankson 的趣味题 题目描述 Hanks 博士是 BT (Bio-Tech,生物技术) 领域的知名专家,他的儿子名叫 Hankson.现在,刚刚放学回家的 Hankson 正在思考一 ...

  9. Django项目:CRM(客户关系管理系统)--03--02PerfectCRM创建ADMIN页面01

    八.CRM项目创建king_admin python.exe manage.py startapp king_admin 'king_admin', 九.CRM项目分发URL "" ...

  10. LUOGU P3112 [USACO14DEC]后卫马克Guard Mark

    题目描述 Farmer John and his herd are playing frisbee. Bessie throws the frisbee down the field, but it' ...