使用 LXCFS 文件系统实现容器资源可见性

news2024/12/28 3:37:08

使用 LXCFS 文件系统实现容器资源可见性

  • 一、基本介绍
  • 二、LXCFS 安装与使用
    • 1.安装 LXCFS 文件系统
    • 2.基于 Docker 实现容器资源可见性
    • 3.基于 Kubernetes 实现容器资源可见性

前言:

Linux 利用 Cgroup 实现了对容器资源的限制,但是当在容器内运行 top 命令时就会发现,它显示的信息是宿主机的 CPU 和 内存数据,而不是当前容器的数据。造成这个问题的原因,就是因为 /proc 文件系统并不了解 Cgroup 限制的存在。

社区中常见的做法是利用 lxcfs 文件系统来为容器提供资源可见性。

一、基本介绍


LXCFS 是一个开源的 Fuse(用户态文件系统),支持 LXC 容器,同时支持 Docker 容器。启动以后会在指定目录中维护 /proc 目录中的文件同名的文件,从而保证容器在读取数据时读取到 lxcfs 维护的 /proc 文件中的信息数据。

  • LXCFS 通过用户态文件系统,在容器中提供下列 procfs 的文件。
/proc/cpuinfo
/proc/diskstats
/proc/meminfo
/proc/stat
/proc/swaps
/proc/uptime

LXCFS 的示意图如下:
在这里插入图片描述

  • 比如,把宿主机的 /var/lib/lxcfs/proc/meminfo 文件挂载到容器的 proc/meminfo 位置后;
  • 容器中进程读取相应文件内容时,LXCFSFuse 实现会从容器对应的 Cgroup 中读取正确的内存限制。

二、LXCFS 安装与使用


1.安装 LXCFS 文件系统

[root@localhost ~]# wget http://copr-be.cloud.fedoraproject.org/results/ganto/lxc3/epel-7-x86_64/01041891-lxcfs/lxcfs-3.1.2-0.2.el7.x86_64.rpm   
[root@localhost ~]# yum -y localinstall lxcfs-3.1.2-0.2.el7.x86_64.rpm
[root@localhost ~]# sed -i 's@ExecStart=.*@ExecStart=/usr/bin/lxcfs -o nonempty /var/lib/lxcfs/@g' /usr/lib/systemd/system/lxcfs.service
[root@localhost ~]# systemctl daemon-reload
[root@localhost ~]# systemctl start lxcfs && systemctl enable lxcfs

如果 lxcfs 重启时出现如下报错,说明挂载的目录不是空目录,需要增加 -o nonempty 参数。

  • fuse: mountpoint is not empty
  • fuse: if you are sure this is safe, use the 'nonempty' mount option

2.基于 Docker 实现容器资源可见性

[root@localhost ~]# docker run -it -m 512Mb --cpus 2 \
-v /var/lib/lxcfs/proc/cpuinfo:/proc/cpuinfo:rw \
-v /var/lib/lxcfs/proc/diskstats:/proc/diskstats:rw \
-v /var/lib/lxcfs/proc/meminfo:/proc/meminfo:rw \
-v /var/lib/lxcfs/proc/stat:/proc/stat:rw \
-v /var/lib/lxcfs/proc/swaps:/proc/swaps:rw \
-v /var/lib/lxcfs/proc/uptime:/proc/uptime:rw \
tomcat:8.5.87 /bin/bash

在这里插入图片描述

3.基于 Kubernetes 实现容器资源可见性

  • 通过 https://github.com/denverdino/lxcfs-admission-webhookAdmission Webhook 来给 Pod 注入 LXCFS 设置。
  • 需要检查 Kubernetes 的 api-versions 是否启动 admissionregistration.k8s.io/v1beta1(1.9.0+)
kubectl api-versions | grep 'admissionregistration.k8s.io/v1beta1'

1)安装 lxcfs 文件系统

[root@localhost ~]# git clone https://github.com/denverdino/lxcfs-admission-webhook.git
[root@localhost ~]# cd lxcfs-admission-webhook
[root@localhost lxcfs-admission-webhook]# sed -i '/^metadata/a\  namespace: kube-system' deployment/lxcfs-daemonset.yaml  
[root@localhost lxcfs-admission-webhook]# kubectl apply -f deployment/lxcfs-daemonset.yaml

2)修改 Kube-APIServer 配置文件,开启服务插件

  • 增加:MutatingAdmissionWebhook,ValidatingAdmissionWebhook
[root@localhost ~]# vim /etc/systemd/system/kube-apiserver.service
--enable-admission-plugins=

3)重启 Kube-APIServer 服务

[root@localhost ~]# systemctl daemon-reload
[root@localhost ~]# systemctl restart kube-apiserver

4)安装 lxcfs-admission-webhook 注射器服务

[root@localhost lxcfs-admission-webhook]# bash deployment/install.sh
creating certs in tmpdir /tmp/tmp.kK3cUmQvdG
Generating RSA private key, 2048 bit long modulus
............+++
...................+++
e is 65537 (0x10001)
certificatesigningrequest.certificates.k8s.io/lxcfs-admission-webhook-svc.default created
NAME                                  AGE   REQUESTOR   CONDITION
lxcfs-admission-webhook-svc.default   1s    admin       Pending
certificatesigningrequest.certificates.k8s.io/lxcfs-admission-webhook-svc.default approved
secret/lxcfs-admission-webhook-certs created
NAME                            TYPE     DATA   AGE
lxcfs-admission-webhook-certs   Opaque   2      0s
deployment.apps/lxcfs-admission-webhook-deployment created
service/lxcfs-admission-webhook-svc created
mutatingwebhookconfiguration.admissionregistration.k8s.io/mutating-lxcfs-admission-webhook-cfg created

查看

[root@localhost lxcfs-admission-webhook]# kubectl get secrets,pods,svc,mutatingwebhookconfigurations

6)验证

[root@localhost lxcfs-admission-webhook]# kubectl label namespace default lxcfs-admission-webhook=enabled
[root@localhost lxcfs-admission-webhook]# kubectl apply -f deployment/web.yaml
  • kubectl label namespace default lxcfs-admission-webhook=enabled:将 default 命名空间下所有的 Pod 都进行注册;
  • 这里我们需要注意,注册的命名空间要和 lxcfs 服务所在的命名空间区分开,否则 lxcfs 被重启后会输出如下报错:
caused \\\"not a directory\\\"\"": unknown: Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type

[root@localhost lxcfs-admission-webhook]# kubectl exec -it web-7f4dfcc4f4-88rb7 -- /bin/bash
root@web-7f4dfcc4f4-88rb7:/usr/local/apache2# free -h
             total       used       free     shared    buffers     cached
Mem:          256M       6.2M       249M         0B         0B       300K
-/+ buffers/cache:       5.9M       250M
Swap:           0B         0B         0

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/417949.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《金阁寺》金阁美之于幻想,我用摧毁它来成就其美

《金阁寺》金阁美之于幻想,我用摧毁它来成就其美 三岛由纪夫(1925-1970),日本当代小说家、剧作家、记者、电影制作人和电影演员,右翼分子。主要作品有《金阁寺》《鹿鸣馆》《丰饶之海》等。曾3次获诺贝尔文学奖提名,属…

基于Sketch Up软件校园建模案例分享

Acknowledgements: 由衷感谢覃婉柔、赵泽昊同学在本次课程实习中做出的巨大贡献,感谢本团队成员一起努力奋斗的岁月。 一、建模地点(中国地质大学(武汉)未来城校区图书馆周边) 中国地质大学(武汉…

关于ChatGPT的一些随笔

大家好,我是老三,最近几个月关于ChatGPT的信息可以说是铺天盖地。 “王炸,ChatGPT……” “xxx震撼发布……” “真的要失业了,xxx来袭……” “普通如何利用ChatGPT……” …… 不过老三前一阵比较忙,对ChatGPT…

【MySQL】锁详解——从结构分类到适用场景

我们要学习锁首先要了解下我们想了解的锁到底是什么🤔 而在MySQL中给某个数据加锁的本质其实就是在内存中创建一个锁结构与之关联,而这个锁结构就是我们常提到的MySQL的锁🔒 那么接下来的问题就是,这个锁结构长啥样呢&#xff1…

ASEMI代理ADI亚德诺AD8065ARTZ-REEL7车规级芯片

编辑-Z AD8065ARTZ-REEL7芯片参数: 型号:AD8065ARTZ-REEL7 −3dB带宽:145MHz 0.1 dB平坦度的带宽:7MHz 输入超速恢复时间:175ns 输出恢复时间:170ns 斜率:180V/μs 三阶拦截&#xff1a…

教育大数据总体解决方案(2)

系统管理对当前大数据基础平台的所有服务及组件版本、账户以及自动启动进行统一管理。 服务版本查看当前大数据基础平台的所有服务信息及版本状态。 服务用户和组查看当前大数据基础平台的所有用户信息。 服务自动启动对当前大数据基础平台的所有服务组件进行自启动设置。 后台…

【信息安全】EDR、HIDS、NDR、MDR、XDR 区别与联系

【前言】 随着安全态势的发展,为应对不同的安全防御场景需求,安全产品层出不穷,各大安全厂商也争先推出自家的安全产品/平台,这就导致产品种类繁多,信息量大而杂,本篇博文重点讲解EDR、HIDS、NDR、MDR和XDR…

LinuxGUI自动化测试框架搭建(二)- 详细设计框架设计

(二)-详细设计&框架设计1 需求分析2 技术栈3 框架设计3.1 框架说明3.2 框架执行流程4 预期结果4.1 测试过程log日志4.2 测试报告html格式4.3 测试报告邮件格式1 需求分析 对 实现需求 进行详细分析,主要有下: 功能说明使用U…

经典文献阅读之--FastFlowNet(轻量光流估计)

0. 简介 密集的光流估计在许多机器人视觉任务中起着关键作用。随着深度学习的到来,已经比传统方法以令人满意的精度预测了它。然而,当前的网络经常占用大量参数并且需要沉重的计算成本。这些缺点阻碍了在功率或内存受限的移动设备上的应用。为了应对这些…

Apache 网页优化与防盗链

目录 一、Apache网页优化概述 二、gzip介绍 Apache的压缩模块 配置网页压缩功能 1.检查是否安装 mod_deflate 模块 2.编译安装 Apache 添加 mod_deflate 模块 3.配置 mod_deflate 模块启用 4.检查安装情况,启动服务 5.测试 mod_deflate 压缩是否生效 三. 网页缓…

ChatGPT 不算新技术革命,带不来什么新机会

有人说:一个人从1岁活到80岁很平凡,但如果从80岁倒着活,那么一半以上的人都可能不凡。 生活没有捷径,我们踩过的坑都成为了生活的经验,这些经验越早知道,你要走的弯路就会越少。

DM8:达梦数据库REDO日志损坏修复

DM8:达梦数据库REDO日志损坏修复环境介绍1 启动数据库报错 CODE-7232 查看原实例(5237)初始化参数3 初始化相同参数的新数据库启停新库4 使用 dmmdf 工具 查看帮助5 查看原库(5237)的 db_magic6 修改新库(5236) REDO 日志的 db_magic 值6.1 新库(5236) DAMENG01.log6.2 新库(52…

浙江美格机械股份有限公司董事长——刘国方

现实工作与理想中的方向大相径庭 怎样从工作经历中汲取养分,磨练自身? 学历不高,自身敲门砖不硬 该如何努力才能弥补自身的学历短板? 想为传统企业焕发新生机 该如何在传统行业中搭建新平台? 观看本期节目和我一起寻找答案&#…

burp插件jsEncrypter使用,爆破密码被自定义算法加密

暴力破解的时候,密码一般都是进行了加密 普通的base64、md5等编码,burp里面都有,如果是自定义的密码算法,我们该如何使用burp进行爆破呢? webapp,关于密码学的一个简单靶场 抓包,被加密了。假…

【WCH】基于Keil环境CH32F203 GPIO点灯实验

【WCH】基于Keil环境CH32F203 GPIO点灯实验📌相关篇《关于CH32F203程序下载方式说明》⚡注意编译器版本不要使用AC6版本。 ✨如果是首次入门使用,请先看上面的相关篇内容,了解其下载相关事宜后,再进来学习。 📑GPIO模式…

15个前端数据大屏展示图+源代码免费下载

https://download.csdn.net/download/wanghongpu9305/87658655?spm1001.2014.3001.5503 https://download.csdn.net/download/wanghongpu9305/87658730?spm1001.2014.3001.5503 https://download.csdn.net/download/wanghongpu9305/87684844?spm1001.2014.3001.5503 http…

windows Linux :python 脚本 下载日本葵花8号卫星数据L1级产品,自定义分辨率、时间

前言介绍 近期需要用到日本葵花8号卫星数据,用于相关研究,而通过官方提供的下载方法,难以针对性的下载所需要的数据类型,因此这里编写了一个针对葵花8号卫星L1级数据产品的脚本下载,主要实现两个功能:1、自…

为docker安装图形界面和配置远程桌面连接

由于远程桌面访问必须要打开端口3389,所以在启动docker中ubuntu系统的时候要首先将linux系统的3389端口映射出来 docker run -tid -p 3389:3389 --name ceshi --privilegedtrue ceshi /bin/bash 接下来进入到ubuntu中 docker exec -it ceshi /bin/bash 首先安装X…

查找 | 顺序查找、分块查找、二分查找、哈希查找 | 牛客刷题笔记

查找 就平均查找速度而言,下列几种查找速度从慢至快的关系是:顺序、分块、折半、哈希。 顺序查找的时间复杂度为o(n) 分块查找的时间复杂度为o(log2n)到o(n)之间 二分查找的时间复杂度为o(log2n) 哈希查找的时间复杂度为o(1) 用概率查找改进查找效率&am…

本周热门chatGPT之AutoGPT-AgentGPT,可以实现完全自主实现任务,附部署使用教程

AutoGPT 是一个实验性的开源应用程序,它由GPT-4驱动,但有别于ChatGPT的是,​ 这与ChatGPT的底层语言模型一致。 ​AutoGPT 的定位是将LLM的"思想"串联起来,自主地实现你设定的任何目标。 简单的说,你只用提出…