当前位置:首页 > 其他 > 正文内容

表里不一--约束容器内存4G,free仍是32G

邻居的猫1个月前 (12-09)其他1243

前语

最近有个新搭档问了我一个问题,分明经过limit给容器内存约束了4G,为什么进容器看到的仍是宿主机的内存32G

▶ docker run -it --rm -m 512m ubuntu:18.04 bash
root@ae00bec75ad7:/# free -m 
              total        used        free      shared  buff/cache   available
Mem:          31954       11482        8487        1708       11983       18305
Swap:          2047           0        2047

这个发问不由勾起了我的一泡回想,那是之前在学习《深化分析kubernetes》的时分说到的常识细节

环境预备

组件 版别
操作体系 Ubuntu 22.04.4 LTS
lxcfs 4.0.3
k8s v1.26.3

lxcfs原理介绍

  • free是从/proc文件体系获取的数据,可是容器发动的时分/proc仍是映射的宿主机,所以free显现的信息肯定是宿主机的
  • 运用lxcfs能够处理这个问题,实质便是经过docker发动关于cpu、memory施加的约束行为,手动的挂载proc(修改正的)文件体系进入容器内
  • 现在项目仍然在更新: lxcfs,从文档看,支撑的文件体系有这些:
/proc/cpuinfo
/proc/diskstats
/proc/meminfo
/proc/stat
/proc/swaps
/proc/uptime
/proc/slabinfo
/sys/devices/system/cpu/online

装置lxcfs

1)直接运用apt装置lxcfs东西

▶ sudo apt install lxcfs

2)布置到对应的目录

sudo mkdir -p /var/lib/lxcfs
sudo lxcfs /var/lib/lxcfs &

布置完结之后,lxcfs是以一个后台进程的方法作业

docker 运用

1. 惯例发动

▶ docker run -it --rm -m 512m ubuntu:18.04 bash
root@ae00bec75ad7:/# free -m 
              total        used        free      shared  buff/cache   available
Mem:          31954       11482        8487        1708       11983       18305
Swap:          2047           0        2047

2. docker运用lxcfs

先装置lxcfs

▶ sudo apt install lxcfs
▶ docker run -it --rm -m 512m \
      -v /var/lib/lxcfs/proc/meminfo:/proc/meminfo:rw \
      ubuntu:18.04 bash
root@56e3c146ba4e:/# free -m
              total        used        free      shared  buff/cache   available
Mem:            512           1         510           0           0         510
Swap:             0           0           0

经过lxcfs,让docker正确的识别了约束的内存

k8s 运用

1. 惯例发动

▶ echo '          
apiVersion: v1
kind: Pod
metadata:
  name: wilson-test
spec:
  containers:
  - image: ubuntu:18.04
    imagePullPolicy: IfNotPresent
    command: ["sleep", "33333"]
    name: wilson-test
    resources:
      limits:
        memory: 128Mi
      requests:
        memory: 64Mi
' | kubectl apply -f -
pod/wilson-test created

▶ kubectl get pod 
NAME          READY   STATUS    RESTARTS   AGE
wilson-test   1/1     Running   0          3s

▶ kubectl exec -it wilson-test -- free -m
              total        used        free      shared  buff/cache   available
Mem:          31954       11034        6384        1568       14534       18893
Swap:          2047           0        2047

运用lxcfs

▶ echo '                                                                                                                                                                                                                             
apiVersion: v1                                                                                                                                                                                                                       
kind: Pod
metadata:
  name: wilson-test
spec:
  containers:
  - image: ubuntu:18.04
    imagePullPolicy: IfNotPresent
    command: ["sleep", "33333"]
    name: wilson-test
    resources:
      limits:
        memory: 128Mi
      requests:
        memory: 64Mi
    volumeMounts:
    - mountPath: /proc/meminfo
      name: lxcfs-proc-meminfo
      readOnly: true
  volumes:
  - hostPath:
      path: /var/lib/lxcfs/proc/meminfo
      type: ""
    name: lxcfs-proc-meminfo
' | kubectl apply -f -

pod/wilson-test created

▶ kubectl get pod 
NAME          READY   STATUS    RESTARTS   AGE
wilson-test   1/1     Running   0          2s

▶ kubectl exec -it wilson-test -- free -m
              total        used        free      shared  buff/cache   available
Mem:            128           0         127           0           0         127
Swap:          2047           0        2047

内存约束128m现已收效

k8s主动注入lxcfs preset

1. 运用k8s preset

  • kubernetes v1.20 把 preset给移除了
  • github上有大佬用CRD给做了回来 podpreset,可是3年没更新过了

2. 运用k8s Admission Controller

在github也能够找到大佬现成 lxcfs-admission-webhook,可是形似也好久没更新了

小结

  • 本文只演示了内存,关于其他的目标,只需要依葫芦画瓢即可
  • 关于主动挂载,现成的项目都现已好久没有更新过了,后边能够测验手搓一个admission-hook,敬请期待

联络我

联络我,做深化的沟通


至此,本文完毕
鄙人孤陋寡闻,有撒汤漏水的,请各位不吝赐教...

扫描二维码推送至手机访问。

版权声明:本文由51Blog发布,如需转载请注明出处。

本文链接:https://www.51blog.vip/?id=745

标签: 容器
分享给朋友:

“表里不一--约束容器内存4G,free仍是32G” 的相关文章

三着急教你爆改烂大街项目

三着急教你爆改烂大街项目

简历上如何写项目 最近收到最多的发问便是, 简历上应该写什么项目, 应该预备什么项目, 项目阅历怎样写到简历上. 假如你简历上没有实习阅历 简历就写一个事务项目一个轮子项目.假如你有一段实习阅历 那就先写你实习的项目, 再写一个事务项目和一个轮子项目.假如你有两段以上的实习阅历 那就写2个实习阅历项...

助力海外,空壳支撑Google Play使用兼顾

助力海外,空壳支撑Google Play使用兼顾

空壳 V2.2 ,支撑从 Google Play 下载的使用兼顾! 出海的你或许需求一起办理多个交际或作业账号。空壳 为你供给完美的多账号解决方案,让你能够多账号一起在线,无需来回切换,操作快捷高效。无论是个人日子,仍是事务拓宽,都能称心如意。 空壳 支撑 Google Play 官方使用的兼顾...

云计算工程师做什么,云计算工程师的角色与职责

云计算工程师主要负责设计、开发、部署和维护云计算系统。他们的工作通常包括以下几个方面:1. 系统设计:云计算工程师需要设计云计算架构,包括计算资源、存储资源和网络资源的配置。他们需要根据用户的需求和业务场景来设计合适的云计算解决方案。2. 开发和部署:云计算工程师需要开发和部署云计算应用。他们需要使...

区块链未来发展前景,区块链未来发展趋势与前景展望

区块链未来发展前景,区块链未来发展趋势与前景展望

区块链技术作为一种分布式账本技术,近年来在全球范围内得到了广泛的关注和应用。它具有去中心化、不可篡改、可追溯等特点,被认为在多个领域具有巨大的应用潜力。以下是对区块链未来前景的几点分析:1. 金融领域:区块链技术最初在金融领域得到应用,如比特币等数字货币的发行和交易。未来,区块链有望在支付、清算、结...

全球云计算市场份额,竞争格局与未来趋势

全球云计算市场份额,竞争格局与未来趋势

根据最新的市场数据,全球云计算市场的竞争格局和市场份额情况如下:1. 市场份额前三名: 亚马逊AWS:在2024年第三季度,亚马逊AWS在全球云基础设施市场的份额达到了31%,位居第一。 微软Azure:微软Azure的市场份额为20%,排名第二。 谷歌云:谷歌云的市场份额为11%...

成都区块链公司,引领区块链安全生态建设,护航全球数字经济

成都区块链公司,引领区块链安全生态建设,护航全球数字经济

1. 成都链安 成都链安科技有限公司专注于虚拟资产追踪溯源和调查取证服务,提供链上线索分析、资金扩线、混币追踪等一站式技术支持服务。公司参与了多项区块链安全标准的制定,并获得了多轮投资。2. 成都交子区块链产业创新中心有限公司 这家公司成立于2020年,位于中国(四川)自由贸易试验区成都...