K8S 生态周报| kube-scheduler 频繁抢占时内存泄漏问题得到修正

「K8S 生态周报」内容主要包含我所接触到的 K8S 生态相关的每周值得推荐的一些信息。欢迎订阅知乎专栏「k8s生态」

大家好,我是张晋涛。

本周在小伙伴的提醒下,发现在 Kubernetes 官方博客的 Meet Our Contributors - APAC (China region) 中有关于自己的介绍:

很多人问过我,并且我也在很多场合下聊过,关于 "新人如何参与开源项目" 的话题。

虽然有不少人会直接建议,"不要想那么多,做就完了。"

但就我个人而言,我建议在参与开源项目之前,稍微花一点时间进行思考。 当然,我指的 "参与开源项目",并不仅仅说你给某个项目偶然的提交了一个 issue 或者贡献了一个 PR ,然后就不再去看这个项目了。 我也经常会有在看某个项目的时候,顺手去提个 issue 或者 PR 的情况,但后续可能就不再去关注这个项目了。

我指的是长期投入。

如果你真的想要融入某个开源项目/社区,那么我建议你按自己的兴趣来选择项目,这样才更容易会主动的投入时间, 并在其中收获快乐。

本周仍然很忙, 本篇中主要涉及一些开源项目社区方面的事情,和几个上游相关的 bugfix 。

下周需要去趟深圳,回来后 Kubernetes v1.25 应该就发布正式版本了。

上游进展

这是一个很小的 PR,通过增加了一行 defer cancel(),修复了 kube-scheduler 频繁抢占时的内存泄漏问题。

不过社区中其他人也发现了原本那段代码需要进行优化,于是提交了另一个 PR fix(scheduler): split scheduleOne into two functions for schedulingCycle and bindingCycle by sanposhiho · Pull Request #111775 · kubernetes/kubernetes 来进行更加彻底的修复。(尚未合并)

来自 Crossplane 项目的 @negz 指出,在 Crossplane 项目中,有时候会有上千种 CRD 资源。 他发现当存在约 1900 种 CRD 资源时,kube-apiserver 大约使用了 8Gi RSS 。

经过分析,发现这是由于未在实例化 etcd3 client 时候共享 logger,所以每个 etcd3 client 实例的时候,都会创建一个自己的 logger,从而导致占用了很多的资源。

在这个 PR 中是通过在创建 etcd3 client 的时候,传递已经创建好的 logger,让所有的 clients 共享,以此来减少资源的浪费。

当然,和上述的 PR 类似,他发现目前 Kubernetes 是为每个 CRD 创建一个 etcd client,显然,这应该也是可以优化的,仅仅创建一个 client,共享即可。

我有点记不清为什么原来是为每个 CRD 创建一个 client 了,但目前他在积极的完成新的 PR #111559 ,期待能顺利完成!

etcd 项目健康度的担忧

众所周知,etcd 是 Kubernetes 的核心组件之一,同时它也被大量其他的开源项目所依赖,比如 Apache APISIX 也是使用 etcd 作为其默认的数据存储的。

但是 etcd 最早的两个维护者,基本上都由于工作变动的原因已经不在 etcd 项目中积极活跃了。后来社区中剩余的一些贡献者开始承担起了该项目的维护工作。

在几个月之前,etcd 项目现有的维护者们,由于难以达到大多数人的同意,也发起了一次社区治理方案的调整,在决策时改成了惰性共识 https://github.com/etcd-io/etcd/pull/14053

当前 CNCF TOC 正在讨论 etcd 项目的健康度问题,也许我们可以做点什么,让这个项目变的更好。

Argo 项目毕业提案

Argo Project Graduation Proposal by edlee2121 · Pull Request #604 · cncf/toc

这是一个从 2021 年 2 月开始提交的提案,不过中间由于需要进行一些安全审查,以及其他的一些审查及挑战,所以一直没有完成。 近期又重新进行了更新,并且大多数的报告也已经补充, 至少今年应该是可以毕业的吧(我猜测)。

另外也看到在进行报告补充过程中,Argo 相关的两篇不错的文章,推荐给大家:

新版本发布

好了,以上就是这期的内容,我们下期再见!


欢迎订阅我的文章公众号【MoeLove】

TheMoeLove

加载评论