- 文档首页
容器服务
容器服务 VKE
最佳实践
节点和节点池
增强容器资源可见性
增强容器资源可见性
容器服务在内核层面提供容器资源视图相关功能,实现对容器资源的可见性增强。本文为您详细介绍容器资源可见性增强的背景和详细使用方法。
场景介绍
默认情况下,容器资源视图功能的状态是关闭的,容器内获取到的cpu、内存等相关资源信息均来自宿主机(ECS 实例),并非容器真实的资源视图。本场景旨在增强容器资源可见性,开启容器资源视图功能。确保在容器中使用 top、free 等命令读取接口数据时,直接获取容器资源信息,而不是获取容器所在的宿主机资源信息。
容器资源可见性增强支持的文件和资源信息说明如下。
背景信息
容器技术提供不同于传统虚拟机技术的环境隔离方式。通常,Linux 容器对容器打包和启动进行了加速,但同时降低了容器的隔离强度,Linux 容器中的资源视图隔离问题就是其中一个典型案例。
容器可以通过 cgroup 方式对资源 CPU 、内存等指标的使用情况进行限制。但值得注意的是,当容器内的一个进程使用 free、top 等常用命令查询监控信息时,只能查到物理机的监控数据,并非容器的真实数据,这是由于容器并没有做到对/proc,/sys等文件系统的资源视图隔离。
从应用程序的视角来看,在容器里面运行进程和在物理机/虚拟机上运行进程的运行环境是不同的。并且部分应用在容器里运行进程时存在一些问题,例如:nginx 配置中的 worker_processes auto 等,对于需要获取 host cpu info 的程序,通常都通过程序自动判断所在运行环境 CPU 的数量,但如果容器内的进程从/proc/cpuinfo中获取到 CPU 的核数,显示的是宿主机的总量,会影响运行在容器里面服务的运行状态。
前提条件
已经开通容器服务并创建符合要求的容器集群,具体要求参见本文档《使用限制》章节。创建容器集群相关更多介绍参见:创建集群。 使用限制
- 节点池中的存量节点和存量 Pod 无法使用容器资源可见性增强功能,建议新建节点池以使用此功能。
- 容器资源可见性增强功能对容器集群版本、节点操作系统镜像及其版本存在依赖,详细如下:
操作步骤
步骤一:创建节点池并开启容器资源可见性增强
登录 容器服务控制台,前往节点池页面创建一个新的节点池,要求在高级配置的 部署执行脚本 中添加容器资源可见性增强功能的开启命令sysctl -w kernel.cgroup_override_proc=1 >> /etc/sysctl.conf。其他参数根据实际情况配置即可,更多详细介绍参见:创建节点池。
步骤二:创建 Pod 并开启容器资源可见性增强
登录 容器服务控制台,前往工作负载页面创建一个新的工作负载(本文以无状态负载为例),要求在 高级配置 步骤添加实例注解vke.volcengine.com/host-resource-view: false。其他参数根据实际情况配置即可,更多详细介绍参见:创建无状态负载。
结果验证
可通过开启容器资源可见性增强功能前后查看到的资源信息对比来验证结果。本场景已经在 Linux 主机中部署 Docker 应用,并创建一个内存大小为 1 GiB 的容器。
- 若未开启容器资源可见性增强功能,在容器中运行free -m命令时,将查询到容器所在宿主机的资源信息,如下图所示。
- 若已开启容器资源可见性增强功能,在容器中运行free -m命令时,将查询到容器真实的资源信息,如下图所示。
注意
一般情况下,开启容器资源可见性增强功能后,即可满足常规需求,但需要注意以下特殊场景无法支持。
若容器 1 号进程为 systemd,因为采集监控数据的任务可能位于容器的某个子 cgroup 中,而不是根 cgroup,采集的将会是错误数据。
例如:当通过 SSH 登录该容器并运行cat /proc/cpuinfo命令后,该会话进程实际是位于 systemd 所创建的子 cgroup 中,此时查看的结果为错误数据。
最近更新时间:2025.08.15 17:29:13