什么是Container?
在 Kubernetes 中,Container(容器)?是一個核心概念,你可以將鏡像(Image)類比為程序的“源代碼”,而容器是這段“代碼”運行時的進程。例如,一個 nginx:latest 鏡像被運行時,就成為一個正在執行的容器。
容器是隔離的進程(通過 Linux Namespace 和 Cgroups 實現),包含獨立的文件系統(由鏡像提供)、資源限制和運行環境。
Container 的作用
-
運行應用:容器封裝應用及其依賴,確保環境一致性(開發、測試、生產環境一致)。
-
資源隔離:通過 Cgroups 限制 CPU、內存等資源,避免進程間沖突。
-
快速啟停:容器比虛擬機更輕量,秒級啟動和銷毀,適合動態擴縮容。
-
可移植性:鏡像與容器解耦,使得應用可以跨平臺(云、本地)運行。
Container 與容器運行時的關系
前面提到過容器運行時,比如containerd、docker、CRI-O等。容器運行時(Container Runtime) 是真正管理容器生命周期的組件,負責:
-
拉取鏡像(如從 Docker Hub)。
-
創建/銷毀容器(調用底層技術如?
runc
)。 -
監控容器狀態(如 CPU 使用率)。
Container 與鏡像的關系
-
鏡像是靜態模板:
鏡像是一個只讀文件,包含應用代碼、依賴庫、環境變量等(類似“安裝包”)。例如,ubuntu:22.04
?鏡像包含一個最小化的 Ubuntu 系統。 -
容器是動態實例:
容器基于鏡像創建,運行時會在鏡像頂層添加一個可寫層(存儲運行時數據)。多個容器可以共享同一個鏡像(節省資源)。 -
生命周期:
-
鏡像通過?
docker build
?或?podman build
?生成。 -
容器通過?
kubectl create
?或?docker run
?啟動,停止后可寫層默認銷毀(除非使用持久化存儲)。
-
總結圖示
鏡像(Image) → 容器運行時(Container Runtime) → 容器(Container)
? (只讀模板) ? ? ?(containerd/CRI-O/runc) ? ? ? ? (運行時進程 + 可寫層)
Pod?和?Container?的設計哲學
Pod 與業務獨立性的關系
-
Pod 是 Kubernetes 的最小調度單元,但它的核心設計目標不是“一個 Pod 對應一個業務”,而是:
“一個 Pod 封裝一個或多個緊密耦合的容器,這些容器共享生命周期和資源,共同完成一個業務邏輯單元”。-
典型場景:
-
主容器 + Sidecar 容器:例如一個 Web 應用容器(主業務)和一個日志收集容器(Sidecar)。
-
多容器協作:如一個 Pod 中同時運行應用容器和數據庫代理容器(二者需直接通過?
localhost
?通信)。
-
-
共享資源:Pod 內的容器共享網絡命名空間(同一 IP)、存儲卷(Volume)和 IPC 命名空間(可通過共享內存通信)。
-
一個 Pod 代表一個邏輯上的“服務實例”,它可能包含多個協作的容器來完成這個實例的功能。
Container 與應用獨立性的關系
Container 是鏡像的運行實例,它的設計目標是:
“一個 Container 封裝一個獨立的進程(應用),遵循單一職責原則”。
-
典型場景:
-
一個容器只運行一個主進程(如 Nginx、MySQL)。
-
容器之間通過明確接口(如網絡或 Volume)通信,避免內部狀態依賴。
-
Pod 和 Container 的類比關系
-
Pod 像一臺物理機,而?Container 像這臺機器上運行的進程:
-
同一 Pod 的容器就像同一臺機器上的進程,共享網絡和存儲,通過?
localhost
?直接通信。 -
不同 Pod 的容器就像不同機器上的進程,需要通過 Service 或 Ingress 通信。
-
-
為什么需要 Pod 這一層?
因為有些“應用”需要多個進程(容器)緊密協作(例如需要共享本地文件或頻繁本地通信),而容器本身是隔離的,Pod 提供了這種協作的抽象。
實際用例對比
場景 | 正確設計 | 錯誤設計 | 原因 |
---|---|---|---|
Web 應用 + 日志收集 | 一個 Pod(主容器 + Logstash Sidecar 容器) | 兩個獨立 Pod | Sidecar 需要共享主容器的日志文件 |
微服務 A 和 B | 兩個獨立 Pod(每個 Pod 一個容器) | 一個 Pod 兩個容器 | 微服務應獨立擴縮容 |
Nginx + PHP-FPM | 一個 Pod(Nginx 容器 + PHP 容器) | 一個容器內運行兩個進程 | 違反單一職責,但需權衡運維復雜度 |
圖例總結
下面用圖例的方式加深一下容器運行時、容器、pod的關系。