×

AWS上的Red Hat OpenShift服务的应用程序的基本单元称为容器Linux容器技术是隔离运行进程的轻量级机制,以便它们仅限于与其指定资源交互。

许多应用程序实例可以在单个主机上的容器中运行,而无需了解彼此的进程、文件、网络等等。通常,每个容器提供单个服务(通常称为“微服务”),例如Web服务器或数据库,尽管容器可用于任意工作负载。

多年来,Linux内核一直在整合容器技术的功能。AWS上的Red Hat OpenShift服务和Kubernetes增加了在多主机安装中编排容器的能力。

关于容器和RHEL内核内存

由于Red Hat Enterprise Linux (RHEL)的行为,在CPU使用率高的节点上的容器似乎消耗的内存比预期的要多。更高的内存消耗可能是由RHEL内核中的kmem_cache引起的。RHEL内核为每个cgroup创建一个kmem_cache。为了提高性能,kmem_cache包含一个cpu_cache和任何NUMA节点的节点缓存。这些缓存都会消耗内核内存。

存储在这些缓存中的内存量与系统使用的CPU数量成正比。因此,CPU数量越多,存储在这些缓存中的内核内存就越多。这些缓存中较大量的内核内存可能导致AWS上的Red Hat OpenShift服务容器超过配置的内存限制,从而导致容器被终止。

为了避免由于内核内存问题而丢失容器,请确保容器请求足够的内存。您可以使用以下公式来估算kmem_cache消耗的内存量,其中nprocnproc命令报告的可用处理单元数。容器请求的下限应该是此值加上容器内存需求。

$(nproc) X 1/2 MiB

关于容器引擎和容器运行时

容器引擎是一段处理用户请求(包括命令行选项和镜像拉取)的软件。容器引擎使用容器运行时(也称为低级容器运行时)来运行和管理部署和操作容器所需的组件。您可能不需要与容器引擎或容器运行时交互。

AWS上的Red Hat OpenShift服务文档使用术语容器运行时来指代低级容器运行时。其他文档可能将容器引擎称为容器运行时。

AWS上的Red Hat OpenShift服务使用CRI-O作为容器引擎,使用runC或crun作为容器运行时。默认容器运行时是runC。