虚拟化技术:虚拟机、Docker、K8s

虚拟机

什么是虚拟机

虚拟机(Virtual Machine)指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。在实体计算机中能够完成的工作在虚拟机中都能够实现。在计算机中创建虚拟机时,需要将实体机的部分硬盘内存容量作为虚拟机的硬盘和内存容量。每个虚拟机都有独立的CMOS、硬盘和操作系统,可以像使用实体机一样对虚拟机进行操作。

简而言之,就是虚拟出一台计算机。

设计虚拟机的目的是方便程序开发与测试人员测试特定的软件。例如:

  • 有些软件需要特定的操作系统
  • 有些软件需要多台计算机环境

双系统与虚拟机

在容器化技术出现之前,一台 Windows 电脑想要使用 Linux 有两种方法:

方法 优点 缺点
双系统 每个系统都可以使用全部硬件资源 1、安装 Linux 系统还需要解决驱动等各种问题,对新手不友好
2、切换系统需要重启电脑,使用不方便
虚拟机 1、像 Windows 中的软件一样使用虚拟机,对新手友好使用方便
2、环境独立,当不需要或者搞崩了的时候可以直接删除虚拟机镜像文件;
3、虚拟机镜像文件可以拷贝到其他机器上打开即可运行 Linux,便携性好
1、虚拟机启动慢
2、虚拟机占用硬件资源(CPU、内存等),硬件配置低可能会卡顿

毕竟是虚拟出来的一套 Linux 计算机,要占用一定得硬件资源,而且最常用的 VMware(专业得重量级虚拟机软件) 还是收费的。当然也有免费的轻量级虚拟机软件 VirtualBox。

如果是 Windows10 及以上版本,更推荐安装微软官方出品的 WSL(Windows Subsystem for Linux,Windows下的 Linux 子系统),体验更好。

虚拟机技术

虚拟机技术是虚拟化技术的一种,所谓虚拟化技术就是将事物从一种形式转变成另一种形式,最常用的虚拟化技术有操作系统中内存的虚拟化,实际运行时用户需要的内存空间可能远远大于物理机器的内存大小,利用内存的虚拟化技术,用户可以将一部分硬盘虚拟化为内存,而这对用户是透明的。又如,可以利用虚拟专用网技术(VPN)在公共网络中虚拟化一条安全,稳定的“隧道”,用户感觉像是使用私有网络一样。

我说给你分配的是内存,它就是内存(实际上可能事硬盘),指鹿(硬盘)为马(内存)。

Docker

什么是 Docker

dock码头船坞的意思,MacOS 的扩展坞(如下图所示)就是 dock。
扩展坞

docker码头工人的意思,负责装卸船上的货物,常见的是集装箱船。
码头工人

我们所说的 Docker 是一个开源的应用容器引擎,开发者可以打包他们的应用及依赖到一个可移植的容器中,发布到流行的 Linux 机器上,也可实现虚拟化。看看 Docker 得图标,是不是和集装箱船很像。
Docker

在传统的开发过程中,一般都是本地开发,然后打成 jar 包(不会吧,现在还有人用 war 包?)放到服务器上,服务器上部署好相关环境(JDK、Nginx、Redis、PostgreSQL、MQ 等),而且要保证每个环境得配置一致。很容易导致的问题是:为什么在测试环境可以运行,上线后却出现问题,版本更新后为什么服务不可用。

基于以上问题,Dokcer 提出了解决方案。

Docker 本身并不是容器,它是创建容器的工具,是应用容器引擎

Docker 的第一句口号是:『Build, Ship and Run』,也就是搭建、发送、运行

Docker 的第二句口号是:『Build once, Run anywhere』,一次搭建,到处能用,类似于 Java 的『Write once, Run anywhere』,一次编写,到处运行。

Docker 技术的三大核心概念,分别是:

  • 镜像(Image):是一个特殊的文件系统。它除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(例如环境变量)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。我们说的 Build 就是搭建镜像。
  • 仓库(Repository):管理与存放镜像的地方。我们说的 Ship 就是将镜像发送到仓库。
  • 容器(Container,也有集装箱的意思):容器是镜像的运行时所创建的实例。我们说的 Run 就是运行镜像。

虚拟机与 Docker

特性 虚拟机 Docker
隔离级别 系统级 进程级
隔离策略 Hypervisor CGroups
系统资源 5~15% 0~5%
启动时间 分钟级 秒级
镜像存储 GB 级 MB 级
集群规模 单机几十个 单机上千个
高可用策略 备份、容灾、迁移 弹性、负载、动态

K8s

什么是 K8s

Kubernetes 这个单词来自于希腊语,含义是舵手领航员

K8s(Kubernetes,类似于 i18n 的缩写) 是一个开源的容器集群管理系统,可以实现容器集群的自动化部署自动扩缩容维护等功能。
K8s

尽管 Docker 为容器化的应用程序提供了开放标准,但随着容器越来越多出现了一系列新问题:

  • 如何协调、调度和管理这些容器?
  • 如何在升级应用程序时不中断服务?
  • 如何监视应用程序的运行状况?
  • 如何批量重新启动容器里的程序?

解决这些问题需要容器编排技术,可以将众多机器抽象,对外呈现出一台超大机器。现在业界比较流行的有:k8s、Mesos、Docker Swarm。

Docker 与 K8s

Docker 和 K8s 是互补关系:

  • Dockers 属于下层——容器引擎层
  • K8s 属于上层——编排调度层

CRI(Container Runtime Interface,容器运行时接口) 出现之前(也就是 K8s v1.5 之前),Docker 作为第一个容器运行时,Kubelet 通过内嵌的 Dockershim 操作 Docker API 来操作容器,进而达到一个面向终态的效果。在这之后,又出现了一种新的容器运行时 - rkt,它也想要成为 Kubernetes 支持的一个容器运行时,当时它也合到了 Kubelet 的代码之中。这两个容器运行时的加入使得 Kubernetes 的代码越来越复杂、难以维护。之后 hyber.sh 加入社区,也想成为第三个容器运行时。

此时就有人站出来说,我们能不能对容器运行时的操作抽象出一个接口,将 Kubelet 代码与具体的容器运行时的实现代码解耦开(依赖倒置原则,依赖于抽象而不能依赖于实现),只要实现了这样一套接口,就能接入到 K8s 的体系中,这就是我们后来见到的 CRI。

所以 K8s 并不是只能运行 Docker 容器,也可以运行实现了 CRI 的容器。

应用部署方式对比

方式 优点 缺点
传统方式 - 每台机器需要手动安装软件,运行应用,工作量很大,很容易出错。
Docker 安装过程只需要拉取镜像,启动即可,不用关心软件的配置、版本等信息。 1、如果容器很多,工作量依然很大;
2、容器间的依赖关系、网络通信、数据持久化等非常复杂。
Docker-Compose 1、减少了多容器的部署的工作量;
2、不用考虑容器间各种复杂的关系。
只能单机编排容器,不能实现多机编排
Docker Swarm 支持分布式下环境下的容器编排 1、只有分布式编排这一个功能,没有动态伸缩、可视化等功能;
2、市场占有率低。
K8s 1、支持分布式下环境下的容器编排以及各种高级功能;
2、市场占有率高。
-
posted @ 2022-09-11 16:13  ageovb  阅读(860)  评论(0编辑  收藏  举报