news 2026/9/25 7:18:49

kubernetes中利用LXCFS控制容器资源可见性

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
kubernetes中利用LXCFS控制容器资源可见性

背景

Linux 利用Cgroup实现了对容器的资源限制,但在容器内部依然缺省挂载了宿主机上的procfs的/proc目录,其包含如:meminfo、cpuinfo、stat、uptime等资源信息。一些监控工具如free、top或业务应用还依赖上述文件内容获取资源配置和使用情况。当它们在容器中运行时,就会把宿主机的资源状态读取出来,导致资源设置不对。

上面提到的问题,可以通过LXCFS方法来解决。

LXCFS 简介

社区中常见的做法是利用lxcfs来提供容器中的资源可见性。lxcfs是一个开源的FUSE(用户态文件系统)实现来支持LXC容器,它也可以支持Docker容器。

LXCFS通过用户态文件系统,在容器中提供下列procfs的文件。

/proc/cpuinfo /proc/diskstats /proc/meminfo /proc/stat /proc/swaps /proc/uptime

LXCFS的示意图如下:

比如,把宿主机的/var/lib/lxcfs/proc/memoinfo文件挂载到 Docker 容器的/proc/meminfo位置后。容器中进程读取相应文件内容时,LXCFS的FUSE实现会从容器对应的Cgroup中读取正确的内存限制。从而使得应用获得正确的资源约束设定。

LXCFS 在 Kubernetes 中实践

注意

在网上搜索到很多文章使用https://github.com/denverdino/lxcfs-initializer项目,但是在 Kubernetes 1.14+ 版本中就不支持initializers方法。并且这个项目已归档,不在维护,所以不推荐使用这个项目。

社区推出另一个项目https://github.com/denverdino/lxcfs-admission-webhook通过Admission Webhook给 Pod 注入 LXCFS 设置。

依赖

集群内所有CentOS节点需要安装fuse-libs包,否则会报/usr/local/bin/lxcfs: error while loading shared libraries: libfuse.so.2: cannot open shared object file: No such file or directory错误。

$ yuminstall-y fuse-libs

前提条件

演示环境是 Kubernetes version 1.18.2 二进制部署

1、Kubernetes api-versions 需要启用admissionregistration.k8s.io/v1beta1。(Kubernetes 1.9.0+ 版本默认都启用)

# 查看是否开启$ kubectl api-versions|grep'admissionregistration.k8s.io/v1beta1'admissionregistration.k8s.io/v1beta1

2、kube-apiserver配置中,需要配置MutatingAdmissionWebhook和ValidatingAdmissionWebhook。并且添加顺序要正确。

$grepMutatingAdmissionWebhook /opt/kubernetes/cfg/kube-apiserver --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction\

部署 LXCFS

下载 lxcfs-admission-webhook 项目

$ gti clone https://github.com/denverdino/lxcfs-admission-webhook.git $cdlxcfs-admission-webhook

修改deployment/lxcfs-daemonset.yaml配置文件,因为apps/v1beta2在 1.18.2 版本已经弃用

$gitdiffdiff--git a/deployment/lxcfs-daemonset.yaml b/deployment/lxcfs-daemonset.yaml index 5f58120..ea67e8a100644--- a/deployment/lxcfs-daemonset.yaml +++ b/deployment/lxcfs-daemonset.yaml @@ -1,4 +1,4 @@ -apiVersion: apps/v1beta2 +apiVersion: apps/v1

部署 lxcfs

$ kubectl apply -f deployment/lxcfs-daemonset.yaml# 查看 lxcfs 是否部署成功$ kubectl get pods -n default|greplxcfs lxcfs-4crr41/1 Running0153m lxcfs-jmzpk1/1 Running0155m

部署 lxcfs-admission-webhook injector

# 执行 shell 部署脚本$ deployment/install.sh# 查看$ kubectl get secrets,pods,svc,mutatingwebhookconfigurations

测试

启用需要注入的 lxcfs namespace,命名空间下所有 pod 都会被注入 lxcfs

$ kubectl label namespace default lxcfs-admission-webhook=enabled

部署一个 apache 服务来测试

# 部署 apache$ kubectl apply -f deployment/web.yaml# 查看$ kubectl get pods|grepweb- web-596d5565b8-n79b81/1 Running0125m web-596d5565b8-s49nv1/1 Running0133m# 查看内存限制是否生效,下面显示内存 256Mi 就是 limits 设置的值$ kubectlexec-it web-596d5565b8-n79b8bashroot@web-596d5565b8-n79b8:/usr/local/apache2# free -mtotal usedfreeshared buffers cached Mem:2567248000-/+ buffers/cache:6249Swap:000

清理

清理 lxcfs-admission-webhook

$ deployment/uninstall.sh

清理 lxcfs

$ kubectl delete -f deployment/lxcfs-daemonset.yaml

总结

lxcfs支持容器镜像Centos系统、Ubuntu系统、Debian系统,但是不支持容器镜像Alpine系统。

因为 Alpine 不是使用Gnu libc,而是使用musl libc。

参考链接

  • https://github.com/denverdino/lxcfs-admission-webhook
  • https://yq.aliyun.com/articles/566208
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/24 10:32:55

Java计算机毕设之基于springboot的汽车租赁买卖管理系统的设计与实现个人短租、企业长租、异地还车(完整前后端代码+说明文档+LW,调试定制等)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/9/25 2:14:46

Java毕设选题推荐:基于springboot的汽车租赁买卖管理系统的设计与实现汽车知识科普,租赁管理,热门汽车推荐【附源码、mysql、文档、调试+代码讲解+全bao等】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/9/24 10:32:39

我天,Java 已沦为老四。。

略想了一下才发现,自己好像有大半年都没有关注过 TIOBE 社区了。TIOBE 编程社区相信大家都听过,这是一个查看各种编程语言流行程度和趋势的社区,每个月都有榜单更新,每年也会有年度榜单和总结出炉。昨晚在家整理浏览器收藏夹时&am…

作者头像 李华
网站建设 2026/9/24 10:32:32

Redis 零基础到进阶,Redis 哨兵监控,笔记63-73

Redis 零基础到进阶,Redis 哨兵监控,笔记63-73 一、参考资料 【尚硅谷Redis零基础到进阶,最强redis7教程,阳哥亲自带练(附redis面试题)】 https://www.bilibili.com/video/BV13R4y1v7sP/?p73&share_so…

作者头像 李华