K8S學習筆記之九-pause容器


一、概念

簡介:Pause容器 全稱infrastucture container(又叫infra)基礎容器,作為init pod存在,其他pod都會從pause 容器中fork出來

1、每個Pod里運行着一個特殊的被稱之為Pause的容器,其他容器則為業務容器,這些業務容器共享Pause容器的網絡棧和Volume掛載卷,
2、因此他們之間通信和數據交換更為高效,在設計時我們可以充分利用這一特性將一組密切相關的服務進程放入同一個Pod中。
3、同一個Pod里的容器之間僅需通過localhost就能互相通信。

pause容器主要為每個業務容器提供以下功能:

①  PID命名空間:Pod中的不同應用程序可以看到其他應用程序的進程ID。
②   網絡命名空間:Pod中的多個容器能夠訪問同一個IP和端口范圍。
③   IPC命名空間:Pod中的多個容器能夠使用SystemV IPC或POSIX消息隊列進行通信。
④   UTS命名空間:Pod中的多個容器共享一個主機名;Volumes(共享存儲卷):
⑤   Pod中的各個容器可以訪問在Pod級別定義的Volumes。 

 

 二、例子

kubernetes中的pause容器主要為每個業務容器提供以下功能:

1.在pod中擔任Linux命名空間共享的基礎;

2. 啟用pid命名空間,開啟init進程。

Ⅰ、在節點上運行一個pause容器

docker run -d --name pause -p 8880:80 da86e6ba6ca1

 

 

Ⅱ、運行一個nginx容器,

1、配置一個nginx.conf,

 cat <<EOF >> nginx.conf
error_log stderr;
events { worker_connections  1024; }
http {
    access_log /dev/stdout combined;
    server {
        listen 80 default_server;
        server_name example.com www.example.com;
        location / {
            proxy_pass http://127.0.0.1:2368;
        }
    }
}
EOF

2、運行一個nginx容器,nginx將為 localhost:2368 創建一個代理。

docker run -d --name nginx -v `pwd`/nginx.conf:/etc/nginx/nginx.conf --net=container:pause 
--ipc=container:pause --pid=container:pause nginx

Ⅲ、然后再為 ghost 創建一個應用容器,這是一款博客軟件

docker run -d --name ghost --net=container:pause --ipc=container:pause --pid=container:pause ghost

Ⅳ、解析

1、pause容器將內部的80端口映射到宿主機的8880端口,pause容器在宿主機上設置好了網絡namespace后,nginx容器加入到該網絡namespace中

2、nginx容器啟動的時候指定了 --net=container:pause ,ghost容器同樣加入到了該網絡namespace中,這樣三個容器就共享了網絡,互相之間

就可以使用 localhost 直接通信

3、 --ipc=contianer:pause --pid=container:pause 就是三個容器處於同一個namespace中,init進程為 pause

4、這時我們進入到ghost容器中查看進程情況

# ps aux
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0   1024     4 ?        Ss   13:49   0:00 /pause
root         5  0.0  0.1  32432  5736 ?        Ss   13:51   0:00 nginx: master p
systemd+     9  0.0  0.0  32980  3304 ?        S    13:51   0:00 nginx: worker p
node        10  0.3  2.0 1254200 83788 ?       Ssl  13:53   0:03 node current/in
root        79  0.1  0.0   4336   812 pts/0    Ss   14:09   0:00 sh
root        87  0.0  0.0  17500  2080 pts/0    R+   14:10   0:00 ps aux

在ghost容器中同時可以看到pause和nginx容器的進程,並且pause容器的PID是1。而在kubernetes中容器的PID=1的進程即為容器本身的業務進程 


免責聲明!

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



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