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

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

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

一、从network namespace看pause容器

使用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_connections1024; }

http {

access_log/dev/stdout combined;

server {

listen80default_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通信,相当于在一台机器里

二、从PID namespace看容器

在UNIX系统中,PID为1 的进程是init进程,即所有进程的父进程.init进程比较特殊,它维护一张进程表并且不断的检查其他进程的状态.init进程其中一个作用就是当某个子进程由于父进程的错误退出而变成了"孤儿进程",就会被init进程"收养"并在该进程退出时回收系统资源

在容器中PID namespace对PID进行隔离,因此每个容器中都可以有独立的init进程.当在主机发送SIGKILL或者SIGSTOP(也就是docker kill或者docker stop命令)强制终止容器的运行时,其实就是在终止容器内的init进程.一旦init进程被销毁,同一PID namespace下的进程也随之被销毁

容器中,必须要有一个进程充当每个PID namespace的init进程,使用docker的话,ENTRYPOINT进程就是init进程,如果多个容器之间共享PID namespace,那么拥有PID namespace的那个进程要承担init进程的角色,其他容器作为init进程的子进程添加到PID namespace中

举例说明用户容器和PID容器的关系

先启动一个pause容器

docker run -idt --name pause gcr.io/google_containers/pause_amd64:3.0

在运行一个busybox容器,加入pause容器的namespace(Network PID IPC)

docker run -idt --name busybox --net=container:pause --pid=container:pause --ipc=container:pause busybox

上面这种加入的方式也是kubernetes启动pod的原理

进入busybox容器查看里面的进程,发现PID=1的进程是/pause

docker exec -it busybox /bin/bash/ #ps aux

PID USER TIME COMMAND1 root 0:00 /pause5 root 0:00sh9 root 0:00 /bin/bash13 root 0:00 ps aux

为什么不用别的容器做init进程,比如Nginx容器,如果由于子进程的父进程意外退出,那么子进程就成了"孤儿进程",Nginx容器没办法回收子进程退出后的资源

pause容器作用_Kubernetes学习之pause容器相关推荐

  1. pause容器作用_kubernetes中的Pause容器如何理解?

    前几篇文章都是讲的Kubernetes集群和相关组件的部署,但是部署只是入门的第一步,得理解其中的一些知识才行.今天给大家分享下Kubernets的pause容器的作用. Pause容器 全称infr ...

  2. Web容器(一):Web容器简介

    本文参照:极客时间-<深入拆解 Tomcat & Jetty>-开篇词 | Java程序员如何快速成长 + 01_Web容器学习路径 Web容器 Web技术的发展史 早期的Web应 ...

  3. sidecar 容器_kubernetes学习sidecar容器模式

    sidecar 容器 Kubernetes is an open-source container orchestration engine for automating deployment, sc ...

  4. 印象大使_kubernetes学习大使容器模式

    印象大使 Kubernetes is an open-source container orchestration engine for automating deployment, scaling, ...

  5. C++学习日记7——容器

    学习视频链接 黑马程序员匠心之作|C++教程从0到1入门编程,学习编程不再难_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1et411b73Z?p=21 ...

  6. 17、《每天5分钟玩转Docker容器技术》学习--Multi-host网络

    ------------------------------------重要说明------------------------------------ 本文内容都是参考Cloudman系列进行学习, ...

  7. 容器学习 之 限制容器资源(十一)

    内存限额 使用方法: -m 或 --memory:设置内存的使用限额,例如 100M, 2G. –memory-swap:设置 内存+swap 的使用限额. docker run -m 200M -- ...

  8. C++ STL学习笔记(2) 容器结构与分类

    接着学习侯捷老师的C++ STL! 在使用容器的时候,需要明白容器中元素之间在内存里的关系是什么样的,是连续的,还是非连续的. 容器可以分为两类: 1. sequence container , 即序 ...

  9. 学习Kubernetes 和容器技术体系的最佳方法

    你好,我是 Kubernetes 社区资深成员与项目维护者张磊,也是极客时间<深入剖析 Kubernetes >的专栏作者.今天我来与你谈一谈,学习 Kubernetes 和容器技术体系的 ...

最新文章

  1. 元宇宙和我有什么关系?
  2. 万能笔记本,你值得拥有;(XML)
  3. 图像分类、检测,语义分割等方法梳理
  4. JAVAWEB技术之七过滤器
  5. 前端学习(1035):bootstrap-js插件1
  6. 设计模式C++实现 ——观察者模式
  7. jupyter notebook如何打开其他文件夹下的iqynb文件
  8. 原python最简单的图形编程_Python(简单图形和文件处理)编程
  9. MYSQL端口自动开启的问题~
  10. linux下目标文件的类型6,Linux下文件类型
  11. 理解之软件需求说明书
  12. 深鸿会深大小组学习笔记:第二周,从零开发鸿蒙小游戏2048app(下)
  13. [问题] trying to connect to remote host
  14. html5在线编辑器效果和源码
  15. win10禁用操作系统的服务器,win10服务哪些可以禁止启动 win10哪些服务可以关闭禁用...
  16. js 类似发微博或者微信朋友圈的时间显示 刚刚 几天前
  17. 376招募线上被试 | 你对“中文句子”的记忆情况如何?
  18. 无FTTR不千兆,华为星光F30让家中不再有“隐秘的角落”
  19. 敬畏崛起,王自如的传奇人生
  20. BeanFacotry 和ApplicationContext联系和区别

热门文章

  1. 主机文件复制到Ubuntu系统中
  2. 【渝粤题库】国家开放大学2021春3979会计学概论题目
  3. html中的保存功能代码怎么写,java保存html代码怎么写
  4. MATLAB库函数polly2trellis(卷积码生成多项式转网格图描述)的实现过程详解
  5. java中static作用_java中static作用详解
  6. 微信小程序开发学习记录01
  7. linux 远程挂载摄像头_如何实现嵌入式Linux下USB摄像头视频采集
  8. android-x86 镜像iso下载_Windows 10(1909)最新12月更新版MSDN官方简体中文原版ISO镜像下载+激huo工ju...
  9. 问题 1072: 汽水瓶
  10. springboot 静态资源访问,和文件上传 ,以及路径问题