关于AKS中kubectl describe node报告内存Capacity与VM内存不符的疑问
AKS节点Capacity内存与VM标称内存差异的原因
以下是导致该内存差值的核心原因:
- 系统运行占用:AKS节点的操作系统(常见为Ubuntu或Azure Linux)需要内存来运行内核、kubelet、containerd、系统守护进程等核心组件,这部分内存不会被计入Kubernetes的
Capacity字段——Kubernetes的Capacity仅统计可供Pod调度使用的物理内存,排除了系统本身占用的部分。 - 硬件/虚拟化层预留:Azure VM的标称内存包含了硬件固件、UEFI/BIOS以及Hyper-V虚拟化层占用的内存,这部分内存对操作系统完全不可见,自然不会被Kubernetes识别为节点的可用物理内存。
- 内核内存预留:Linux内核会固定预留一小部分内存用于自身核心功能(如页表管理、slab分配器等),这部分内存不对外开放给用户空间,因此也不会被纳入
Capacity的统计范围。
你可以通过以下操作验证:
- 登录目标AKS节点,执行
free -h命令查看系统层面的总可用内存,该数值会和kubectl describe node输出的Capacity.memory基本一致。 - 执行
dmesg | grep -i "Memory:"查看内核初始化时识别的内存总量,会发现该数值比VM标称的64GiB小,差值就是固件和虚拟化层占用的部分。
内容的提问来源于stack exchange,提问作者Charlie
相关产品推荐
相关产品推荐

