K8S 生态周报| Kubernetes v1.21 发布, 带来新的内存管理器

本文主要是介绍K8S 生态周报| Kubernetes v1.21 发布, 带来新的内存管理器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

Kubernetes v1.21 正式发布

作为 2021 年的首个版本, Kubernetes v1.21 们带来了众多很棒的特性,共计 51 项特性变更,其中 13 项升级到 Stable, 16 项目升级到 Beta,20 项成为 alpha,以及 2 项将被废弃。我们一起来看看我认为比较重要的一些内容。

CronJob 升级到 Stable

CronJob 顾名思义就是定时/周期性任务,CronJob 从 Kubernetes v1.4 开始引入,到 v1.8 时进入到 Beta 阶段。事实上在 2021 年 2 月份的时候,CronJobV2 controller 已经成为了它默认的控制器版本,也就是说当你在 Kubernetes v1.21 版本中使用 CronJob 时,如果不想使用 CronJobV2 的控制器,而想要换回原始的控制器时,那你需要显式的将它禁用掉,比如:

--feature-gates="CronJobControllerV2=false"

但我个人还是建议使用 CronJobV2 controller ,这个版本用了延迟队列和 informer 缓存,原始版本的控制器简陋了些,也会带来一些问题,比如当镜像/服务不可用时,会产生无限的 Pod 泄漏的问题。

我在生产用 CronJob 还蛮多的,备份/同步任务等,当然也踩过上面提到的坑,但整体来说,CronJob 是个挺有用的特性。

内存管理器(kubelet)

在 Kubernetes v1.21 中在 kubelet 组件生态中新增了一个 内存管理器 ,在 Linux 系统中,为需要保证 QoS 的 Pod 在多 NUMA 节点保障内存和大内存页分配。这个特性非常有用,尤其是当数据库类或者使用 DPDK 进行高性能数据包处理的应用要部署到 Kubernetes 中时,内存对其性能影响至关重要。

这里稍微聊点和 NUMA 相关的内容。简单来说就是在多 NUMA 结构下,为了保证效率,所以会按内存和 CPU 的相对距离来按 node 定义是否为 local memory 或者说本地内存,同时由于实际位置不同,所以就可能会产生内存分配不均匀的情况了。比如,我们可以使用 numactl 管理工具查看下当前机器上的情况:

[tao@moelove ~]# numactl -H
available: 2 nodes (0-1)
node 0 cpus: 0 1 2 3 4 5 6 7 8 9 20 21 22 23 24 25 26 27 28 29
node 0 size: 65186 MB
node 0 free: 9769 MB
node 1 cpus: 10 11 12 13 14 15 16 17 18 19 30 31 32 33 34 35 36 37 38 39
node 1 size: 65536 MB
node 1 free: 15206 MB
node distances:
node   0   1 0:  10  21 1:  21  10 

可以看到在我当前的这台机器上就存在着比较明显的内存分配不均的情况。所以当某个进程达到了其 local memory 的上限,那自然就会影响到它的性能。我最早折腾 NUMA 相关问题是在前些年大量使用 MongoDB 的时候,在这上面也花了些时间,不过这也不影响我对 MongoDB 的喜爱~

这次在 kubelet 中增加的内存管理器便可以很好的解决这个问题,可以在启动 kubelet 的时候通过 --reserved-memory 以及配合 --memory-manager-policy 等参数来一起设置。例如:

--memory-manager-policy static --reserved-memory 0:memory=1Gi,hugepages-1M=2Gi --reserved-memory 1:memory=2Gi

注意:memory-manager-policy 必须设置为 static,如果不设置则默认为 none,即不采取任何行为。

不过这个特性还在较早期的阶段,目前只为 Guaranteed QoS 类的 Pod 提供支持。另外,如果正确启用了此特性,则在机器的 /var/lib/kubelet/memory_manager_state 可以看到其详细信息。

内存管理器的设计 - https://moelove.info

最终将会影响到拓扑管理器。

ReplicaSet 缩容算法调整

当前的缩容算法,主要是优先删除生命周期最短的 Pod,本次修改主要是为了避免某些场景:

比如在缩容的时候,一次性把新扩容的所有的 Pod 给删掉了之类的。所以计划对他们进行对数计算,也可以简单的理解为想要相对随机的对 Pod 进行清理。

这个调整确实能避免掉上述提到的那种场景,不过也可能会带来一些其他的关于服务可用性相关的问题,比如通常情况下运行时间越久的 Pod 可能当前服务的用户数就越多,连接销毁时,可能就会比新 Pod 带来的影响大一些了。当然,这些也都是可以通过其他的方式来避免的,感兴趣的小伙伴可以给我留言,一起讨论。

其他的一些值得关注的变更,我在每周的「K8S 生态周报」中都有介绍过了,这里就不再赘述啦,感兴趣的小伙伴可以翻看每期「K8S 生态周报」中 “上游进展” 的部分。关于此版本中的其他变更,可参考其 ReleaseNote

containerd v1.5.0-rc.0 发布

本周 containerd 发布了 v1.5.0-rc.0 版本,这是 containerd 的第六个大版本,带来了众多值得关注的变更:

runtime

  • #4647 由于 CRI-API 的更新,可以在 task update 的 API 中添加 annotations 了;

  • #4502 当 terminal 为 true 时,添加二进制日志的支持;

Distribution

  • #4523 在日志中记录 registry 返回的异常状态码;

  • #4653 改进了在 registry 为 HTTP 1.1 协议下 pull image 的性能;

CRI

  • cri#1552 实验性的添加了 NRI(Node Resource Interface) 的注入点;

  • #4978 允许为 CRI 的 registry 配置类似 docker 的 /etc/docker/certs.d 目录,可以进行更方便的配置;

  • #5135 默认开启 ocicrypt 支持;

更多关于此版本的变更,请查看其 ReleaseNote

Cilium v1.10.0-rc0 发布

Cilium 我已经多次介绍过了,感兴趣的小伙伴可以查看我之前的文章《被 Google 选择的下一代数据面 Cilium 是什么》。该项目于近期发布了 v1.10.0-rc0 版本,我们看看主要的变更:

  • #13670 · cilium/cilium 添加了 --datapath-mode=lb-only 选项,以支持仅 LB 模式,这样就可以让 cilium-agent 作为一个独立的 loadbalancer 运行了,不需要连接 kube-apiserver 或者 kvstore ;

  • #14858 · cilium/cilium 在 wireguard, tun 等无二层设备上添加 NodePort BPF 支持;

  • #14207 · cilium/cilium 添加 arm64 支持;

更多关于此版本的变更,请查看其 ReleaseNote


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

TheMoeLove

参考资料

[1]

k8s生态: https://zhuanlan.zhihu.com/container

这篇关于K8S 生态周报| Kubernetes v1.21 发布, 带来新的内存管理器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/817255

相关文章

Java内存区域与内存溢出异常的详细探讨

《Java内存区域与内存溢出异常的详细探讨》:本文主要介绍Java内存区域与内存溢出异常的相关资料,分析异常原因并提供解决策略,如参数调整、代码优化等,帮助开发者排查内存问题,需要的朋友可以参考下... 目录一、引言二、Java 运行时数据区域(一)程序计数器(二)Java 虚拟机栈(三)本地方法栈(四)J

java变量内存中存储的使用方式

《java变量内存中存储的使用方式》:本文主要介绍java变量内存中存储的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、介绍2、变量的定义3、 变量的类型4、 变量的作用域5、 内存中的存储方式总结1、介绍在 Java 中,变量是用于存储程序中数据

macOS Sequoia 15.5 发布: 改进邮件和屏幕使用时间功能

《macOSSequoia15.5发布:改进邮件和屏幕使用时间功能》经过常规Beta测试后,新的macOSSequoia15.5现已公开发布,但重要的新功能将被保留到WWDC和... MACOS Sequoia 15.5 正式发布!本次更新为 Mac 用户带来了一系列功能强化、错误修复和安全性提升,进一步增

Python实现剪贴板历史管理器

《Python实现剪贴板历史管理器》在日常工作和编程中,剪贴板是我们使用最频繁的功能之一,本文将介绍如何使用Python和PyQt5开发一个功能强大的剪贴板历史管理器,感兴趣的可以了解下... 目录一、概述:为什么需要剪贴板历史管理二、功能特性全解析2.1 核心功能2.2 增强功能三、效果展示3.1 主界面

Maven 依赖发布与仓库治理的过程解析

《Maven依赖发布与仓库治理的过程解析》:本文主要介绍Maven依赖发布与仓库治理的过程解析,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下... 目录Maven 依赖发布与仓库治理引言第一章:distributionManagement配置的工程化实践1

使用Python构建一个Hexo博客发布工具

《使用Python构建一个Hexo博客发布工具》虽然Hexo的命令行工具非常强大,但对于日常的博客撰写和发布过程,我总觉得缺少一个直观的图形界面来简化操作,下面我们就来看看如何使用Python构建一个... 目录引言Hexo博客系统简介设计需求技术选择代码实现主框架界面设计核心功能实现1. 发布文章2. 加

在Spring Boot中浅尝内存泄漏的实战记录

《在SpringBoot中浅尝内存泄漏的实战记录》本文给大家分享在SpringBoot中浅尝内存泄漏的实战记录,结合实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录使用静态集合持有对象引用,阻止GC回收关键点:可执行代码:验证:1,运行程序(启动时添加JVM参数限制堆大小):2,访问 htt

售价599元起! 华为路由器X1/Pro发布 配置与区别一览

《售价599元起!华为路由器X1/Pro发布配置与区别一览》华为路由器X1/Pro发布,有朋友留言问华为路由X1和X1Pro怎么选择,关于这个问题,本期图文将对这二款路由器做了期参数对比,大家看... 华为路由 X1 系列已经正式发布并开启预售,将在 4 月 25 日 10:08 正式开售,两款产品分别为华

SQL server配置管理器找不到如何打开它

《SQLserver配置管理器找不到如何打开它》最近遇到了SQLserver配置管理器打不开的问题,尝试在开始菜单栏搜SQLServerManager无果,于是将自己找到的方法总结分享给大家,对SQ... 目录方法一:桌面图标进入方法二:运行窗口进入方法三:查找文件路径方法四:检查 SQL Server 安

利用Python快速搭建Markdown笔记发布系统

《利用Python快速搭建Markdown笔记发布系统》这篇文章主要为大家详细介绍了使用Python生态的成熟工具,在30分钟内搭建一个支持Markdown渲染、分类标签、全文搜索的私有化知识发布系统... 目录引言:为什么要自建知识博客一、技术选型:极简主义开发栈二、系统架构设计三、核心代码实现(分步解析