news 2026/4/16 11:07:09

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

作者头像

张小明

前端开发工程师

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

背景

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

上面提到的问题,可以通过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位置后。容器中进程读取相应文件内容时,LXCFSFUSE实现会从容器对应的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配置中,需要配置MutatingAdmissionWebhookValidatingAdmissionWebhook。并且添加顺序要正确。

$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/4/16 9:21:28

扩展域并查集(种类并查集)

理解思想一.团伙给定若干满足如下两条的关系,求会构成多少个团伙:、为朋友。、为敌人。普通并查集维护朋友关系依靠的是朋友关系具有传递性,即朋友的朋友还是朋友。但是,敌人的敌人是朋友并不满足上述传递性,因此需要想…

作者头像 李华
网站建设 2026/4/15 12:17:16

华为OD机考双机位C卷 - 计算误码率 (Java Python JS C/C++ GO )

最新华为上机考试 真题目录:点击查看目录 华为OD面试真题精选:点击立即查看 2025华为od机试双机位C卷 题目描述 误码率是最常用的数据通信传输质量指标。它可以理解为“在多少位数据中出现一位差错”。 移动通信网络中的误码率主要是指比特误码率,其计算公式如下: 比特…

作者头像 李华
网站建设 2026/4/15 13:39:52

jemalloc思想的极致演绎:深度解构Netty内存池的精妙设计与实现

Netty内存池的核心设计借鉴了jemalloc的设计思想。jemalloc是由Jason Evans在FreeBSD项目中实现的高性能内存分配器,其核心优势在于通过细粒度内存块划分与多层级缓存机制,降低内存碎片率并优化高并发场景下的内存分配吞吐量。 Netty基于jemalloc的多Ar…

作者头像 李华
网站建设 2026/4/15 16:22:13

复习——共享内存

共享内存一、共享内存(Shared Memory)1.1 基本概念System V提供:UNIX操作系统的进程间通信方式特点:效率最高的IPC方式1.2 操作流程key → 申请对象 → 映射对象 → 读写对象 → 撤销映射 → 删除对象1.3 与管道的区别特性共享内存…

作者头像 李华
网站建设 2026/4/15 23:42:41

高职金融科技应用专业可考取的金融科技类证书

金融科技(FinTech)是金融与科技融合的领域,涉及数据分析、区块链、人工智能、云计算等技术。高职金融科技应用专业的学生可通过考取相关证书提升竞争力。以下为适合该专业考取的金融科技类证书,包括CDA数据分析师证书。数据分析类…

作者头像 李华