kubernetes中的基本概念(四) linux命名空间
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是相互隔离的。
groups内的进程可以设置独立的hostname, 通过uname
输出可以查看hostname的full格式。
linux namespaces
-
- resource limiting
内存使用量控制(memory limit)。
-
- 优先级
设置一些进程获取更多的cpu利用率。
-
- 度量
记录资源(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)。