《深度剖析K8s》学习笔记
数据和状态的综合约束和修改进程的动态表现,创造出边界(Cgroup:约束/namespace:进程视图)
·
一、容器技术
1.从进程说起
a. 概述
进程:数据和状态的综合
容器技术的核心:约束和修改进程的动态表现,创造出边界(Cgroup:约束/namespace:进程视图)
启动容器例子:
docker run -it busybox /bin/sh
// -it 在启动容器后,需要给我们分配一个文本输入 / 输出环境,也就是 TTY,跟容器的标准输入相关联,这样我们就可以和这个 Docker 容器进行交互了。
// /bin/sh 就是我们要在 Docker 容器里运行的程序。
2.隔离与限制
a. 容器隔离机制
例子:
//在运行容器之后,使用ps指令,发现/bin/sh是1号进程
/ # ps
PID USER TIME COMMAND
1 root 0:00 /bin/sh
10 root 0:00 ps
分析:/bin/sh和ps启动的进程被docker隔离在了一个和宿主机不同的环境中
实现机制:linux的namespace机制,容器是一种特殊的进程
//用 clone() 系统调用创建一个新进程时,就可以在参数中指定 CLONE_NEWPID 参数
int pid = clone(main_function, stack_size, CLONE_NEWPID | SIGCHLD, NULL);
优点:敏捷/高性能,不需要单独的Guest OS,占用的资源少
缺点:
- 隔离不彻底,尽管可以通过mount namesapce挂载不同版本的操作系统文件系统,但多个容器之间还是共用同一个宿主机的操作系统内核
- 在 Linux 内核中,有很多资源和对象是不能被 Namespace 化,例如时间
b. 容器的限制机制
机制:Linux Cgroups
3.深入理解容器镜像
4.重新认识docker
5.谈谈k8s的本质
更多推荐
已为社区贡献4条内容
所有评论(0)