我希望我为我的问题选择了正确的位置。首先我应该说我是 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 使用+/-相同的内存量。然而,节点的内存使用量会增加。
提前谢谢您。
Kubernetes 1.26 支持 cgroup v2,但其有效利用还取决于容器运行时(如 Docker 或 containerd)。确保您的运行时兼容并配置为 cgroup v2。 Redis 不受 cgroup 版本的直接影响。
如何检查运行时兼容性?
要检查容器运行时与 Kubernetes 1.26 中 cgroup v2 的兼容性,您可以首先确定节点上正在使用哪个容器运行时。
kubectl get nodes -o wide
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 的版本。
参考文档: