单一Pod上的容器是怎么共享网络命名空间的?

容器和虚拟机比较

docker有个后台进程使用containerd,它是专门用来管理容器以及容器镜像的一个应用,当然这个容器镜像要符合OCI(开放容器标准),它会通过runc进行一个解包的处理,runc是专门用来运行容器中应用的。

容器技术的核心功能

命名空间(Namespace)

Linux命名空间提供了一种内核级别隔离系统资源的方法,通过将系统的全局资源放在不同的Namespace中来实现资源隔离的目的。

控制组(CGroup)

Linux控制组是一个内核功能,用于限制,记录和隔离一个或多个进程,对CPU、内存、磁盘I/O、以及网络的使用量及访问。

其实进程和进程之间是运行在同一个操作系统之上的,所谓的隔离是逻辑上的隔离,通过这两种技术可以起到限制进程使用资源的目的。

启动了一个apache pod。

这是当前k8s集群里使用到的容器,其中很多是系统容器不需要管。

容器列表里面有很多pause这样的容器镜像所启动的容器,所启动的apache容器和某一个pause容器共享一个网络命名空间。

查看某个容器的描述,

这是进程的相关配置,其中entrypoint.sh是apache的启动脚本,

这个是命名空间配置,隔离apchae所使用的命名空间,pid是apache进程本身在整个进程树上是根进程,network是apache进程通信的网络隔离。

网络命名空间依赖446476这个进程,

可以看到apache本身的进程是446531,很明显apache的网络是由446476这个进程所影响的,那这个进程是什么?

看下这个进程的状态,

发现这个进程目前处理sleeping状态,本身不干活,那么它存在的意义是什么?

集群节点上运行着linux操作系统,在上面运行所有的容器在逻辑上是隔离的,是因使用了命名空间和控制组这样的技术。

当前机器本身就是k8s集群的一个node节点,

直接通过ps命令可以看到apache和pause这样的进程,因为它是运行在本机操作系统上的进程,但是pause进程在启动的时候,会创建各种各样的命名空间,从而把pause这个进程隔离起来,从而把它视为运行在一个独立的操作系统上的一个进程,然后它进入了一个休眠的状态,它的任务已经完成了。

后面启动的apache进程在某些命名空间上会attach到这个pause命名空间,2个命名空间关联起来,apache也可以把自己看作一个独立在操作系统中的一个进程。

pause创建了命名空间,apache的进程关联到这个命名空间中。

k8s的pause首先会启动pause这个进程去创建一个命名空间,然后在k8s的pause里面,无论有多少个container,都会共享同一个命名空间,比如共享一个网络命名空间,它有独立的端口范围、主机名,路由。

从pod的角度来看它就是一个pod在运行,其实这个pod里面的所有的容器通过共享命名空间来实现一个独立的封装,也就是说封装在pod里面的这些进程它们彼此之间都是可以共享同一个命名空间。

首先模拟一下启动pause这样一个进程从而创建各种各样的命名空间,

做了一个docker镜像用来模拟pause容器,

把容器里面的8080端口暴露在主机的80端口上,运行容器了之后,直接删除镜像,

这个容器本身有它独立的命名空间,后面就需要一个应用的容器关联到这个pod上,这里用了一个python的容器 ,python比较容易启动web服务,

新启动的python的容器,本身会attach到pause容器上,本身和pause容器共享同一个网络命名空间,

python容器把80应用跑起来了,进入python里面,发现机器名和pause共享同一个机器名,因为在run python的时候并没有指定host name,而是运行pause的时候指定的,

在python容器中启动一个web服务,

当把web server跑在apache容器上,它实际上和pause容器共享了同一个网络命名空间,

再启动一个python容器,

依然使用8080端口,会有端口冲突。

在一个容器里面生成新文件,在另外一个容器里面是没有这个文件的,说明文件系统是独立的,但是网络空间却是共享的。

总结

展开阅读全文

页面更新:2024-02-12

标签:容器   控制组   空间   网络   集群   端口   进程   操作系统   独立   资源

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top