{T}

虚拟化与容器

本文整理虚拟化技术的两类代表:虚拟机(VMware)与容器(Docker),并介绍容器编排(Kubernetes、Docker Swarm)的核心概念。

一、虚拟化的本质

虚拟化即构造真实的虚拟版本:用软件模拟计算机得到虚拟机;用数字模拟价值得到货币;用空间模拟存储得到虚拟磁盘。云的本质是基础架构提供商按虚拟化单位(如 0.25 核、512M 内存)售卖资源。

  • VMware:为应用提供虚拟计算机(虚拟机,需安装 Guest OS)。
  • Docker:为应用提供虚拟执行空间(容器),容器内的应用以进程身份直接运行。

二、虚拟机设计

虚拟机需满足三条件:隔离(实例互不影响)、仿真(用起来像真机,进程可无缝迁移)、高效(指令执行额外开销约 10~15%)。

Type-1 虚拟机

Hypervisor(Virtual Machine Monitor,VMM)直接作为操作系统管理硬件,其上创建多个含不同 Guest OS 的虚拟机。

![Type-1](/os-images/38-虚拟化技术介绍:VMware 和 Docker 的区别__CgqCHmARNXqAXohgAACmFoEZ15k793.png)

  • 二进制翻译:Hypervisor 逐条翻译 Guest 指令,开销大。
  • 世界切换(World Switch):Guest OS 接管中断、成为机器实际控制者,指令本地执行,成本低于二进制翻译。依赖 CPU 虚拟化扩展(Intel VT-X、AMD-V/SMV)让 TLB/DMA 等区分虚拟机与实体机。

Type-2 虚拟机

虚拟机本身作为进程运行在宿主 OS 上,部分 Hypervisor 以内核驱动执行,Guest OS 执行时经 Hypervisor 世界切换。本质与 Type-1 相近。

![Type-2](/os-images/38-虚拟化技术介绍:VMware 和 Docker 的区别__Ciqc1GARNYSAKM46AADCxGGyD4s927.png)

Hyper-V

混合架构:Parent Partition 与 Windows 核心均作为虚拟化节点,共享 VMBus 经 Hypervisor 虚拟化;用户开机即在虚拟机中,其他虚拟机可复用该架构。

三、容器(Container)

容器虚拟的是执行环境,直接由操作系统管理,无需 Hypervisor。容器内的应用即进程,依赖操作系统能力实现隔离:

  • Cgroups:限制某组进程的 CPU/内存等资源使用;
  • Namespace:限定每个容器可见的目录与文件。

容器无 Guest OS 开销,启动可达 ms 级,性能更接近本地执行。容器通常以镜像形式下载并启动。

![容器](/os-images/38-虚拟化技术介绍:VMware 和 Docker 的区别__Ciqc1GARNZOAM0V8AAExEgSEXPg097.png)

安全上,虚拟机隔离性更强;生产环境常将 Docker 部署在虚拟机之上兼顾安全与效率。

四、容器编排

当微服务数量达数万、需分布到数万台物理机时,需容器编排技术实现自动化部署、扩容、迁移、负载均衡。核心诉求:减少 downtime、支持扩容。

![微服务-容器-虚拟机关系](/os-images/39-容器编排技术:如何利用 K8 和 Docker Swarm 管理微服务__Ciqc1GAT7LeAJznRAAKOxTSise8097.png)

Kubernetes(K8s)

Google 开源方案,以集群管理容器。

  • 节点:Master(管理集群状态,至少 2 个)与 Worker(工作节点,上运行 kubelet 与各容器)。扩容优先增加容器数或单容器资源,集群资源不足才加节点。
  • Pod:K8s 对容器的轻量封装,有独立随机 IP,内含 1 个或多个容器(当前主要为 Docker)。kubelet 管理 Pod,Pod 管理容器。为可用性,同类微服务常分散到不同节点。
  • Service:拥有静态 IP 的虚拟组件,接收请求并负载均衡到 Pod;Pod 增删时 Service 自动感知,降低分布式复杂度。对外暴露再叠加 Ingress 层做安全与性能控制。

![K8s 节点](/os-images/39-容器编排技术:如何利用 K8 和 Docker Swarm 管理微服务__CgqCHmAT7M-Af_RTAAKzmD-Lpm0018.png)

Docker Swarm

Docker 生态的编排引擎,节点分 Manager 与 Worker:

  • Manager 间状态经 Raft 算法保证一致;
  • 对容器封装为 Task,多个 Task 经 Service 负载均衡。

![Docker Swarm](/os-images/39-容器编排技术:如何利用 K8 和 Docker Swarm 管理微服务__CgqCHmAT7QaAcwO7AAJWW_dhVAU264.png)

设计要点

  • 容器应尽量无状态:MySQL 等数据库因读写分离、Binlog 同步,多实例不可简单负载均衡,K8s 虽有状态组件但不如虚拟机划算;开发测试环境用容器管数据库则很合适(一人一环境、环境统一)。
  • 通用流程(两种引擎共性):制作镜像(Dockerfile)→ 上传托管平台 → 搭建集群 → 添加 Pod/Task → 设置 Service 对外访问。

小结

  • 虚拟机(Type-1/2、Hyper-V)以 Hypervisor 仿真完整计算机;容器以 Cgroups/Namespace 直接隔离进程,更轻更快。
  • K8s(Pod/Service/Ingress)与 Docker Swarm(Task/Service/Raft)都以"容器+服务+负载均衡"管理微服务,核心流程一致,宜对比学习。