searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

轻装上阵的容器计算虚拟化

2023-05-29 07:10:13
35
0

一、容器进程隔离

1)命名空间是什么

命名空间(namespace)是一种由内核提供的进程隔离技术,用以隔离同一个操作系统上不同进程组的干扰与影响。

容器技术实现中以namespace实现了对容器进程组隔离,涉及主要namespace如下:

命名空间 类型 备注
mnt 挂载点 不同容器之间根文件系统和磁盘卷不同
pid 进程号 不同容器之间同进程号不同进程
ipc 进程间通信

不同容器之间同ipc号标识不同ipc对象

user 用户 不同容器之间同uid/gid不同用户/用户组
net 网络 不同容器之间网络协议栈不同
uts 系统标识 不同容器之间可以有不同的hostname、domainname

 

2)命名空间在容器组中实践

在kubernetes中,容器组(pod)代表了一个紧密协作的业务进程集,亦是namespace技术典型落地实践之一。

上图为容器组中业务进程与各namespace技术应用示意。意味着通常情况下:

a)相同容器组不同容器共享了相同的net、uts以及ipc命名空间

b)相同容器组不同容器独占了不同的pid、mnt命名空间

  思考:不同的网络命名空间里,你能看到什么差异性的东西?

 

二、容器资源配额

1)cgroup是什么

Cgroups 是Linux 内核提供的物理资源隔离机制,通过这种机制,可以实现对Linux 进程或者进程组的资源限制、隔离和统计功能。

当前容器技术落地中以cgroup技术实现对容器资源的配额使用。

资源 类型 备注
CPU 相对配额 cpu.share
绝对配额(核心共享) cpu_cfs_quota_ns/cpu_cfs_period_ns
绝对配额(核心独占) cpuset
内存 绝对配额(内存) memory.limit_in_bytes
绝对配额(缓存) memory.memsw.limit_in_bytes
块IO blkio.weight
blkio.weight_device
blkio.throttle.read_iops_device
blkio.throttle.write_iops_device

2)cgroup在容器组技术实践中的应用

如大家熟知的,kubernetes中为pod提供了request与limit的资源配置。pod的request与limit配置向上影响了pod在kubernetes中的Qos级别,

向下沉淀为宿主机操作系统上的cgroup配置,内核层面按配额制约着容器对宿主机资源的使用。

  思考:kubernetes pod里容器cpu的request&limit是如何生效的?

三、容器应用封装

 

2)上层视图文件覆盖下层同名文件,如file2

3)删除顶层视图文件并不会真正删除下层原文件,只在可读写层做删除标记,如file3

4)写文件时候,下层文件会被复制到上层可读写层,然后再写入,这就是copy-on-write机制,如file4

 

四、破茧化蝶

如前文所述,容器是一组被隔离的业务相关进程,受限使用公共资源。换句话说,一组业务相关进程以namespace进行隔离,以cgroup进行资源配额,最后通过chroot或类似方式切入到专属rootfs中,这组进程就破茧化蝶成了容器。

 

 思考:论pivot_root、chroot以及switch_root的根文件系统切换的几种方法?

 

0条评论
0 / 1000
lorland
10文章数
0粉丝数
lorland
10 文章 | 0 粉丝
原创

轻装上阵的容器计算虚拟化

2023-05-29 07:10:13
35
0

一、容器进程隔离

1)命名空间是什么

命名空间(namespace)是一种由内核提供的进程隔离技术,用以隔离同一个操作系统上不同进程组的干扰与影响。

容器技术实现中以namespace实现了对容器进程组隔离,涉及主要namespace如下:

命名空间 类型 备注
mnt 挂载点 不同容器之间根文件系统和磁盘卷不同
pid 进程号 不同容器之间同进程号不同进程
ipc 进程间通信

不同容器之间同ipc号标识不同ipc对象

user 用户 不同容器之间同uid/gid不同用户/用户组
net 网络 不同容器之间网络协议栈不同
uts 系统标识 不同容器之间可以有不同的hostname、domainname

 

2)命名空间在容器组中实践

在kubernetes中,容器组(pod)代表了一个紧密协作的业务进程集,亦是namespace技术典型落地实践之一。

上图为容器组中业务进程与各namespace技术应用示意。意味着通常情况下:

a)相同容器组不同容器共享了相同的net、uts以及ipc命名空间

b)相同容器组不同容器独占了不同的pid、mnt命名空间

  思考:不同的网络命名空间里,你能看到什么差异性的东西?

 

二、容器资源配额

1)cgroup是什么

Cgroups 是Linux 内核提供的物理资源隔离机制,通过这种机制,可以实现对Linux 进程或者进程组的资源限制、隔离和统计功能。

当前容器技术落地中以cgroup技术实现对容器资源的配额使用。

资源 类型 备注
CPU 相对配额 cpu.share
绝对配额(核心共享) cpu_cfs_quota_ns/cpu_cfs_period_ns
绝对配额(核心独占) cpuset
内存 绝对配额(内存) memory.limit_in_bytes
绝对配额(缓存) memory.memsw.limit_in_bytes
块IO blkio.weight
blkio.weight_device
blkio.throttle.read_iops_device
blkio.throttle.write_iops_device

2)cgroup在容器组技术实践中的应用

如大家熟知的,kubernetes中为pod提供了request与limit的资源配置。pod的request与limit配置向上影响了pod在kubernetes中的Qos级别,

向下沉淀为宿主机操作系统上的cgroup配置,内核层面按配额制约着容器对宿主机资源的使用。

  思考:kubernetes pod里容器cpu的request&limit是如何生效的?

三、容器应用封装

 

2)上层视图文件覆盖下层同名文件,如file2

3)删除顶层视图文件并不会真正删除下层原文件,只在可读写层做删除标记,如file3

4)写文件时候,下层文件会被复制到上层可读写层,然后再写入,这就是copy-on-write机制,如file4

 

四、破茧化蝶

如前文所述,容器是一组被隔离的业务相关进程,受限使用公共资源。换句话说,一组业务相关进程以namespace进行隔离,以cgroup进行资源配额,最后通过chroot或类似方式切入到专属rootfs中,这组进程就破茧化蝶成了容器。

 

 思考:论pivot_root、chroot以及switch_root的根文件系统切换的几种方法?

 

文章来自个人专栏
kubernetes
10 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0