(一)  核心概念

在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. vw单位相关

    1.相对于视口的宽度.视口被均分为100单位的vw h1 { font-size: 8vw; } 如果视口的宽度是200mm,那么上述代码中h1元素的字号将为16mm,即(8x200)/100 2.相 ...

  2. java并发系列(四)-----源码角度彻底理解ReentrantLock(重入锁)

    1.前言 ReentrantLock可以有公平锁和非公平锁的不同实现,只要在构造它的时候传入不同的布尔值,继续跟进下源码我们就能发现,关键在于实例化内部变量sync的方式不同,如下所示: /** * ...

  3. 小希的迷宫 HDU - 1272 (并查集)

    思路: 当图中的集合(连通子图)个数为1并且边数等于顶点数-1(即改图恰好为一棵生成树)时,输出Yes. 此题的坑:(1) 如果只输入0 0算作一组数据的话答案应该输出Yes (2) 输入数据可能并不 ...

  4. Java方法传参的问题

    1.基本数据类型(byte,short,int,long,float,double,boolean,char)的值传递,不改变其值 2.引用数据类型的值传递,改变其值 3.String类型虽然是引用数 ...

  5. Neo4j系列-简介及应用场景

    1.什么是Neo4j? Neo4j是一个高性能的NOSQL图形数据库,它将结构化数据存储在网络上而不是表中.它是一个嵌入式的.基于磁盘的.具备完全的事务特性的Java持久化引擎,但是它将结构化数据存储 ...

  6. 简单描述如何安装配置一个apache开源版hadoop,只描述即可,无需列出完整步骤,能列出步骤更好

    1 ) 安装JDK并配置环境变量(/etc/profile) 2) 关闭防火墙 3) 配置hosts文件,方便hadoop通过主机名访问(/etc/hosts) 4) 设置ssh免密码登录 5) 解压 ...

  7. tomcat9下载与安装

    tomcat9下载与安装 官网下载地址:https://tomcat.apache.org/ 百度云地址:链接:https://pan.baidu.com/s/109PYcSh-eqTctLAXIsb ...

  8. Laravel5.8 使用结巴中文分词的简单教程_php中文分词

    1.首先用composer加载结巴中文分词-PHP composer require fukuball/jieba-php:dev-master 2.在composer.json 中引用, 让他自动加 ...

  9. oracle 控制结构

    1.if 逻辑结构 if/then 结构是最简单的条件测试,如果条件为真,则执行程序的一行或者多行,如果条件为假,则什么都不执行, 示例: if  1>2 then null; end if ; ...

  10. python 正则的使用例子和goupby

    111122333类似这字符串的分类 Solution 1 ... using a regular expression def countAndSay(self, n): s = ' for _ i ...