SLUB是Linux内核中的对象缓存分配器,优化了内存分配效率,支持几乎无锁分配。它通过per-CPU freelist实现,支持KASAN和SLUB_DEBUG进行内存错误检测,并与cgroup v2兼容,允许限制内核内存使用。
Kubernetes v1.36更新了内存QoS功能,采用cgroup v2内存控制器,提供内存预留、分层保护和可观察性指标。Guaranteed Pods使用memory.min进行硬保护,Burstable Pods使用memory.low进行软保护。新版本允许在节点有足够余量时选择性启用内存预留,提升了内存管理的灵活性和效率。
Kubernetes改进了cgroup v1到cgroup v2的CPU权重公式,解决了CPU优先级分配问题,提升了优先级和粒度,使请求1 CPU的容器获得接近默认值的权重,改善资源分配。此变更需OCI运行时支持,建议在非生产环境中测试。
Kubernetes v1.35即将发布,计划移除cgroup v1支持和kube-proxy的ipvs模式,推荐使用cgroup v2和nftables。新特性包括节点声明、Pod资源在线更新、Pod证书、数值污点和用户命名空间,旨在提升集群的稳定性和安全性。
cgroup v2 是 cgroup v1 的升级版,提供更统一的资源管理和隔离。Kubernetes 默认支持 cgroup v2,但实际使用依赖于宿主机内核。Ubuntu 20 默认使用 cgroup v1,而 Ubuntu 22 则使用 cgroup v2。升级 cgroup 版本需在内核 5.4 及以上进行配置。
CentOS社区停止支持后,选择AlmaLinux作为替代方案,介绍了从CentOS迁移Kubernetes集群节点到AlmaLinux的最佳实践,包括移除dockershim和利用cgroup v2进行节点资源管理。cgroup v2提供更强大、动态和增强的资源分配管理,具有更好的可维护性、兼容性和性能。迁移过程中的问题已解决,计划逐步推广采用基于Cgroup V2的机器。
Kubernetes 1.31将cgroup v1支持转入维护模式,以适应cgroup v2的发展。cgroup是Linux内核的功能,用于管理系统资源分配和优先级。Kubernetes在Linux节点上使用cgroup来管理容器的资源消耗。cgroup v2提供了更统一和一致的接口,以及更好的资源控制功能。Kubernetes将更全面地采用cgroup v2,但需要小心处理以避免中断现有工作负载。维护模式不意味着废弃,cgroup v1将继续接收关键安全修复和重大错误修复。用户应计划过渡到cgroup v2。
本文介绍了在Docker容器中使用cgroup v2的方法,解决了内存使用超过限制导致容器终止的问题。通过添加--privileged和--cgroupns=host参数,作者成功控制了容器内的cgroups,保护了关键的自动恢复守护程序。这种设置对于维持模糊测试实验的弹性和效率非常重要。
完成下面两步后,将自动完成登录并继续当前操作。