我使用 cpu="6"
和 memory=20G
在 k8s(AKS,k8s 版本 1.19.7)上创建了一个 Pod(参见下面的配置)。因此,当我阅读 k8s docu
Kubernetes 中的 1 个 cpu 相当于云的 1 个 vCPU/Core 供应商
当我检查容器上的 lscpu
时,我得到
root@user-ubuntu:/# lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
Address sizes: 46 bits physical, 48 bits virtual
CPU(s): 16 <-- 2x 8 hyperthreading cores?
On-line CPU(s) list: 0-15
Thread(s) per core: 2
Core(s) per socket: 8 <-- expected 6
Socket(s): 1
NUMA node(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 85
Model name: Intel(R) Xeon(R) Platinum 8168 CPU @ 2.70GHz
另外,内存好像是32G而不是20G
root@user-ubuntu:/# vmstat -s -S M
32114 M total memory
kind: Pod
apiVersion: v1
metadata:
name: user-ubuntu
spec:
containers:
- name: user-ubuntu
image: ubuntu:latest
command: ["/bin/sleep", "3650d"]
imagePullPolicy: IfNotPresent
resources:
requests:
cpu: "6"
memory: 20G
limits:
cpu: "6"
memory: 20G
volumeMounts:
- mountPath: "/mnt/azure"
name: volume
restartPolicy: Always
volumes:
- name: volume
persistentVolumeClaim:
claimName: pvc-user-default
答案 0 :(得分:2)
lscpu
命令显示内核资源,特别是来自 /proc/cpuinfo
(参见 documentation)。现在,运行在主机系统(可以是物理机或虚拟机)上的所有容器都共享同一个内核(这是容器与虚拟机的区别特征)。因此,您从 lscpu
获得的信息对应于底层主机而不是容器。
以下是讨论此问题的参考文献列表:
然而,您的容器被 cgroup 限制为您在 Pod 定义中定义的资源使用。因此,即使 lscpu
显示 16 个内核,您的容器仍然只能使用其中的 6 个。这同样适用于内存。