ToB企服应用市场:ToB评测及商务社交产业平台

标题: 表里不一--限定容器内存4G,free还是32G [打印本页]

作者: tsx81429    时间: 2024-12-2 10:56
标题: 表里不一--限定容器内存4G,free还是32G
前言

最近有个新同事问了我一个题目,明显通过limit给容器内存限定了4G,为什么进容器看到的还是宿主机的内存32G
  1. ▶ docker run -it --rm -m 512m ubuntu:18.04 bash
  2. root@ae00bec75ad7:/# free -m
  3.               total        used        free      shared  buff/cache   available
  4. Mem:          31954       11482        8487        1708       11983       18305
  5. Swap:          2047           0        2047
复制代码
这个提问不禁勾起了我的一泡回忆,那是之前在学习《深入剖析kubernetes》的时候提到的知识细节
环境准备

组件版本操作系统Ubuntu 22.04.4 LTSlxcfs4.0.3k8sv1.26.3lxcfs原理介绍

  1. /proc/cpuinfo
  2. /proc/diskstats
  3. /proc/meminfo
  4. /proc/stat
  5. /proc/swaps
  6. /proc/uptime
  7. /proc/slabinfo
  8. /sys/devices/system/cpu/online
复制代码
安装lxcfs

1)直接使用apt安装lxcfs工具
  1. ▶ sudo apt install lxcfs
复制代码
2)部署到对应的目录
  1. sudo mkdir -p /var/lib/lxcfs
  2. sudo lxcfs /var/lib/lxcfs &
复制代码
部署完成之后,lxcfs是以一个后台进程的方式工作
docker 使用

1. 通例启动
  1. ▶ docker run -it --rm -m 512m ubuntu:18.04 bash
  2. root@ae00bec75ad7:/# free -m
  3.               total        used        free      shared  buff/cache   available
  4. Mem:          31954       11482        8487        1708       11983       18305
  5. Swap:          2047           0        2047
复制代码
2. docker使用lxcfs

先安装lxcfs
  1. ▶ sudo apt install lxcfs
复制代码
  1. ▶ docker run -it --rm -m 512m \
  2.       -v /var/lib/lxcfs/proc/meminfo:/proc/meminfo:rw \
  3.       ubuntu:18.04 bash
  4. root@56e3c146ba4e:/# free -m
  5.               total        used        free      shared  buff/cache   available
  6. Mem:            512           1         510           0           0         510
  7. Swap:             0           0           0
复制代码
通过lxcfs,让docker正确的识别了限定的内存
k8s 使用

1. 通例启动
  1. ▶ echo '         
  2. apiVersion: v1
  3. kind: Pod
  4. metadata:
  5.   name: wilson-test
  6. spec:
  7.   containers:
  8.   - image: ubuntu:18.04
  9.     imagePullPolicy: IfNotPresent
  10.     command: ["sleep", "33333"]
  11.     name: wilson-test
  12.     resources:
  13.       limits:
  14.         memory: 128Mi
  15.       requests:
  16.         memory: 64Mi
  17. ' | kubectl apply -f -
  18. pod/wilson-test created
  19. ▶ kubectl get pod
  20. NAME          READY   STATUS    RESTARTS   AGE
  21. wilson-test   1/1     Running   0          3s
  22. ▶ kubectl exec -it wilson-test -- free -m
  23.               total        used        free      shared  buff/cache   available
  24. Mem:          31954       11034        6384        1568       14534       18893
  25. Swap:          2047           0        2047
复制代码
使用lxcfs
  1. ▶ echo '                                                                                                                                                                                                                             
  2. apiVersion: v1                                                                                                                                                                                                                       
  3. kind: Pod
  4. metadata:
  5.   name: wilson-test
  6. spec:
  7.   containers:
  8.   - image: ubuntu:18.04
  9.     imagePullPolicy: IfNotPresent
  10.     command: ["sleep", "33333"]
  11.     name: wilson-test
  12.     resources:
  13.       limits:
  14.         memory: 128Mi
  15.       requests:
  16.         memory: 64Mi
  17.     volumeMounts:
  18.     - mountPath: /proc/meminfo
  19.       name: lxcfs-proc-meminfo
  20.       readOnly: true
  21.   volumes:
  22.   - hostPath:
  23.       path: /var/lib/lxcfs/proc/meminfo
  24.       type: ""
  25.     name: lxcfs-proc-meminfo
  26. ' | kubectl apply -f -
  27. pod/wilson-test created
  28. ▶ kubectl get pod
  29. NAME          READY   STATUS    RESTARTS   AGE
  30. wilson-test   1/1     Running   0          2s
  31. ▶ kubectl exec -it wilson-test -- free -m
  32.               total        used        free      shared  buff/cache   available
  33. Mem:            128           0         127           0           0         127
  34. Swap:          2047           0        2047
复制代码
内存限定128m已经生效
k8s自动注入lxcfs preset

1. 使用k8s preset

2. 使用k8s Admission Controller

在github也可以找到大佬现成 lxcfs-admission-webhook,但是貌似也很久没更新了
小结

联系我

联系我,做深入的交流

至此,本文结束
在下才疏学浅,有撒汤漏水的,请各位不吝赐教...

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4