elasticsearch入門系列">elasticsearch入門系列
1001
2022-05-29
Kubernetes的學習往往讓人摸不著頭腦,很難理解其中的原理。
深入剖析Kubernetes系列連載是學習《深入剖析Kubernetes》課程的筆記和總結,記錄學習的過程,并且傳遞知識。
Linux Cgroups 的全稱是 Linux Control Group。它最主要的作用,就是限制一個進程組能夠使用的資源上限,包括 CPU、內存、磁盤、網絡帶寬等等
在 Linux 中,Cgroups 給用戶暴露出來的操作接口是文件系統,即它以文件和目錄的方式組織在操作系統的 /sys/fs/cgroup 路徑下。可以看到,在 /sys/fs/cgroup 下面有很多諸如 cpuset、cpu、 memory 這樣的子目錄,也叫子系統。而對于 Docker 等 Linux 容器項目來說,它們只需要在每個子系統下面,為每個容器創建一個控制組(即創建一個新目錄),然后在啟動容器進程之后,把這個進程的 PID 填寫到對應控制組的 tasks 文件中就可以了
$ while : ; do : ; done & [1] 226 $ top %Cpu0 :100.0 us, 0.0 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st $ cat /sys/fs/cgroup/cpu/container/cpu.cfs_quota_us -1 $ cat /sys/fs/cgroup/cpu/container/cpu.cfs_period_us 100000 $ echo 20000 > /sys/fs/cgroup/cpu/container/cpu.cfs_quota_us $ echo 226 > /sys/fs/cgroup/cpu/container/tasks $ top %Cpu0 : 20.3 us, 0.0 sy, 0.0 ni, 79.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st $ docker run -it --cpu-period=100000 --cpu-quota=20000 ubuntu /bin/bash $ cat /sys/fs/cgroup/cpu/docker/5d5c9f67d/cpu.cfs_period_us 100000 $ cat /sys/fs/cgroup/cpu/docker/5d5c9f67d/cpu.cfs_quota_us 20000
Cgroups 對資源的限制能力也有很多不完善的地方,被提及最多的自然是 /proc 文件系統的問題
Linux 下的 /proc 目錄存儲的是記錄當前內核運行狀態的一系列特殊文件,用戶可以通過訪問這些文件,查看系統以及當前正在運行的進程的信息,比如 CPU 使用情況、內存占用率等,這些文件也是 top 指令查看系統信息的主要數據來源
但是,你如果在容器里執行 top 指令,就會發現,它顯示的信息居然是宿主機的 CPU 和內存數據,而不是當前容器的數據。造成這個問題的原因就是,/proc 文件系統并不知道用戶通過 Cgroups 給這個容器做了什么樣的資源限制,即:/proc 文件系統不了解 Cgroups 限制的存在
top 是從 /proc/stats 目錄下獲取數據,所以道理上來講,容器不掛載宿主機的該目錄就可以了。
lxcfs就是來實現這個功能的,做法是把宿主機的 /var/lib/lxcfs/proc/* 文件掛載到容器的/proc/* 。容器中進程讀取相應文件內容時,LXCFS的FUSE實現會從容器對應的Cgroup中讀取正確的內存限制。從而使得應用獲得正確的資源
Kubernetes Linux 容器
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。