k8s之pause容器
k8s之pause容器基础介绍
Pause容器 全称infrastucture container(又叫infra)基础容器。
我们在kubelet的配置文件中心都指定了如下参数,这是指定拉取的pause镜像地址。
more /etc/kubernetes/kubelet······--pod-infra-container-image=hub.test.tech/library/pod-infrastructure:latest"······
Pause的作用
我们看下在node节点上都会起很多pause容器,和pod是一一对应的。
每个Pod里运行着一个特殊的被称之为Pause的容器,其他容器则为业务容器,这些业务容器共享Pause容器的网络栈和Volume挂载卷,因此他们之间通信和数据交换更为高效,在设计时我们可以充分利用这一特性将一组密切相关的服务进程放入同一个Pod中。同一个Pod里的容器之间仅需通过localhost就能互相通信。
kubernetes中的pause容器主要为每个业务容器提供以下功能:
PID命名空间:Pod中的不同应用程序可以看到其他应用程序的进程ID。
网络命名空间:Pod中的多个容器能够访问同一个IP和端口范围。
IPC命名空间:Pod中的多个容器能够使用SystemV IPC或POSIX消息队列进行通信。
UTS命名空间:Pod中的多个容器共享一个主机名;Volumes(共享存储卷):
Pod中的各个容器可以访问在Pod级别定义的Volum
如下图所示:
我们首先在节点上运行一个pause容器。
docker run -d --name pause -p 8880:80 --ipc=host registry.cn-hangzhou.aliyuncs.com/google_containers/pause-amd64:3.1
然后再运行一个nginx容器,
docker run -d --name nginx --net=container:pause --pid=container:pause --ipc=container:pause nginx
然后再为ghost创建一个应用容器,这是一款博客软件。
docker run -d --name ghost --net=container:pause --ipc=container:pause --pid=container:pause ghost
pause容器将内部的80端口映射到宿主机的8880端口,pause容器在宿主机上设置好了网络namespace后,nginx容器加入到该网络namespace中,我们看到nginx容器启动的时候指定了--net=container:pause
,ghost容器同样加入到了该网络namespace中,这样三个容器就共享了网络,互相之间就可以使用localhost直接通信,--ipc=contianer:pause --pid=container:pause
就是三个容器处于同一个namespace中,init进程为pause,这时我们进入到ghost容器中查看进程情况。
root@weizhibiao:~# docker exec -it ghost bash
root@cfa367869c60:/var/lib/ghost# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 13:12 ? 00:00:00 /pause
root 756 0 0 13:37 ? 00:00:00 nginx: master process nginx -g daemon off;
101 785 756 0 13:37 ? 00:00:00 nginx: worker process
node 786 0 2 13:37 ? 00:00:08 node current/index.js
root 1181 0 0 13:41 pts/0 00:00:00 bash
root 1495 1181 0 13:42 pts/0 00:00:00 ps -ef
root@cfa367869c60:/var/lib/ghost#
在ghost容器中同时可以看到pause和nginx容器的进程,并且pause容器的PID是1。而在kubernetes中容器的PID=1的进程即为容器本身的业务进程。
更多推荐
所有评论(0)