Kubernetes 容器入门基础开篇

  1. 什么是容器
  • 本质就是一种特殊的进程,用户的应用进程实际上就是容器里 PID=1 的进程
  • 技术的核心功能,就是通过约束和修改进程的动态表现,从而为其创造出一个“边界”。
  • 对于 Docker 等大多数 Linux 容器来说,Cgroups 技术是用来制造约束的主要手段,而Namespace 技术则是用来修改进程视图的主要方法
  • Linux 操作系统提供了 PID,Mount、UTS、IPC、Network 和 User 这些 Namespace,用来对各种不同的进程上下文进行“障眼法”操作。
  • Cgroups 对资源的限制能力也有很多不完善的地方,最多的自然是 /proc 文件系统的问题。
  • 容器的核心是隔离和限制,Namespace 的作用是“隔离”, Cgroups 的作用是“限制”。
  1. 什么是Linux Cgroups
  • 全称是 Linux Control Group。它最主要的作用,就是限制一个进程组能够使用的资源上限,包括 CPU、内存、磁盘、网络带宽等等
  • Cgroups 能够对进程进行优先级设置、审计,以及将进程挂起和恢复等操作
  • Cgroups 的每一项子系统都有其独有的资源限制能力

    • blkio,为块设备设定I/O 限制,一般用于磁盘等设备;
    • cpuset,为进程分配单独的 CPU 核和对应的内存节点;
    • memory,为进程设定内存使用的限制
  1. docker创建过程
  • 启用 Linux Namespace 配置
  • 设置指定的 Cgroups 参数;
  • 切换进程的根目录(Change Root)
  1. docker的重要特性:一致性
  • rootfs(根文件系统):挂载在容器根目录上、用来为容器进程提供隔离后执行环境的文件系统
  • rootfs 只是一个操作系统所包含的文件、配置和目录,并不包括操作系统内核。在 Linux 操作系统中,这两部分是分开存放的,操作系统只有在开机启动时才会加载指定版本的内核镜像。
  • 由于 rootfs 里打包的不只是应用,而是整个操作系统的文件和目录,也就意味着,应用以及它运行所需要的所有依赖,都被封装在了一起。
  1. 容器镜像中“层”的概念
  • 使用多个增量 rootfs 联合挂载一个完整 rootfs 的方案
  1. docker exec 是怎么做到进入容器里的?
  • 通过 setns() 函数可以将当前进程加入到已有的 namespace 中
  1. Volume机制
  • 允许你将宿主机上指定的目录或者文件,挂载到容器里面进行读取和修改操作,解决文件的挂载机制,同时保证了容器的隔离性不会被 Volume 打破。
  1. Kubernetes的核心设计思想?
  • Pod

    • Kubernetes 项目的原子调度单位,类似于传统环境中的虚拟机角色

      1. 凡是调度、网络、存储,以及安全相关的属性,基本上是 Pod 级别的
      2. NodeSelector:是一个供用户将 Pod 与 Node 进行绑定的字段
      3. HostAliases:定义了 Pod 的 hosts 文件(比如 /etc/hosts)里的内容
      4. 凡是跟容器的 Linux Namespace 相关的属性,也一定是 Pod 级别的
    • Pod各种字段用法

      1. Downward API
      2. Service Account
      3. restartPolicy
      4. PodPreset

你可能感兴趣的:(kubernetes,容器,容器技术)