重要概念:Pod內的容器都是平等的關係,共享Network Namespace、共享文件docker
pause容器的最主要的做用:建立共享的網絡名稱空間,以便於其它容器以平等的關係加入此網絡名稱空間設計模式
pause進程是pod中全部容器的父進程(即第一個進程);bash
關於 Pod 最重要的一個事實是:它只是一個邏輯概念。網絡
Pod 在 Kubernetes 項目裏還有更重要的意義,那就是:容器設計模式;ide
那麼,Pod 又是怎麼被「建立」出來的呢?spa
答案是:Pod,實際上是一組共享了某些資源的容器。設計
具體的說:Pod 裏的全部容器,共享的是同一個 Network Namespace,而且能夠聲明共享同一個 Volume。blog
假如:一個有 A、B 兩個容器的 Pod,不就是等同於一個容器(容器 A)共享另一個容器(容器 B)的網絡和 Volume 的玩兒法麼?生命週期
這好像經過 docker run --net --volumes-from 這樣的命令就能實現嘛,好比:進程
docker run --net=B --volumes-from=B --name=A image-A ...
可是,若是真這樣作的話,容器 B 就必須比容器 A 先啓動,這樣一個 Pod 裏的多個容器就不是對等關係,而是拓撲關係了。
因此,在 Kubernetes 項目裏,Pod 的實現須要使用一箇中間容器,這個容器叫做 Infra 容器(初始化容器)。
在這個 Pod 中,Infra 容器永遠都是第一個被建立的容器,而其餘用戶定義的容器,則經過 Join Network Namespace 的方式,與 Infra 容器關聯在一塊兒。
這樣的組織關係,能夠用下面這樣一個示意圖來表達:
如上圖所示,這個 Pod 裏有兩個用戶容器 A 和 B,還有一個 Infra 容器。
很容易理解,在 Kubernetes 項目裏,Infra 容器必定要佔用極少的資源,因此它使用的是一個很是特殊的鏡像,叫做:k8s.gcr.io/pause。
這個鏡像是一個用匯編語言編寫的、永遠處於「暫停」狀態的容器,解壓後的大小也只有 100~200 KB 左右。
而在 Infra 容器「Hold 住(建立)」Network Namespace 後,用戶容器就能夠加入到 Infra 容器的 Network Namespace 當中了。
這也就意味着,對於 Pod 裏的容器 A 和容器 B 來講:
它們能夠直接使用 localhost 進行通訊;
它們看到的網絡設備跟 Infra 容器看到的徹底同樣;
一個 Pod 只有一個 IP 地址,也就是這個 Pod 的 Network Namespace 對應的 IP 地址;
固然,其餘的全部網絡資源,都是一個 Pod 一份,而且被該 Pod 中的全部容器共享;
Pod 的生命週期只跟 Infra 容器一致,而與容器 A 和 B 無關。