Skip to content

Latest commit

 

History

History
58 lines (32 loc) · 3.98 KB

pause容器.md

File metadata and controls

58 lines (32 loc) · 3.98 KB

pause容器

Pause容器

pause容器,又叫Infra容器,是pod的基础容器,镜像体积只有几百KB左右,配置在kubelet中,主要的功能是使一个pod中多个容器的网络通信

Infra容器被创建后会初始化Network Namespace,之后其他容器就可以加入到Infra容器中共享Infra容器的网络了 ,因此如果一个pod中的两个容器A和B,那么关系如下:

1、A容器和B容器能够直接用localhost通信;

2、A容器和B容器可以看到网卡、IP与端口监听信息;

3、Pod只有一个IP地址,也就是该Pod的Network Namespace对应的IP地址(由Infra容器初始化并创建)。

4、K8s环境中的每个Pod有一个独立的IP地址(前提是地址足够用),并且此IP被当前Pod中所有容器在内部共享使用。

5、Pod删除后Infra容器随机被删除。其IP被回收。

在Kubernetes中,Pause容器负责共享某些命名空间,以优化系统资源使用并维护Pod作为其包含的容器的逻辑主机的概念。以下是Kubernetes Pod中的Pause容器共享的命名空间:

NET命名空间:此命名空间负责网络。当共享NET命名空间时,同一Pod内的容器共享网络资源,这意味着它们具有相同的IP地址和端口空间。 IPC命名空间:此外,同一Pod中的容器还共享IPC命名空间,使它们能够使用各种进程间通信(IPC)机制(如System V IPC或POSIX消息队列)进行通信。这种类型的命名空间共享使容器之间的通信更加高效。 UTS命名空间:UTS命名空间用于共享主机名。Pod中的所有容器将共享相同的UTS命名空间,因此它们将共享主机名。 以下命名空间不被Pause容器共享:

MNT命名空间:此命名空间负责定义进程可以看到的文件系统。每个容器都有自己的MNT命名空间。尽管容器共享相同的镜像,但它们不共享MNT命名空间,一个容器中的文件系统中的更改不会出现在其他容器中。 PID命名空间:PID命名空间隔离了进程ID号空间。默认情况下,PID命名空间不共享,这意味着不同容器中的进程无法看到彼此的ID。但是,如果需要,您可以通过在Pod规范中设置shareProcessNamespace: true来更改此设置。 User命名空间:User命名空间也不共享,这意味着每个容器都有一个不同的用户ID。

Volumes(共享存储卷)注意不是MNT namespace:Pod中的各个容器可以访问在Pod级别定义的Volumes。

共享存储卷是 Kubernetes 中一种提供容器之间数据共享的机制。它可以将一个或多个目录挂载到多个容器中,这样这些容器就可以共享同一个数据卷,从而实现数据的共享。共享存储卷并不违反容器之间的隔离原则,因为它们只是共享数据,而不共享文件系统。在容器内部,共享存储卷是以挂载点的形式存在的,每个容器都会把共享存储卷挂载到自己的文件系统中,这样就可以访问共享的数据了。

总结:创建一个pod后。pause容器创建一个网络命名空间,此pod的容器共享这个网络命名空间。

init容器

Init容器的作用: 1、可以为业务容器提前准备好业务容器的运行环境,比如将业务容器需要的配置文件提前生成并放在指定位置、检查数据权限或完整性、软件版本等基础运行环境。。

2、可以在运行业务容器之前准备好需要的业务数据。比如从oss下载,或者从其它位置copy.

3、检查依赖的服务是否能访问

init容器的特点:

1、一个pod可以有多个业务容器还能有多个init容器,但是每个initl容器和业务容器的运行环境都是隔

离的。

2、intl容器比业务容器先启动

3、init容器运行成功后才会继续运行业务容器

4、如果一个pod有多个init容器。则需要从上到下逐个运行并且全部成功,最后才会运行业务容器。

5、init容器不支持探针检测(因为初始化完成后就退出再也不运行了)