[k8s] Container 的功能和所使用的技術 (1)
在 前一篇文章 中, 我們說到 container 技術可以減低虛擬機的 overhead, 因此, 下一個問題就是, container 是怎麼做到的? 其技術特徵和虛擬機的技術差異為何? 事實上, container 的概念主要來自於 linux 的多工與分離, 就像是我們高中程式課在工作站寫 c code 的經驗, 不同使用者, 以不同帳戶同時登入同一台主機, 每個使用者有自己的空間 (namespaces), 分隔獨立的程式 (PID), 並共享工作站的資源 (CPU, 記憶體, 以及硬碟等), 這樣的概念就是最基本的 container 的由來. 不過, 上述的行為只解釋了對於檔案系統與程式的隔離, 接著, 在工作站環境中, 另一個問題就是, 假如有一個使用者寫了一個無止盡的 while loop, 將拖慢所有人的速度, 為了避免此狀況發生, cgroup 在 2006 年被提出, 用以限制, 控制與分離一個行程群組的資源 (例如: CPU, 記憶體, 磁碟輸入輸出等), 可以參考: https://access.redhat.com/documentation/zh-tw/red_hat_enterprise_linux/6/html/resource_management_guide/ch01 https://delftswa.github.io/chapters/docker/ 在上圖中, 我們介紹了 namespaces 和 cgroup 的功能, 剩下來相關的套件, SELinux, capabilities, AppArmor, 和安全性相關, Netlink 和 Netfilter 則和網路虛擬化相關, 在下一篇文章 (2) 中, 我們預計先研讀網路虛擬化的部分, 安全性則先跳過, 之後 (3) 再往上介紹 libvrit, LXC, systemd-nspawn 三個模組, 最後 (4) 則是比較 docker 和 linux container (如: LXC) 的不同. 預計先透過這一系列四篇文章介紹 docker 的基礎, 並在之後繼續介紹 kubernetes 的技術 [Update] Docker使用的Linux核心模組功能包括下列各項: Namespace