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 1.4新特性系列介绍——持久卷

本文描述了目前kubernetes中持久卷(PersistentVolume)的情况,建议先熟悉卷(Volume)的概念。 在云环境下,存储资源管理和计算资源管理有区别。持久卷(PersistentV...
  • qq_26923057
  • qq_26923057
  • 2016年09月30日 20:14
  • 3193

Kubernetes 1.3 的现在和未来

转自:http://geek.csdn.net/news/detail/92484 本文主要讨论Kubernetes 1.3 版本的一些新功能以及对未来功能的展望。阅读本文需要读...
  • zdy0_2004
  • zdy0_2004
  • 2016年08月01日 23:22
  • 443

从kubernetes看如何设计超大规模资源调度系统

在大数据时代,为了合理分配大规模集群的资源,满足日益增多的服务和任务的资源需求,出现了诸如Borg,Mesos,YARN,Omega等一系列的集群资源调度系统。从系统的架构来考虑,可以把它们划分为集中...
  • horsefoot
  • horsefoot
  • 2016年06月03日 11:13
  • 19858

Kubernetes技术分析之资源管理

原文:http://www.open-open.com/lib/view/open1439386169661.html Docker的流行激活了一直不温不火的PaaS,随着而来的是各类Mic...
  • stonexmx
  • stonexmx
  • 2017年05月23日 10:50
  • 418

Kubernetes 1.9版本带来更大的稳定性和存储功能

Kubernetes开发者社区在Kubernetes 1.9的发布中取得了一个成功的一年,增加了一些重要的新功能,这些功能将有助于进一步鼓励企业采用Kubernetes。 Kubernetes是最受...
  • ok875161027
  • ok875161027
  • 2017年12月12日 22:46
  • 253

kubernetes创建资源对象yaml文件例子--pod

kubernetes创建pod的yaml文件参数说明
  • liyingke112
  • liyingke112
  • 2017年07月26日 17:53
  • 3830

kubernetes1.7发布跟踪--1.7部分新特性介绍

Kubernetes发布历史回顾    Kubernetes 1.0 - 2015年7月发布    Kubernetes 1.1 - 2015年11月发布    Kubernetes 1.2 - 20...
  • horsefoot
  • horsefoot
  • 2017年06月08日 19:16
  • 11327

kubernetes调度详解

经过六个月的持续优化,kubernetes宣布1.2版本已经可以支持1000+节点的群集,并且有相当出色的响应能力,这对kubernetes来说是一个重大的改进。随着kubernetes集群规模的扩大...
  • horsefoot
  • horsefoot
  • 2016年04月27日 18:19
  • 12031

Kubernetes 1.3 从入门到进阶 安装篇(2)

上一篇文章我们介绍了使用minikube快速部署kubernetes1.3到单机上. 多台机器构成的集群,本次介绍kubernetes-ansible来进行安装。ansible是自动化部署一大神器,...
  • liumiaocn
  • liumiaocn
  • 2016年07月29日 21:23
  • 2508

Kubernetes调度详解

Kubernetes调度详解原作者 张伟@天云软件经过六个月的持续优化,kubernetes宣布1.2版本已经可以支持1000+节点的群集,并且有相当出色的响应能力,这对kubernetes来说是一个...
  • yarntime
  • yarntime
  • 2016年04月27日 09:54
  • 1400
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Kubernetes1.3新特性:新的资源回收控制器
举报原因:
原因补充:

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