k8s.gcr.io/pause的做用

重要概念: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 容器關聯在一塊兒。

這樣的組織關係,能夠用下面這樣一個示意圖來表達:

    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 無關。

相關文章
相關標籤/搜索