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

Pause容器 全称infrastucture container(又叫infra)基础容器。

我们在kubelet的配置文件中心都指定了如下参数,这是指定拉取的pause镜像地址。

# more /etc/kubernetes/kubelet······--pod-infra-container-image=hub.test.tech/library/pod-infrastructure:latest"······

pause使用c语言编写,官方使用的镜像为gcr.io/google_containers/pause-amd64:3.0,代码见Github。

Pause的作用

我们看下在node节点上都会起很多pause容器,和pod是一一对应的。

每个Pod里运行着一个特殊的被称之为Pause的容器,其他容器则为业务容器,这些业务容器共享Pause容器的网络栈和Volume挂载卷,因此他们之间通信和数据交换更为高效,在设计时我们可以充分利用这一特性将一组密切相关的服务进程放入同一个Pod中。同一个Pod里的容器之间仅需通过localhost就能互相通信。

# docker ps······CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESa007c18b8dc2 568c4670fa80 "nginx -g 'daemon of…" 1 hours ago Up 1 hours k8s_nginx_nginx-pod-7d9f9876cc-75sf7_default_a688bb46-f872-11e8-ae6b-000c29c6d12b_19866c08d1fv1 568c4670fa80 "nginx -g 'daemon of…" 1 hours ago Up 1 hours k8s_nginx_nginx-pod-7d9f9876cc-wpv4h_default_a6a899c0-f872-11e8-ae6b-000c29c6d12b_1aafef6727026 hub.test.tech/library/pod-infrastructure:latest "/pause" 1 hours ago Up 1 hours k8s_POD_flask-app-6f5b6cc447-kbxks_flask-app-extions-stage_374b8aa0-f873-11e8-ae6b-000c29c6d12b_1c4f48f90b27f hub.test.tech/library/pod-infrastructure:latest "/pause" 1 hours ago Up 1 hours k8s_POD_flask-app-6f5b6cc447-f9wjn_flask-app-extions-stage_373be9db-f873-11e8-ae6b-000c29c6d12b_1······

kubernetes中的pause容器主要为每个业务容器提供以下功能:

PID命名空间:Pod中的不同应用程序可以看到其他应用程序的进程ID。

网络命名空间:Pod中的多个容器能够访问同一个IP和端口范围。

IPC命名空间:Pod中的多个容器能够使用SystemV IPC或POSIX消息队列进行通信。

UTS命名空间:Pod中的多个容器共享一个主机名;Volumes(共享存储卷):

Pod中的各个容器可以访问在Pod级别定义的Volumes。

例子演示

下面通过一个经典的例子演示

在The Almighty Pause Container(https://www.ianlewis.org/en/almighty-pause-container)这篇文章中做出了详细的说明,pause容器的作用可以从这个例子中看出,首先见下图:

我们首先在节点上运行一个pause容器。

$ docker run -d --name pause -p 8880:80 registry.cn-hangzhou.aliyuncs.com/google_containers/pause-amd64:3.1

然后再运行一个nginx容器,nginx将为localhost:2368创建一个代理。

$ cat <> nginx.confferror_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$ 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

现在访问http://localhost:8880/就可以看到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容器中查看进程情况。

# ps auxUSER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMANDroot 1 0.0 0.0 1024 4 ? Ss 13:49 0:00 /pauseroot 5 0.0 0.1 32432 5736 ? Ss 13:51 0:00 nginx: master psystemd+ 9 0.0 0.0 32980 3304 ? S 13:51 0:00 nginx: worker pnode 10 0.3 2.0 1254200 83788 ? Ssl 13:53 0:03 node current/inroot 79 0.1 0.0 4336 812 pts/0 Ss 14:09 0:00 shroot 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的进程即为容器本身的业务进程。

往期文章一览

如果您觉得不错,请别忘了转发、分享、点赞让更多的人去学习, 您的举手之劳,就是对小编最好的支持,非常感谢!

pause容器作用_kubernetes中的Pause容器如何理解?相关推荐

  1. pause容器作用_Kubernetes学习之pause容器

    根据代码看到,pause容器运行着一个非常简单的进程,它不执行任何功能,一启动就永远把自己阻塞住了, 它的作用就是扮演PID1的角色,并在子进程称为"孤儿进程"的时候,通过调用wa ...

  2. ssis for循环容器_SSIS包中的序列容器

    ssis for循环容器 This article explores the Sequence container in SSIS package with examples. 本文通过示例探索了SS ...

  3. c语言中pause的作用,c++中的system(pause)的作用和含义解析

    简单来说就是暂停的意思,一般在LINUX编程时会用到,等待接收信号,才会重新运行 . 在进行C/C++编程的时候,在运行程序查看输出效果时,会出现窗口闪一下就关闭的情况. 在C语言中一般通过添加get ...

  4. Linux安装Docker容器环境centos中安装docker-compose容器编排dockerfile文件构建镜像(史上最详细的docker)

    在Linux系统下安装docker容器环境 1.容器介绍 1.1 镜像(Image) 镜像可以用来创建Docker 容器,Docker 提供了一个很简单的机制来创建镜像或者更新现有的镜像, 用户甚至可 ...

  5. mysql null的作用_MySQL中对于NULL值的理解和使用教程

    NULL值的概念是造成SQL的新手的混淆的普遍原因,他们经常认为NULL是和一个空字符串''的一样的东西.不是这样的!例如,下列语句是完全不同的: ?12mysql>INSERT INTO my ...

  6. java中generics的作用,java中泛型(Generics)的一些理解

    public class Point { // //    public Point(T x) { //        this.x = x; //    } private T x; private ...

  7. python mainloop作用_Tkinter中的mainloop应该如何理解?

    很简单.你把鼠标一个按上会变成手型.或者你在知乎回答问题的文本框里输入文字.甚至你看到的电脑屏幕内容.看上去是动态的.其实和动画电影原理差不多. 现在你鼠标的移动,键盘的按键.都是实实在在输入.这里我 ...

  8. pause容器作用_容器编排之战(四)连载

    Master Master主要负责资源调度,控制副本,和提供统一访问集群的入口.--核心节点也是管理节点 Node Node是Kubernetes集群架构中运行Pod的服务节点(亦叫agent或min ...

  9. c++中的system(pause)的作用

    作用: system就是调用从程序中调用系统命令(和shell命令). system("pause")就是从程序里调用"pause"命令: 而"pau ...

最新文章

  1. linux安装ActiveMQ
  2. VirtualBox的四种网络连接方式
  3. vue-router源码学习笔记
  4. mysql 统计做饼状图_PHP+mysql+Highcharts实现饼状统计图
  5. 从 Android 静音看正确的查找 bug 的姿势
  6. 如何把复杂单体应用快速迁移到微服务
  7. Java高级架构之FastDFS分布式文件集群
  8. Eclipse SQLExplorer插件的安装和使用
  9. 大量执行OSS PutObject时卡住的问题排查
  10. javascript 原生得到document.Element的方法
  11. Elasticsearch SkyWalking 分布式链路追踪
  12. java的主函数在哪_打开一个别人的文件,一堆.java, 怎么知道main函数在哪里?
  13. 天池学习赛:工业蒸汽量预测4——模型验证
  14. 程序员面试金典——18.9实时中位数
  15. yum mysql 无法启动失败_Linux下MySQL数据库yum升级后无法启动解决办法
  16. Python笔记:第三方IP代理服务与爬虫IP代理
  17. c语言函数实现数组输入输出
  18. LFY-SpringBoot1【课程概述、springboot2概述】
  19. 用Python+Qt+Java整一个百宝箱
  20. 【matplotlib教程】绘图样式,文本线型、轴刻度

热门文章

  1. LaTeX如何输出反斜杠 \
  2. 大拇指全程报导苹果发布会2014.9.9
  3. 使用华为云云耀服务器安装宝塔面板
  4. HTML5 table表格合并单元格和合并边框
  5. 怎么调用微信自带的收货地址和我的地址功能页面。
  6. iOS 相机拍照与图库
  7. 【小米商城-1 注册功能】
  8. 运维自动化之salt
  9. 【怎样制作ppt】Focusky教程 | 调节音乐的音量(插入的音乐、背景音乐、录音的音量)
  10. 执行Transact-SQL语句或批处理时发生异常