共计 1239 个字符,预计需要花费 4 分钟才能阅读完成。
- 什么是容器
- 本质就是一种特殊的进程,用户的应用进程实际上就是容器里 PID=1 的进程
- 技术的核心功能,就是通过约束和修改进程的动态表现,从而为其创造出一个“边界”。
- 对于 Docker 等大多数 Linux 容器来说,Cgroups 技术是用来制造约束的主要手段,而 Namespace 技术则是用来修改进程视图的主要方法
- Linux 操作系统提供了 PID,Mount、UTS、IPC、Network 和 User 这些 Namespace,用来对各种不同的进程上下文进行“障眼法”操作。
- Cgroups 对资源的限制能力也有很多不完善的地方,最多的自然是 /proc 文件系统的问题。
- 容器的核心是隔离和限制,Namespace 的作用是“隔离”,Cgroups 的作用是“限制”。
- 什么是 Linux Cgroups
- 全称是 Linux Control Group。它最主要的作用,就是限制一个进程组能够使用的资源上限,包括 CPU、内存、磁盘、网络带宽等等
- Cgroups 能够对进程进行优先级设置、审计,以及将进程挂起和恢复等操作
Cgroups 的每一项子系统都有其独有的资源限制能力
- blkio,为块设备设定 I /O 限制,一般用于磁盘等设备;
- cpuset,为进程分配单独的 CPU 核和对应的内存节点;
- memory,为进程设定内存使用的限制
- docker 创建过程
- 启用 Linux Namespace 配置
- 设置指定的 Cgroups 参数;
- 切换进程的根目录(Change Root)
- docker 的重要特性:一致性
- rootfs(根文件系统):挂载在容器根目录上、用来为容器进程提供隔离后执行环境的文件系统
- rootfs 只是一个操作系统所包含的文件、配置和目录,并不包括操作系统内核。在 Linux 操作系统中,这两部分是分开存放的,操作系统只有在开机启动时才会加载指定版本的内核镜像。
- 由于 rootfs 里打包的不只是应用,而是整个操作系统的文件和目录,也就意味着,应用以及它运行所需要的所有依赖,都被封装在了一起。
- 容器镜像中“层”的概念
- 使用多个增量 rootfs 联合挂载一个完整 rootfs 的方案
- docker exec 是怎么做到进入容器里的?
- 通过 setns() 函数可以将当前进程加入到已有的 namespace 中
- Volume 机制
- 允许你将宿主机上指定的目录或者文件,挂载到容器里面进行读取和修改操作,解决文件的挂载机制,同时保证了容器的隔离性不会被 Volume 打破。
- Kubernetes 的核心设计思想?
Pod
Kubernetes 项目的原子调度单位,类似于传统环境中的虚拟机角色
- 凡是调度、网络、存储,以及安全相关的属性,基本上是 Pod 级别的
- NodeSelector:是一个供用户将 Pod 与 Node 进行绑定的字段
- HostAliases:定义了 Pod 的 hosts 文件(比如 /etc/hosts)里的内容
- 凡是跟容器的 Linux Namespace 相关的属性,也一定是 Pod 级别的
Pod 各种字段用法
- Downward API
- Service Account
- restartPolicy
- PodPreset
正文完
发表至: kubernetes
2020-05-31