pause的作用


重要概念:Pod內的容器都是平等的關系,共享Network Namespace、共享文件

pause容器的最主要的作用:創建共享的網絡名稱空間,以便於其它容器以平等的關系加入此網絡名稱空間

pause進程是pod中所有容器的父進程(即第一個進程);

 

關於 Pod 最重要的一個事實是:它只是一個邏輯概念。

Pod 在 Kubernetes 項目里還有更重要的意義,那就是:容器設計模式;

 

那么,Pod 又是怎么被“創建”出來的呢?

答案是:Pod,其實是一組共享了某些資源的容器。

具體的說:Pod 里的所有容器,共享的是同一個 Network Namespace,並且可以聲明共享同一個 Volume。

 

假如:一個有 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 容器關聯在一起。

這樣的組織關系,可以用下面這樣一個示意圖來表達:

    22222.jpg

 

如上圖所示,這個 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 無關。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM