Linux虚拟化和容器化

Posted by Run-dream Blog on June 11, 2021

虚拟化

目的

解决资源大小不灵活,资源申请不灵活,资源复用不灵活的问题

方式

  • 完全虚拟化

    虚拟化软件会模拟假的 CPU、内存、网络、硬盘,导致的问题是慢

  • 硬件辅助虚拟化

    CPU 新增虚拟机状态的标志位,直接在在 CPU 上执行大部分的指令,不需要虚拟化软件在中间转述,除非遇到特别敏感的指令,才需要将标志位设为物理机内核态运行,这样大大提高了效率

  • 半虚拟化

    用户态 采用完全虚拟化的方式 如 qemu模拟器

    KVM 内核模块通过 /dev/kvm 暴露接口,用户态程序可以通过 ioctl 来访问这个接口

容器化

无论是容器,还是虚拟机,都依赖于内核中的技术,虚拟机依赖的是 KVM,容器依赖的是 namespace 和 cgroup 对进程进行隔离。

容器VS虚拟机

namespace

namespace

类型:

  • UTS hostname
  • User 用户和组
  • Mount 文件系统挂载点
  • Pid 进程
  • Network 网络协议栈
  • IPC

cgroup

cgroup

操作系统和k8s

k8s