namespace和cgroup被稱為當下輕量虛擬化技術的核心。
namespace實現資源隔離。
cgroup實現資源限制,主要是針對cpu和mem。
那linux系統下namespace是如何實現資源隔離的呢?
具體都隔離了哪些方面?
資源型別
提到資源隔離,所包含的資源型別包括:cpu 記憶體 網路 儲存空間 程序和上下文環境。
隔離其實就是隔離這些因素。
linux的namespace給我們提供了這些資源的隔離能力:
分別是:
- system V IPC 訊號量、訊息佇列、共享記憶體
- 網路棧、裝置、埠號
- 檔案掛載點
- 程序編號
- 使用者和組
- 主機名
檢視資源的namespace
透過 $ ll /proc/<程序PID>/ns
可以看到當前程序的namespace資訊。
root@ubuntu-server:~# ll /proc/2499/ns
total 0
dr-x--x--x 2 root root 0 Jun 11 06:02 ./
dr-xr-xr-x 9 root root 0 Jun 11 06:01 ../
lrwxrwxrwx 1 root root 0 Jun 11 06:02 cgroup -> 'cgroup:[4026531835]'
lrwxrwxrwx 1 root root 0 Jun 11 06:02 ipc -> 'ipc:[4026531839]'
lrwxrwxrwx 1 root root 0 Jun 11 06:02 mnt -> 'mnt:[4026531841]'
lrwxrwxrwx 1 root root 0 Jun 11 06:02 net -> 'net:[4026531840]'
lrwxrwxrwx 1 root root 0 Jun 11 06:02 pid -> 'pid:[4026531836]'
lrwxrwxrwx 1 root root 0 Jun 11 06:02 pid_for_children -> 'pid:[4026531836]'
lrwxrwxrwx 1 root root 0 Jun 11 06:02 time -> 'time:[4026531834]'
lrwxrwxrwx 1 root root 0 Jun 11 06:02 time_for_children -> 'time:[4026531834]'
lrwxrwxrwx 1 root root 0 Jun 11 06:02 user -> 'user:[4026531837]'
lrwxrwxrwx 1 root root 0 Jun 11 06:02 uts -> 'uts:[4026531838]'
系統呼叫函式
- unshare 實現在原程序上切換namespace。
- clone 在建立程序的同時,建立namespace
- setns 將當前程序加入到已有的namespace中。
這三個函式實現了在程序建立時、後實現對namespace的切換。
https://www.cnblogs.com/sparkdev/p/9365405.html