コンテナの可視性を高めるためのリソースの使用LXCFS

1.背景;

   Linuxsのcgroupは、コンテナのリソース制約を使用して実現したが、容器の内部にはデフォルトは、ホスト上のprocfs / procディレクトリをマウントしたままであって、そのようなこと:meminfoに、cpuinfoを、STAT、稼働時間やその他のリソース情報を。こうした自由/トップまたはレガシーアプリケーションなどのいくつかの監視ツールは、リソースの割り当てと使用を得るために、これらの文書の内容に依存しています。彼らは、コンテナ内で実行するとリソースが不便とエラーの原因と、ホストの状態を読み出しますとき。


2.L XCFSプロフィール 

 CNCFコミュニティは、コンテナのリソース使用率のlxcfsの可視性を提供するのが一般的です。lxcfs FUSEは、オープンソース(ユーザーモードのファイルシステム)のサポートは、LXCコンテナを達成することである、それはまた、ドッカーコンテナをサポートすることができます。

 githupホームページます。https://github.com/lxc/lxcfs

 コンテナ内の文書を次のprocfsは、ファイルシステムを介してユーザーモードをLXCFS。

/ procの/ cpuinfoの
/ procの/ diskstats
/ procの/ meminfoに
/ procの/州
/ procの/スワップ
/ procの/稼働時間

 

3.LXCFSワークイラスト:

5B1B4CF8-9C22-4a3d-A2FA-36D6007B6318.png   

例えば、ホストコンピュータの後には/ var / libに/ lxcfsの/ proc / memoinfoドッカーコンテナファイルは/ proc / meminfoの位置をマウントします。コンテナプロセスは、ファイルの内容を読み取ると、FUSE実装のLXCFSは、対応するcgroup内の容器から正しいメモリ制限を読み取ります。だから、リソースに制約の設定の正しい適用


4.Dockerの戦闘は、コンテナリソースの視認性を高めます。

注意:

本論文では、テスト環境としてのCentOS 7.2、およびFUSEモジュールのサポートをオープンしました。


ヒューズの目的:

従来のファイルシステムは、達成するために、オペレーティングシステムのカーネル内部に配置されたオペレーティングシステムの一部です。ヒューズ(ユーザ空間でファイルシステム)、ユーザー・ファイル・システム・スペース・フレーム、我々はユーザーモードで独自のファイルシステム上で実現することができるように私たちは、ファイルシステムを実装するためのAPIのセットを提供します。


Docker for Mac/Minikube等开发环境由于采用高度剪裁过的操作系统,无法支持FUSE,并运行LXCFS进行测试。
安装 lxcfs 的RPM包


4.1.环境信息:


系统版本 内核版本 软件依赖 软件版本 备注说明



CentOS Linux 7.2.151



3.10.0-1062.4.1.el7.x86_64

fuse-libs

fuse

fuse-devel

fuse-devel-2.9.2-7.el7.x86_64

fuse-libs-2.9.2-7.el7.x86_64

fuse-2.9.2-7.el7.x86_64


用户态实现自已的文件系统。

docker docker-1.13.1-102.git7f2769b.el7.centos.x86_64 docker服务
lxcfs lxcfs-3.1.2-0.2.el7.x86_64.rpm LXCFS主程序软件包


4.2 安装依赖获取软件包并启动服务

yum -y install fuse-devel fuse docker lxc-templates 
wget https://copr-be.cloud.fedoraproject.org/results/ganto/lxc3/epel-7-x86_64/01041891-lxcfs/lxcfs-3.1.2-0.2.el7.x86_64.rpm
rpm -ivh lxcfs-3.1.2-0.2.el7.x86_64.rpm
systemctl start docker
lxcfs /var/lib/lxcfs &


4.3 运行docker 测试镜像

docker run -itd -m 256m \    
-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  \  
ubuntu:16.04 /bin/bash

注意:

container_linux.go:247: starting container process caused "process_linux.go:258: applying cgroup configuration for process caused \"Cannot set property TasksAccounting, or unknown property.\""/usr/bin/docker-current: Error response from daemon: oci runtime error: container_linux.go:247: starting container process caused "process_linux.go:258: applying cgroup configuration for process caused \"Cannot set property TasksAccounting, or unknown property.\"".

解决:主要原因还是centos系统版本兼容性问题,如果将系统做更新升级

yum update 


4.4 查询实验结果;

(1).设置过lxcfs 容器和设置lxcfs 对比  内存对比

image.png


(2).未进行设置容器;

image.png


(1).设置过lxcfs 容器和设置lxcfs 对比  uptime 对比;

image.png



5.Kubernetes 实战提升容器资源可见性;


一部の学生は、クラスタ環境でKubernetes lxcfs使用するために、我々はあなたに参照する方法の例を与える方法を尋ねました。

私たちは、クラスタノードにlxcfsをインストールして起動する必要がまず、我々は、コンテナとDaemonSetの方法を使用して、FUSEファイルシステムlxcfs実行するために使用される、Kubernetesの方法を使用します。

これは、Githubの上採択されました


gitのクローンhttps://github.com/denverdino/lxcfs-initializer
CDのlxcfs初期化子






おすすめ

転載: blog.51cto.com/breaklinux/2473877