kubernetes中的基本概念(四) linux命名空间

分类: AUTOMATION 发布于:

Linux内如何进行资源隔离?

pods

pod 是一组共享存储和网络的容器。

pod内的容器共享IP地址和端口空间。可以通过localhost互相发现。

共享的底层原因是pod内的容器处在同一个namespace内。

命名空间隔离(namespace isolation)

groups内的进程有独立的进程PID空间、user、挂载点、网络等。

  • 独立的进程PID空间

命名空间内的pid(进程ID)是相互独立的(可重复的)

  • 网络资源空间隔离

网络空间有独立的虚拟网络栈(二层以上),空间内包含一个loopback接口。

独立的路由表,socket监听,防火墙,连接跟踪表,私有ip地址集以及其他网络资源。

  • UTS

  • 独立的mount空间

不同命名空间内的挂载点(mount points)是相互隔离的。通过配置,不同空间内的挂载点可以共享。

  • IPC 空间隔离

信号量通信地址空间在namespace内是相互隔离的。

  • 用户空间隔离

用户空间之间的用户uid是相互隔离的。

UTS空间介绍

groups内的进程可以设置独立的hostname, 通过uname输出可以查看hostname的full格式。

linux namespaces
    1. resource limiting

内存使用量控制(memory limit)。

    1. 优先级

设置一些进程获取更多的cpu利用率。

    1. 度量

记录资源(cpu,内存,volume,网络吞吐量)的使用量, 长用在按使用量计费。

  • 控制

冻结组内资源或者进程,重启。

和ns有关的命令

lsns

进程有两种方式添加到特定的命名空间内

  • 1.通过clone系列的系统调用函数(clone调用可以创建新的ns)

  • 2.通过setns系统调用(这个系统调用添加进程到已经存在的ns)

nsenter -t 29221 –mount –uts –ipc –net –pid sh

pod是一个namespace抽象的实例

POD内的容器被抽象共同处在”逻辑上“的”主机“上。它们共享”网络“和”IPC” 空间。

可通过设置v1.PodSpec.shareProcessNamespace: true 共享进程空间(pid)。