Kubernetes学习之pause容器

允我心安 提交于 2019-12-05 06:15:17

根据代码看到,pause容器运行着一个非常简单的进程,它不执行任何功能,一启动就永远把自己阻塞住了,

它的作用就是扮演PID1的角色,并在子进程称为"孤儿进程"的时候,通过调用wait()收割这个子进程,这样就不用担心我们的Pod的PID namespace里会堆满僵尸进程了,这也是为什么kubernetes不随便找个容器,例如Nginx作为父容器,让其他容器加入的原因

共享namespace的意思就是父进程先创建一个namespace,然后其他进程加入到该namespace就共享namespace了

使用pause容器和共享namespace创建Pod

使用docker启动pause进程,以便可以将其他容器添加到Pod中

docker run  -d --name pause gcr.io/google_containers/pause-amd64:3.0

然后,在Pod中运行其他容器,分别是Nginx代理和ghost博客应用

Nginx代理的后端配置成http://127.0.0.1:2368,也就是ghost进程监听的地址

##创建nginx配置文件
vim nginx.conf
error_log stderr;
events { worker_connections 1024; }

http {
    access_log /dev/stdout combined;
    server {
        listen 80 default_server;
        server_name www.example.com;
        location / {
            proxy_pass http://127.0.0.1:2368
        }
    }
}

##启动nginx容器
docker  run -d --name nginx -v `pwd`/nginx.conf:/etc/nginx/nginx.conf -p 8080:80 --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

在这个例子中,我们将nginx容器和ghost容器 加入到pause容器的namespace,如果要访问http://localhost:8080,就能看到ghost通过nginx代理运行,因为pause、nginx、ghost容器之间共享network namespace

注意:共享network namespace,一个pod中的nginx容器才能通过127.0.0.1:2368找到ghost,因为在一个network namespace内,才能通过localhost通信,相当于在一台机器里

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!