Pod 拥有比预期更多的资源

时间:2021-07-28 06:42:38

标签: kubernetes

我使用 cpu="6"memory=20G 在 k8s(AKS,k8s 版本 1.19.7)上创建了一个 Pod(参见下面的配置)。因此,当我阅读 k8s docu

时,我希望 Pod 在 CPU 上有 6 个内核 <块引用>

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

1 个答案:

答案 0 :(得分:2)

lscpu 命令显示内核资源,特别是来自 /proc/cpuinfo(参见 documentation)。现在,运行在主机系统(可以是物理机或虚拟机)上的所有容器都共享同一个内核(这是容器与虚拟机的区别特征)。因此,您从 lscpu 获得的信息对应于底层主机而不是容器。

以下是讨论此问题的参考文献列表:

然而,您的容器被 cgroup 限制为您在 Pod 定义中定义的资源使用。因此,即使 lscpu 显示 16 个内核,您的容器仍然只能使用其中的 6 个。这同样适用于内存。

相关问题