1.技術(shù)背景;
創(chuàng)新互聯(lián)一直秉承“誠信做人,踏實做事”的原則,不欺瞞客戶,是我們最起碼的底線! 以服務為基礎,以質(zhì)量求生存,以技術(shù)求發(fā)展,成交一個客戶多一個朋友!為您提供成都網(wǎng)站設計、網(wǎng)站建設、成都網(wǎng)頁設計、小程序設計、成都網(wǎng)站開發(fā)、成都網(wǎng)站制作、成都軟件開發(fā)、app軟件定制開發(fā)是成都本地專業(yè)的網(wǎng)站建設和網(wǎng)站設計公司,等你一起來見證!? ? Linuxs利用Cgroup實現(xiàn)了對容器的資源限制,但在容器內(nèi)部依然缺省掛載了宿主機上的procfs的/proc目錄,其包含如:meminfo, cpuinfo,stat, uptime等資源信息。一些監(jiān)控工具如free/top或遺留應用還依賴上述文件內(nèi)容獲取資源配置和使用情況。當它們在容器中運行時,就會把宿主機的資源狀態(tài)讀取出來,引起錯誤和不便。
2.LXCFS簡介?
? CNCF社區(qū)中常見的做法是利用 lxcfs來提供容器中的資源可見性。lxcfs 是一個開源的FUSE(用戶態(tài)文件系統(tǒng))實現(xiàn)來支持LXC容器,它也可以支持Docker容器。
?githup網(wǎng)站:https://github.com/lxc/lxcfs
?LXCFS通過用戶態(tài)文件系統(tǒng),在容器中提供下列 procfs 的文件。
/proc/cpuinfo /proc/diskstats /proc/meminfo /proc/stat /proc/swaps /proc/uptime
?
3.LXCFS工作示意圖:
? ?
比如,把宿主機的 /var/lib/lxcfs/proc/memoinfo 文件掛載到Docker容器的/proc/meminfo位置后。容器中進程讀取相應文件內(nèi)容時,LXCFS的FUSE實現(xiàn)會從容器對應的Cgroup中讀取正確的內(nèi)存限制。從而使得應用獲得正確的資源約束設定
4.Docker?實戰(zhàn)提升容器資源可見性;
注:
本文采用CentOS 7.2 作為測試環(huán)境,并已經(jīng)開啟FUSE模塊支持。
fuse用途:
傳統(tǒng)的文件系統(tǒng)是操作系統(tǒng)的一部分,放在操作系統(tǒng)內(nèi)核里面實現(xiàn)。Fuse(Filesystem in Userspace), 一個用戶空間文件系統(tǒng)框架,提供給我們一組用于實現(xiàn)一個文件系統(tǒng)的API,使我們可以在用戶態(tài)實現(xiàn)自已的文件系統(tǒng)。
Docker for Mac/Minikube等開發(fā)環(huán)境由于采用高度剪裁過的操作系統(tǒng),無法支持FUSE,并運行LXCFS進行測試。
安裝 lxcfs 的RPM包
4.1.環(huán)境信息:
系統(tǒng)版本 | 內(nèi)核版本 | 軟件依賴 | 軟件版本 | 備注說明 |
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 | 用戶態(tài)實現(xiàn)自已的文件系統(tǒng)。 |
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系統(tǒng)版本兼容性問題,如果將系統(tǒng)做更新升級
yum update?
4.4?查詢實驗結(jié)果;
(1).設置過lxcfs?容器和設置lxcfs?對比? 內(nèi)存對比
(2).未進行設置容器;
(1).設置過lxcfs?容器和設置lxcfs?對比? uptime?對比;
5.Kubernetes 實戰(zhàn)提升容器資源可見性;
一些同學問過如何在Kubernetes集群環(huán)境中使用lxcfs,我們將給大家一個示例方法供參考。
首先我們要在集群節(jié)點上安裝并啟動lxcfs,我們將用Kubernetes的方式,用利用容器和DaemonSet方式來運行 lxcfs FUSE文件系統(tǒng)。
通過Github上獲得
git?clone?https://github.com/denverdino/lxcfs-initializer cd?lxcfs-initializer