[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 – 用來隔離不同Container的執行空間
  • Cgroup – 用來分配硬體資源
  • AUFS(chroot) – 用來建立不同Container的檔案系統
  • SELinux – 用來確保Container的網路的安全
  • Netlink – 用來讓不同Container之間的行程進行溝通
  • Netfilter – 建立Container埠為基礎的網路防火牆封包過濾
  • AppArmor – 保護Container的網路及執行安全
  • Linux Bridge – 讓不同Container或不同主機上的Container能溝通

留言

熱門文章

LTE筆記: RSRP, RSSI and RSRQ

[WiFi] WiFi 網路的識別: BSS, ESS, SSID, ESSID, BSSID

LTE筆記: 波束成型 (beamforming) 和天線陣列