最近开始学习k8s,一直不了解为什么要使用容器,而不是在同一台物理机上直接使用多进程或者在不同虚拟机中运行不同服务,我只能按照自己的理解谈谈这三者的区别
一、物理机
物理机又叫作**独立服务器**,我的理解就是待在机房老老实实工作的,有完整操作系统的这一大坨机器的其中一台;
按照架构来区别可分为X86服务器和非X86服务器,其中非X86服务器以ARM架构处理器为主导,按照操作系统来区别可以分为Linux、Windows、Unix、macOS等;
其中因为**免费开源且稳定耐用**的优点**Linux服务器**现在基本成为运行软件服务的首选;常见的Linux服务器的系统主要包括**debian系(debian、ubantu)**、**redhat系(redhat、centos)**、**suse**、**麒麟**、**欧拉**等;
物理机的优点如下:
1、物理机是直接运行在硬件上的,相比与虚拟机少了虚拟层的开销,在一定工作负载下性能会更高;
2、物理机可以直接访问所有的硬件资源;
3、物理机更为稳定和安全;
二、虚拟机
因为物理机通常只能运行一个操作系统,无法充分利用硬件资源;同时不同的应用程序所依赖的运行环境也不一定一样,可能会出现兼容性或端口冲突等问题;为了解决这些问题,也同时降低企业采购、设置、散热和维护的成本,**虚拟化**的技术得到广泛应用;
什么是虚拟机呢?
用官方的术语来说,**虚拟机(VM)**是一种计算环境,会模拟出自己的整套硬件,包括 CPU、内存、网络接口和存储器,通常用于充当隔离系统。运行虚拟机的物理机被称为**主机**。使用其资源的诸多虚拟机被称为**虚拟客户机**。**虚拟机监控程序(Hypervisor )**会将 CPU、内存和存储等计算资源视为一个资源池,从而可以轻松地在现有客户机之间或者向新的虚拟机动态分配这些资源。
按我自己的理解呢,在一台物理机上安装了一个操作系统,比如说是**redhat**的操作系统,在这个物理机上或者是在这个redhat的操作系统上又运行了一个程序,这个程序叫做**虚拟机监控程序,**这个**虚拟机监控程序**动态的将硬件资源分成了多个虚拟环境,每一个虚拟环境都相当于一个独立服务器,每一个服务器又可以安装不同的操作系统,比如说centos、麒麟等,在不同的操作系统上又配置不同的运行环境来运行不同的服务,虚拟机的结构如下:
![](https://img-blog.csdnimg.cn/direct/294607a3d8e140beab11fc439e58647e.png)
目前常见的虚拟机软件有**VMware Worstation**、**VirtualBox**、**KVM**、**QEMU等,**我本人使用最多的是**VMware Worstation pro;**
虚拟机相较于物理机的优缺点如下:
优点:
** ** 1、 一台物理机上可以运行多台虚拟机,每一个虚拟机又可以运行不同的操作系统和应用程序,极大的提高了硬件资源的利用率;
2、虚拟机可以快速创建、销毁。备份、迁移,方便进行系统备份、恢复和迁移;
3、虚拟机可以动态调整资源配置,比如说增加 CPU、内存、磁盘空间等,以满足不同应用程序的需求;
缺点:
1、虚拟机需要虚拟化层的支持,这会引入一定的性能开销,可能会导致性能下降;
2、多个虚拟机共享物理服务器的硬件资源,可能会导致资源竞争和性能瓶颈;
3、虚拟机之间虽然相互隔离,但如果虚拟化层存在漏洞,可能会导致整个系统受到攻击;
** 三、容器 **
** ** 虚拟机技术虽然做到了在同一个宿主机中提供不同的运行环境,既解决了硬件层面的硬件资源共享问题也为不同软件的运行提供了不同运行环境,但是运行虚拟机监控程序却会造成巨大的资源消耗。同时也有可能出现环境迁移报错的问题。
比如说工作以后应该都有遇到过开发环境迁移到测试环境,jar包却无法运行,后面排查出是jdk版本不一致导致的;也应该有遇到过测试环境迁移到生产环境时,因为操作系统不一致而导致适配性出了问题吧;
所以拥有着**轻量级**、**快速启动**、**高度可移植性**等优势的**容器**(如**Docker**),作为一种新兴的虚拟化技术,正不断地引领着应用部署的新潮流;
**容器**是在操作系统层面上,对所需的各类资源进行了隔离,它是一种基于进程级隔离的轻量级虚拟化技术;容器与容器之间可以共享操作系统的内核、执行文件、库等,所以说一个物理机可以仅安装一个操作系统便可以运行多个容器;
![](https://img-blog.csdnimg.cn/direct/ae4cb0c28aa64acf9b3b8c59f7536d47.png)
目前应用的比较广泛的容器主要包括**Docker、Containerd**、**CRI-O等;**
其中**Docker**是一种开源的容器化平台,采用的是**Client-Server**架构,采用远程Api来管理和创建容器,其中**Docker Daemon**负责管理容器生命周期、镜像构建和网络等功能,而**Docker CLI**则作为与Daemon进行交互的命令行工具。Docker可以帮助开发人员和运维团队更轻松地创建、部署和运行应用程序。
容器相较于虚拟机的优缺点如下:
优点:
1、容器通过共享宿主机的操作系统的内核、执行文件、库,避免了虚拟机重复加载多个操作系统内核的开销,使得其资源消耗更少,也更加高效;
2、容器在启动时,只需加载应用程序及其依赖项,所以可以快速启动,几秒时间即可;
3、容器具有高度的可移植性,可以轻松地在不同的操作系统、云平台或物理机上迁移,当然前提是可以支持运行使用的容器;
缺点:
1、虚拟机是完全隔离性的,这种隔离性确保了不同虚拟机之间的资源、网络和存储不会相互影响,而容器却是共享宿主机资源的,所以在一些需要确保安全的场合,虚拟机更具优势;
2、在一些特殊场景,比如说需要运行不同的操作系统或者是特定的应用需求下,选择虚拟机可能是一个更好的选择;
四、结尾
传统物理机、虚拟机、容器之间都有自己的优缺点,如何根据系统架构正确的选择或者结合他们才是最明智的选择;
我是chililopp,正在学习k8s,之后如果有新的总结或者体验也会发出来,如果有说的不对的地方,还请指点,十分感谢阅读!
版权归原作者 chililopp 所有, 如有侵权,请联系我们删除。