虚拟化

虚拟化就是在一台物理机上,运行多台虚拟机,这些虚拟机都相互独立,但又可以共用物理机的CPU、GPU、RAM等硬件设备。

image-20240806214503214

虚拟化技术的实现主要依托于 Hypervisor,Hypervisor 有两种,第一种是直接运行在物理机上(type1),另一种是运行在 OS 上(type2)。

image-20240806214503214

每个虚拟机在 Hypevcisor 上相互之间都是独立的,运行不同 OS,操作不同资源。

Hypervisor 不是一个软件,而是一类软件的统称,例如 VM Ware、Virtual Box、KVM。

容器化

使用虚拟化隔离环境的时候,需要安装独立的 OS 和需要用到的资源,每个虚拟机中可能会用到相同的资源(Python、Java、Node.js),但是这些相同的资源不能被其他虚拟机共用,会造成资源浪费。

image-20240806215613252

有时只是想运行一个简单的程序,创建一个虚拟机,配置运行环境这个过程很麻烦,而且也很浪费资源;在迁移服务的时候需要迁移整个虚拟机,这个过程也是很麻烦的。

有了容器就能解决这些问题。

容器化和虚拟化的目的是一样的,都是用来实现一个被单独隔离的环境,容器化和虚拟化的不同之处就在于每个容器之间他们可以共享资源,每个 container 上可以理解为运行了一个轻量的 Linux OS,在 container 中可以执行一些简单的 Linux 命令(cd、ls 等)。

image-20240806215652527

Docker

Docker 就是创建容器的工具,它是一个开源的项目,基于 Go 语言实现。Docker 是一个轻量级的虚拟化技术,它允许用户创建和部署容器,容器之间共享资源,容器之间可以进行通信,Docker 容器技术可以帮助开发者和系统管理员快速部署应用,并可以与云平台进行集成。

除了用 Docker 创建容器之外,还需要 K8S(Kubernetes) 进行容器集群管理。

K8S 是容器集群管理系统,主要职责是容器编排——启动容器,自动化部署、扩展和管理容器应用,还有回收容器。K8S 是一个开源的项目,由 Google、IBM、Red Hat、微软、Docker 联合发起,并在 Apache 2.0 许可证下发布。K8S 基于容器技术,可以实现自动化部署、扩展和管理容器应用,并提供服务发现和负载均衡功能。K8S 还可以实现应用的自动伸缩、滚动升级、故障恢复等。K8S 架构图如下图所示:

图片来源:https://kubernetes.io/zh-cn/docs/concepts/architecture/