利用LXCFS提高容器資源可見性

1.技術背景;python

    Linuxs利用Cgroup實現了對容器的資源限制,但在容器內部依然缺省掛載了宿主機上的procfs的/proc目錄,其包含如:meminfo, cpuinfo,stat, uptime等資源信息。一些監控工具如free/top或遺留應用還依賴上述文件內容獲取資源配置和使用狀況。當它們在容器中運行時,就會把宿主機的資源狀態讀取出來,引發錯誤和不便。linux


2.LXCFS簡介 git

  CNCF社區中常見的作法是利用 lxcfs來提供容器中的資源可見性。lxcfs 是一個開源的FUSE(用戶態文件系統)實現來支持LXC容器,它也能夠支持Docker容器。github

 githup網站:https://github.com/lxc/lxcfsdocker

 LXCFS經過用戶態文件系統,在容器中提供下列 procfs 的文件。ubuntu

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

 

3.LXCFS工做示意圖:centos

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

好比,把宿主機的 /var/lib/lxcfs/proc/memoinfo 文件掛載到Docker容器的/proc/meminfo位置後。容器中進程讀取相應文件內容時,LXCFS的FUSE實現會從容器對應的Cgroup中讀取正確的內存限制。從而使得應用得到正確的資源約束設定bash


4.Docker 實戰提高容器資源可見性;app

注:框架

本文采用CentOS 7.2 做爲測試環境,並已經開啓FUSE模塊支持。


fuse用途:

傳統的文件系統是操做系統的一部分,放在操做系統內核裏面實現。Fuse(Filesystem in Userspace), 一個用戶空間文件系統框架,提供給咱們一組用於實現一個文件系統的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,咱們將用Kubernetes的方式,用利用容器和DaemonSet方式來運行 lxcfs FUSE文件系統。

經過Github上得到


git clone https://github.com/denverdino/lxcfs-initializer
cd lxcfs-initializer
相關文章
相關標籤/搜索