Kubernetes中的垃圾回收方法是什么

发布时间:2021-11-02 16:18:47 作者:iii
来源:亿速云 阅读:236

本篇内容介绍了“Kubernetes中的垃圾回收方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

考虑一个场景; 您在Kubernetes中创建了一个部署对象; 因此,它根据提供的清单生成副本集和pod。  后来,您意识到您错过了一个容器的属性,并且为了快速修复,您编辑了部署。 版本的部署会产生新的副本集对象和更新的Pod。 知道旧的会怎样吗?  同样,如果删除部署,副本集或Pod将会发生什么。 答案是显而易见的。 删除部署将删除副本集和Pod; 否则,将会变得一团糟。

Kubernetes中的垃圾回收方法是什么

上面的陈述引出了一个更大的问题:在Kubernetes中如何实现级联删除,是否有多种级联删除策略,在K8中是否可能存在孤立对象?  看起来这是典型的垃圾回收问题。

什么是垃圾收集(GC)?

简而言之,垃圾回收就是从系统中删除未使用的对象,并释放分配给它们的计算资源。 GC出现在所有高级编程语言中,而低级编程语言通过系统库具有GC。

GC的最常见算法之一是标记扫描。 我没有介绍算法的详细信息,但是我们可以从标题有两个阶段的角度来解释它,在第一阶段中标记了在清除阶段删除的对象。

Kubernetes中的垃圾回收方法是什么

> From Wikipedia

这是对GC的非常简短的说明,如果需要,请按照参考部分中发布的链接进行详细说明。 现在,我们将探讨在K8s中实现GC的方法。

业主拥有; OwnerReference元数据

像面向对象的语言一样,某些对象引用其他对象/由其他对象组成,在Kubernetes中以类似的方式,某些对象拥有其他对象。  例如,副本集是一组Pod的所有者,而部署是副本集的所有者。

与面向对象的语言不同,在K8s对象清单定义中,我们从来没有明确定义或编写与所有者相关的关系,而是系统如何确定该关系?  在K8s中,每个从属对象都有一个唯一的元数据字段名称metas.ownerReferences用于关系表示。

下面显示了Kind K8s独立群集上core-dns部署的metadata.ownerReferences值

如果仔细看一下以上命令的输出,您会发现与其他GC实现的细微差别。 对象关联参考金字塔是颠倒的,而不是常规的颠倒的。 下图将为您提供帮助。

Kubernetes中的垃圾回收方法是什么

> Downside Up association of the objects in K8s

Kubernetes中的垃圾回收策略

如前所述,在Kubernetes 1.8之前,依赖对象删除逻辑的实现是在客户端,对于一些资源也是在控制器端。  客户端不是原子操作,有时中途失败会导致群集状态混乱,需要手动清理。  后来,为解决此问题,K8s社区引入并实现了垃圾收集器控制器,以更好,更简单的方式处理GC。

在用于未使用对象GC的K8中,有两大类:

让我们深入了解上述策略。

在级联删除策略中,从属对象与所有者对象一起被删除。 在级联内,有两种模式:前景和背景。

前景级联删除:在前景策略中,所有者对象删除将一直等待,直到所有从属对象都被删除为止。 当前台删除是所有者对象状态更改为进行中的删除时,将发生第一个更改。  处于"正在删除"状态的对象的属性如下:

一旦状态发生变化,垃圾收集器将删除所有"阻塞"依赖项(拥有者参考.blockOwnerDeletion = true的对象),最后删除拥有者对象。

背景级联删除:这要简单得多,在这种情况下,它将直接删除所有者对象。 稍后,GC确定相关对象并将其从后台删除。  它比前台快得多,因为没有等待时间来删除从属对象。

在孤立策略中,将删除所有者对象,并将从属对象中的ownerReferences元数据设置为默认值。 之后,GC控制器确定孤立对象并将其删除。

Kubernetes垃圾收集器控制器如何工作?

如果对象的OwnerReferences元数据中没有任何所有者对象,则GC控制器负责删除该对象。 GC控制器由扫描仪,垃圾处理器和传播器组成。

扫描程序:使用发现API,它会检测K8s集群中支持的所有资源,并通过控制循环定期检测它,扫描系统中的所有资源,并将每个对象添加到"脏队列"中。

垃圾处理器:由在"脏队列"上工作的工人组成。 每个工作人员都会从"脏队列"中取出一个项目,并检查该项目的OwnerReferences是否为空。  如果为空,则仅从Dirty队列中取出下一个条目进行处理; 否则,检查OwnerReferences元数据中的每个条目。  如果OwnerReferences中列出的所有所有者均不存在,则工作程序会请求API服务器删除该对象。

传播器:传播器用于优化GC控制器,包含三个组件。 事件队列,单个工作程序以及与所有者相关的关系的DAG。 以下是繁殖器的特性

“Kubernetes中的垃圾回收方法是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!

推荐阅读:
  1. Kubernetes中YAML是什么
  2. kubernetes中API是什么

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

kubernetes

上一篇:ES6中怎么使用module

下一篇:怎么解析ThreadPoolExecutor

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》