从物理机到K8S:应用系统部署方式的演进及其影响
公众号「架构成长指南」,专注于生产实践、云原生、分布式系统、大数据技术分享。
概述

随着科技的进步,软件系统的部署架构也在不断演进,从以前传统的物理机到虚拟机、Docker和Kubernetes,我们经历了一系列变化。
这些技术的引入给我们带来了更高的资源利用率、更快的部署速度和更强大的扩展性,下面让我们一起探索这些演进,了解如何从传统部署走向现代化架构,为软件系统的开发和部署带来更多的便利和灵活性。
物理机部署

物理机部署在计算机早期阶段比较盛行,因为那时候虚拟化和云计算等技术还没有普及,物理机是主要的部署选择。
优点
- 性能和资源控制:物理机提供了直接访问硬件资源的能力,在某些对性能要求较高的应用场景中,可以实现更好的性能表现。
- 硬件特定需求:某些应用程序可能对特定硬件设备或外部接口有依赖,例如需要直接访问物理网卡或存储设备
缺点
系统资源利用率较低
- 不同应用程序依赖于同一类库的不同版本,必须使用不同的机器
- 不同的应用程序不能共用同一端口,这使得在某些场景下,即使计算节点还有足够的计算资源,依然无法通过 部署多个实例来提供服务
系统资源无法进行有效隔离
- 很可能出现一个应用程序耗光所有资源,导致其他应用程序无法正常运行的情况。
- 无法做到应用程序快速弹性扩容
运维方式
物理机代表:IBM小型机、HP小型机,在此架构和部署的模式下,哪种应用部署在哪些节点上,往往是固定不变的,这使得自动化运维变得困难重重,通常的做法是人工维护应用与服务器之间的关系表
虚拟机部署

虚拟机是一种将物理计算机资源划分为多个独立的虚拟环境的技术,通过虚拟化软件,可以在一台物理服务器上运行多个虚拟机,云计算的兴起和发展,使得虚拟机得到了更广泛的应用,截止目前,大部分还是有在用虚拟机部署。
优点
- 硬件资源隔离
- 资源的充分利用
缺点
- 运维管理成本较高,需要管理的主机数量是原来的数倍,管理复杂度的提升显而易见
- 依赖库需要单独安装,版本很难保持一致
- 不容易迁移
运维方式
小公司自建私有云,采用业界开源OpenStack的云平台进行管理,大的公有云公司采用自己的云平台进行管理,如:阿里云、腾讯云、华为云、青云、AWS

容器化部署

容器化部署主要是以Docker为代表,Docker的出现填补了传统虚拟化技术的一些不足之处,如启动时间长、资源占用高等问题。它通过利用Linux内核的容器特性,实现了更为轻量级的虚拟化解决方案,所以不少公司采用了这种方式部署。
优点
一致的运行环境
提供了除内核外完整的运行时环境,确保了应用运行环境一致性
快速移植
由于 Docker 确保了执行环境的一致性,使得应用的迁移更加容易。Docker 可以在很多平台上运行,无论是物理机、虚拟机、公有云、私有云,甚至是笔记本,其运行结果是一致的
更快速的启动时间
传统的虚拟机技术启动应用服务往往需要数分钟,而 Docker 容器应用,由于直接运行于宿主内核,无需启动完整的操作系统,因此可以做到秒级、甚至毫秒级的启动时间。大大的节约了开发、测试、部署的时间
更高效的利用系统资源
由于容器不需要进行硬件虚拟以及运行完整操作系统等额外开销,Docker 对系统资源的利用率更高。无论是应用执行速度、内存损耗或者文件存储速度,都要比传统虚拟机技术更高效
缺点
由于容器数量庞大,通过手动运维方式工作量比较大
与虚拟机比较
| 特性 | 容器 | 虚拟机 |
|---|---|---|
| 启动 | 秒级 | 分钟级 |
| 硬盘使用 | MB | GB |
| 性能 | 接近原生 | 弱于 |
| 系统支持量 | 单机支持上千个容器 | 一般几十个 |
| 管理成熟度 | 已k8s为代表 | 以OpenStack、vmware为代表 |
K8S部署

尽管Docker提供了一种方便的容器化解决方案,但在进行大规模部署和管理时,会面临大量的版本更新升级部署,以及高可用的管理等问题。
而Kubernetes提供了更强大和全面的容器管理和编排功能,他能够自动处理复杂的任务,如容器调度、扩缩容、服务发现和负载均衡等,简化了部署和管理过程,同时提供了更好的可扩展性和可靠性,所以是现在各大公司采用的主流部署方式。
优点
应用自动化部署
只需要执行一个命令,就可以把服务启动起来,而不用关心该部署到那个节点上。
弹性扩缩容
使用一个简单的命令、控制台 或基于 CPU 内存使用情况自动对应用程序进行扩容或者缩容
灰度发布
保证在应用版本升级时,对线上用户无感知
多环境部署支持
支持公有云,私有云,混合云,多重云部署
可维护好
提供了专门的运维系统界面,可以在线管理大规模应用,进行升级、回滚、监控等,比如 Rancher、KubeSphere
缺点
K8s 系统架构比较复杂,对于初学者门槛有点高
运维方式
采用k8s进行容器管理,在发布服务时,构建基础容器镜像,到镜像仓库,在对应环境访问镜像仓库,拉取对应容器镜像进行部署

以上我们介绍了物理机、虚拟机、容器化和K8s部署区别,我们可以根据自身的需求选择最适合自己的部署方式,希望对你有所帮助。
从物理机到K8S:应用系统部署方式的演进及其影响的更多相关文章
- 物理机安装ESXi并优化部署虚拟机
物理机配置 CPU,BIOS中启用虚拟化(VT-X) 内存和硬盘,内存尽量大.硬盘最好SSD,内存的大小和硬盘的速度直接决定了虚拟机运行的快慢 网络,至少一块千兆网卡(vSphere7.0版本以后支持 ...
- guns系统部署方式及常见问题
项目框架:guns 开发IDE:Idea 2018.1 两种打包方式:war 和jar. 1.正常打包的姿势 1.1按照下图修改为你想到打包的方式. 1.2 执行打包 clean packa ...
- 自动化kolla-ansible部署ubuntu20.04+openstack-victoria之物理机配置-01
自动化kolla-ansible部署ubuntu20.04+openstack-victoria之物理机配置-01 欢迎加QQ群:1026880196 进行交流学习 近期我发现网上有人转载或者复制 ...
- 物理机异常断电,linux虚拟机系统磁盘mount失败,导致无法启动; kubectl 连接失败
虚拟机 CentOS 7 挂载文件系统失败 上周五下班前没有关闭虚拟机和物理机, 今天周一开了虚拟机之后,发现操作系统启动失败. 原因跟 这篇文章描述的一模一样. 解决操作系统的文件系统挂载的问题之后 ...
- 使用vmware vconverter从物理机迁移系统到虚拟机P2V(多图)
zhuan:https://segmentfault.com/a/1190000002697929 本文完整记录了如何从物理服务器,保持所有环境配置信息,纹丝不动的迁移到虚拟机上,俗称 P2V .采用 ...
- 关于在win8系统下用VMware 9.0装系统导致物理机不断重启的解决办法
一.问题描述 前段时间将操作系统换成了Win8,安装上VMware 9.0英文版.然后在VMware中安装centos系统,结果每次到安装系统的时候,物理机系统就会莫名其妙地自动重启,毫无征兆地出现, ...
- 真实的物理机安装Centos7系统后网卡只有lo没有eno1的解决办法:实际上是物理机未安装网驱动卡
问题症状: 我真实的物理机安装Centos7系统后,在/etc/sysconfig/目录下查看,发现网卡只有lo没有eno1,出现该问题的实际原因是物理机未安装网驱动卡. 解决办法: 不多说了,让我们 ...
- 【转载】Vmware Vconverter从物理机迁移系统到虚拟机P2V
本文完整记录了如何从物理服务器,保持所有环境配置信息,纹丝不动的迁移到虚拟机上,俗称 P2V .采用的工具是VMware公司的 VMware vcenter vconverter standalone ...
- windows,linux,esxi系统判断当前主机是物理机还是虚拟机?查询主机序列号命令
参考网站:https://blog.csdn.net/yangzhenping/article/details/49996765 查序列号: http://www.bubuko.com/infodet ...
- hadoop进阶----hadoop经验(一)-----生产环境hadoop部署在超大内存服务器的虚拟机集群上vs几个内存较小的物理机
生产环境 hadoop部署在超大内存服务器的虚拟机集群上 好 还是 几个内存较小的物理机上好? 虚拟机集群优点 虚拟化会带来一些其他方面的功能. 资源隔离.有些集群是专用的,比如给你三台设备只跑一个 ...
随机推荐
- [nginx]定制http头信息
前言 修改http响应头信息,相关Nginx模块:ngx_http_headers_module expires 语法: expires [modified] time; expires [modif ...
- Python实现商城购物经典案例
代码分步骤思路: 商城添加商品:opea_db = [{'store_name': '手机','num': 1}] while True: store_name=input('请输入需要存放的商品(按 ...
- 8、Mybatis之自定义映射
8.1.环境搭建 8.1.1.创建新module 创建名为mybatis_resultMap的新module,过程参考5.1节 8.1.2.创建t_emp和t_dept表 CREATE TABLE ` ...
- 《深入理解Java虚拟机》读书笔记: 类加载器
类加载器 虚拟机设计团队把类加载阶段中的"通过一个类的全限定名来获取描述 ...
- 《SQLi-Labs》02. Less 6~10
@ 目录 索引 Less-6 题解 原理 Less-7 题解 Less-8 题解 Less-9 题解 原理 Less-10 题解 sqli.开启新坑. 索引 Less-6:布尔盲注,字符型[" ...
- 《SQL与数据库基础》14. 存储过程 · 存储函数
目录 存储过程 基本语法 变量 系统变量 用户定义变量 局部变量 if判断 参数 case判断 while循环 repeat循环 loop循环 游标 条件处理程序 存储函数 本文以 MySQL 为例 ...
- 程序员:你如何写可重复执行的SQL语句?
上图的意思: 百战百胜,屡试不爽. 故事 程序员小张: 刚毕业,参加工作1年左右,日常工作是CRUD 架构师老李: 多个大型项目经验,精通各种开发架构屠龙宝术: 小张注意到,在实际的项目开发场景中,很 ...
- 自定义注解,实现请求缓存【Spring Cache】
前言 偶尔看到了spring cache的文章,我去,实现原理基本相同,哈哈,大家可以结合着看看. 简介 实际项目中,会遇到很多查询数据的场景,这些数据更新频率也不是很高,一般我们在业务处理时,会对这 ...
- RabbitMQ入门实践
一.概述: 大多应用中,可通过消息服务中间件来提升系统异步通信.扩展解耦能力. 1.消息服务中两个重要概念: 消息代理(message broker)和目的地(destination)当消息发送者发送 ...
- 部分网页中仅供浏览的pdf文件下载方法
现在越来越多的网站提供的PDF资料只能在线浏览,不提供下载功能,实际上仅仅是通过网页PDF浏览插件来访问文件资源,如果能够获取到该文件的访问地址,就可以访问下载. 以Firefox浏览器访问某大学网站 ...