$(nproc) X 1/2 MiB
OpenShift Container Platform应用程序的基本单元称为容器。Linux容器技术是隔离运行进程的轻量级机制,以便它们仅限于与其指定资源交互。
许多应用程序实例可以在单个主机上的容器中运行,而无需了解彼此的进程、文件、网络等等。通常,每个容器提供单个服务(通常称为“微服务”),例如Web服务器或数据库,尽管容器可用于任意工作负载。
多年来,Linux内核一直在整合容器技术的功能。OpenShift Container Platform和Kubernetes增加了在多主机安装中编排容器的能力。
由于Red Hat Enterprise Linux (RHEL)的行为,在CPU使用率高的节点上的容器似乎消耗的内存比预期多。较高的内存消耗可能是由RHEL内核中的kmem_cache
引起的。RHEL内核为每个cgroup创建一个kmem_cache
。为了提高性能,kmem_cache
包含一个cpu_cache
和任何NUMA节点的节点缓存。这些缓存都会消耗内核内存。
存储在这些缓存中的内存量与系统使用的CPU数量成正比。因此,CPU数量越多,这些缓存中保留的内核内存就越多。这些缓存中较多的内核内存会导致OpenShift Container Platform容器超过配置的内存限制,从而导致容器被终止。
为了避免因内核内存问题而丢失容器,请确保容器请求足够的内存。您可以使用以下公式来估计kmem_cache
消耗的内存量,其中nproc
是nproc
命令报告的可用处理单元数。容器请求的下限应为此值加上容器内存需求。
$(nproc) X 1/2 MiB
容器引擎是一段处理用户请求(包括命令行选项和镜像拉取)的软件。容器引擎使用容器运行时(也称为底层容器运行时)来运行和管理部署和操作容器所需的组件。您可能不需要与容器引擎或容器运行时交互。
OpenShift Container Platform文档使用术语容器运行时来指代底层容器运行时。其他文档可以将容器引擎称为容器运行时。 |
OpenShift 容器平台使用 CRI-O 作为容器引擎,并使用 runC 或 crun 作为容器运行时。默认容器运行时是 runC。两种容器运行时都遵循开放容器倡议 (OCI) 运行时规范。
CRI-O 是一个 Kubernetes 原生的容器引擎实现,它与操作系统紧密集成,以提供高效且优化的 Kubernetes 体验。CRI-O 容器引擎在每个 OpenShift 容器平台集群节点上作为 systemd 服务运行。
runC 由 Docker 开发,由开放容器项目维护,是一个用 Go 编写的轻量级、可移植的容器运行时。crun 由 Red Hat 开发,是一个完全用 C 编写的快速且低内存的容器运行时。从 OpenShift 容器平台 4.17 版本开始,您可以在这两者之间进行选择。
crun 比 runC 有几个改进,包括:
更小的二进制文件
更快的处理速度
更低的内存占用
runC 比 crun 有以下一些优势:
最流行的 OCI 容器运行时。
在生产环境中拥有更长的使用历史。
CRI-O 的默认容器运行时。
您可以根据需要在这两种容器运行时之间切换。
有关设置要使用的容器运行时的信息,请参见创建 ContainerRuntimeConfig
CR 以编辑 CRI-O 参数。