K8S 學習筆記之 pause 容器

【導讀】使用雲服務時,登陸宿主機器可以看到有很多啓動命令是 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 <br>--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 直接通信

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

這時我們進入到 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的進程即爲容器本身的業務進程

轉自:鄔迪內斯

cnblogs.com/wuchangblog/p/13427141.html

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/vL04sTurogXDesDyVz5bzg