Redis 对 cgroupv1 和 cgroupv2 的支持

问题描述 投票:0回答:1

我希望我为我的问题选择了正确的位置。首先我应该说我是 redis、kubernetes 等方面的新手:(

我有一些运行我们的应用程序的 Azure Kubernetes 集群。我们正在使用Redis。我最近发现 redis:5.0.2-alpine 镜像正在使用,而且已经很旧了....

大约 1 个月前,我们将 kubernetes 更新到 1.26.6,我可以看到内存压力问题。现在我正在尝试一一检查所有第三方组件是否支持cgropV2。

所以问题是:Redis 是否使用 cgroup(我想是的)?如果是,哪一个最低版本支持 cgroupv2?

我已经尝试通过 kubectl top 和 Azure Monitor 监控 pod 的内存使用情况。然而,自更新以来没有检测到重大变化。自更新以来,所有 POD 使用+/-相同的内存量。然而,节点的内存使用量会增加。

提前谢谢您。

redis memory-leaks azure-aks cgroups
1个回答
0
投票

Kubernetes 1.26 支持 cgroup v2,但其有效利用还取决于容器运行时(如 Docker 或 containerd)。确保您的运行时兼容并配置为 cgroup v2。 Redis 不受 cgroup 版本的直接影响。

如何检查运行时兼容性?

要检查容器运行时与 Kubernetes 1.26 中 cgroup v2 的兼容性,您可以首先确定节点上正在使用哪个容器运行时。

kubectl get nodes -o wide

enter image description here

Kubernetes 1.26 不再支持 CRI

v1alpha2
API,这意味着不支持诸如 Containerd 版本 1.5 及更早版本之类的容器运行时。在升级到 Kubernetes 1.26 之前,您需要升级到 Containerd 版本 1.6.0 或更高版本。

关于Redis及其与cgroup v2的兼容性,虽然Redis本身不直接与cgroup交互,但它受到Kubernetes使用cgroup设置的资源限制的影响。 Kubernetes 1.25 将 cgroup v2 引入通用可用性 (GA),提供具有增强的资源管理功能的统一控制系统。 Kubernetes 中对 cgroup v2 的升级应该兼容大多数容器化应用程序,包括 Redis,只要底层容器运行时和主机的 Linux 内核支持 cgroup v2。

因此,为了让 Redis 在 cgroup v2 环境中有效运行,主要考虑因素是容器运行时和主机系统的配置。 Kubernetes 集群需要使用支持 cgroup v2 的容器运行时进行设置,并且主机系统应配置为使用 cgroup v2。如果您使用的是 Docker 或 containerd 等容器运行时,则必须确保将它们更新到支持 cgroup v2 的版本。

参考文档:

了解节点上使用的容器运行时 |库伯内特

Kubernetes 1.25:cgroup v2 正式发布 |库伯内特

Kubernetes 1.26 中的删除、弃用和主要变化 |库伯内特

© www.soinside.com 2019 - 2024. All rights reserved.