从物理机到K8S:应用系统部署方式的演进及其影响

news2024/11/16 9:40:21

公众号「架构成长指南」,专注于生产实践、云原生、分布式系统、大数据技术分享。

概述

随着科技的进步,软件系统的部署架构也在不断演进,从以前传统的物理机虚拟机DockerKubernetes,我们经历了一系列变化。

这些技术的引入给我们带来了更高的资源利用率、更快的部署速度和更强大的扩展性,下面让我们一起探索这些演进,了解如何从传统部署走向现代化架构,为软件系统的开发和部署带来更多的便利和灵活性。

物理机部署

物理机部署在计算机早期阶段比较盛行,因为那时候虚拟化和云计算等技术还没有普及,物理机是主要的部署选择。

优点
  • 性能和资源控制:物理机提供了直接访问硬件资源的能力,在某些对性能要求较高的应用场景中,可以实现更好的性能表现。
  • 硬件特定需求:某些应用程序可能对特定硬件设备或外部接口有依赖,例如需要直接访问物理网卡或存储设备
缺点

系统资源利用率较低

  • 不同应用程序依赖于同一类库的不同版本,必须使用不同的机器
  • 不同的应用程序不能共用同一端口,这使得在某些场景下,即使计算节点还有足够的计算资源,依然无法通过 部署多个实例来提供服务

系统资源无法进行有效隔离

  • 很可能出现一个应用程序耗光所有资源,导致其他应用程序无法正常运行的情况。
  • 无法做到应用程序快速弹性扩容
运维方式

物理机代表:IBM小型机、HP小型机,在此架构和部署的模式下,哪种应用部署在哪些节点上,往往是固定不变的,这使得自动化运维变得困难重重,通常的做法是人工维护应用与服务器之间的关系表

虚拟机部署


虚拟机是一种将物理计算机资源划分为多个独立的虚拟环境的技术,通过虚拟化软件,可以在一台物理服务器上运行多个虚拟机,云计算的兴起和发展,使得虚拟机得到了更广泛的应用,截止目前,大部分还是有在用虚拟机部署。

优点
  • 硬件资源隔离
  • 资源的充分利用
缺点
  • 运维管理成本较高,需要管理的主机数量是原来的数倍,管理复杂度的提升显而易见
  • 依赖库需要单独安装,版本很难保持一致
  • 不容易迁移
运维方式

小公司自建私有云,采用业界开源OpenStack的云平台进行管理,大的公有云公司采用自己的云平台进行管理,如:阿里云、腾讯云、华为云、青云、AWS

容器化部署

容器化部署主要是以Docker为代表,Docker的出现填补了传统虚拟化技术的一些不足之处,如启动时间长、资源占用高等问题。它通过利用Linux内核的容器特性,实现了更为轻量级的虚拟化解决方案,所以不少公司采用了这种方式部署。

优点

一致的运行环境

提供了除内核外完整的运行时环境,确保了应用运行环境一致性

快速移植

由于 Docker 确保了执行环境的一致性,使得应用的迁移更加容易。Docker 可以在很多平台上运行,无论是物理机、虚拟机、公有云、私有云,甚至是笔记本,其运行结果是一致的

更快速的启动时间

传统的虚拟机技术启动应用服务往往需要数分钟,而 Docker 容器应用,由于直接运行于宿主内核,无需启动完整的操作系统,因此可以做到秒级、甚至毫秒级的启动时间。大大的节约了开发、测试、部署的时间

更高效的利用系统资源

由于容器不需要进行硬件虚拟以及运行完整操作系统等额外开销,Docker 对系统资源的利用率更高。无论是应用执行速度、内存损耗或者文件存储速度,都要比传统虚拟机技术更高效

缺点

由于容器数量庞大,通过手动运维方式工作量比较大

与虚拟机比较
特性容器虚拟机
启动秒级分钟级
硬盘使用MBGB
性能接近原生弱于
系统支持量单机支持上千个容器一般几十个
管理成熟度已k8s为代表以OpenStack、vmware为代表

K8S部署

尽管Docker提供了一种方便的容器化解决方案,但在进行大规模部署和管理时,会面临大量的版本更新升级部署,以及高可用的管理等问题。

Kubernetes提供了更强大和全面的容器管理和编排功能,他能够自动处理复杂的任务,如容器调度、扩缩容、服务发现和负载均衡等,简化了部署和管理过程,同时提供了更好的可扩展性和可靠性,所以是现在各大公司采用的主流部署方式。

优点

应用自动化部署

只需要执行一个命令,就可以把服务启动起来,而不用关心该部署到那个节点上。

弹性扩缩容

使用一个简单的命令、控制台 或基于 CPU 内存使用情况自动对应用程序进行扩容或者缩容

灰度发布

保证在应用版本升级时,对线上用户无感知

多环境部署支持

支持公有云,私有云,混合云,多重云部署

可维护好

提供了专门的运维系统界面,可以在线管理大规模应用,进行升级、回滚、监控等,比如 RancherKubeSphere

缺点

K8s 系统架构比较复杂,对于初学者门槛有点高

运维方式

采用k8s进行容器管理,在发布服务时,构建基础容器镜像,到镜像仓库,在对应环境访问镜像仓库,拉取对应容器镜像进行部署

以上我们介绍了物理机、虚拟机、容器化和K8s部署区别,我们可以根据自身的需求选择最适合自己的部署方式,希望对你有所帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1272780.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

liunx java 生成图片 中文显示不出来

使用java 生成图片,在图片上打的文字水印显示为一个方框,这种情况的原因,一般是liunx系统或者docker容器内,没有你在打文字水印时选择的字体 解决办法,先找一个免费的字体,比如 Alibaba-PuHuiTi-Regular.otf 然后使用字体 File newFileT new File("Alibaba-PuHuiTi-Re…

OSPF的8种状态机总结,小白必看!

OSPF概述 在OSPF网络中,为了交换路由信息,邻居设备之间首先要建立邻接关系,邻居(Neighbors)关系和邻接(Adjacencies)关系是两个不同的概念。 邻居关系 OSPF设备启动后,会通过OSPF…

Python streamlit指南,构建令人惊叹的可视化Web界面!

更多资料获取 📚 个人网站:ipengtao.com 在当今数据驱动的世界中,构建交互式、美观且高效的数据可视化应用变得至关重要。而Streamlit,作为Python生态系统中为开发者提供了轻松创建Web应用的利器。 本文将深入探讨Streamlit的方…

Android Studio Giraffe版本遇到的问题

背景 上周固态硬盘挂了,恢复数据之后,重新换了新的固态安装了Win11系统,之前安装的是Android Studio 4.x的版本,这次也是趁着新的系统安装新的Android开发工具。 版本如下: 但是打开以前的Android旧项目时&#xff…

Informer辅助笔记:data/dataloader.py

以WTH为例 import os import numpy as np import pandas as pdimport torch from torch.utils.data import Dataset, DataLoader # from sklearn.preprocessing import StandardScalerfrom utils.tools import StandardScaler from utils.timefeatures import time_featuresim…

动态:class和:style绑定

1. 在应用界面中, 某个(些)元素的样式是变化的 class/style绑定就是专门用来实现动态样式效果的技术 2. 动态class绑定 :class等号后的变量值 可以是字符串 :class等号后 可以是对象 :class等号后 可以是数组 3. 动态style绑定 :style"{ color: myPinkColor, fontS…

功能测试换工作不被认可?那你缺少这5点建议

📢专注于分享软件测试干货内容,欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!📢交流讨论:欢迎加入我们一起学习!📢资源分享:耗时200小时精选的「软件测试」资…

asla四大开源组件应用示例(alsa-lib、alsa-utils、alsa-tools、alsa-plugins)

文章目录 alsa设备文件/dev/snd//sys/class/sound/proc/asoundalsa-lib示例1alsa-utilsalsa-toolsalsa-plugins参考alsa设备文件 /dev/snd/ alsa设备文件目录位于,/dev/snd,如下所示 root@xboard:~#ls /dev/snd -l total 0 drwxr-xr-x 2 root root 60 Nov 6 2023 …

速达软件全系产品 RCE漏洞复现

0x01 产品简介 速达软件是中小企业管理软件第一品牌和行业领导者,是128万家企业用户忠实的选择。14年来速达致力于进销存软件、ERP软件、财务软件、CRM软件等管理软件的研发和服务。 0x02 漏洞概述 速达软件全系产品存在任意文件上传漏洞,未经身份认证得攻击者可以…

flask web开发学习之初识flask(二)

文章目录 一、创建程序实例并注册路由1. 为视图绑定绑定多个URL2. 动态URL 二、启动开发服务器1. 自动发现程序实例2. 管理环境变量3. 使用pycharm运行服务器4. 更多的启动选项5. 设置运行环境6. 调试器7. 重载器 一、创建程序实例并注册路由 app.py # 从flask包中导入flask类…

selenium元素定位方法之xpath

什么是xpath? XPath是XML的路径语言,通俗一点讲就是通过元素的路径来查找到这个标签元素XPath使用路径表达式在XML文档中进行导航 普通语法 注意! 1.xpath中的值用引号引起来时,在代码中要注意区分,内单外双&#xf…

Pandas教程07:DataFrame数据中apply参数自定义运算的用法

DataFrame.apply()方法主要用于调用每个Series的函数。此函数可以是一个Python的函数,或者是lambda函数。此函数可以接收一个函数作为输入,并应用于DataFrame的每一列。 以下是一些DataFrame.apply()的示例用法: # Author : 小红牛 # 微信公…

深度解析 Spring Security 自定义异常失效问题:源码剖析与解决方案

🚀 作者主页: 有来技术 🔥 开源项目: youlai-mall 🍃 vue3-element-admin 🍃 youlai-boot 🌺 仓库主页: Gitee 💫 Github 💫 GitCode 💖 欢迎点赞…

【docker系列】docker实战之部署SpringBoot项目

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

行行AI董事长李明顺:今天每个人都可以成为AI应用的创业者

“ AI创业的核心在于真正介入到应用层面,AI应该成为真正的应用支撑。 ” 整理 | 王娴 编辑 | 云舒 出品|极新 2023年11月28日,极新AIGC行业峰会在北京东升国际科学园顺利召开,行行AI董事长李明顺先生在会上做了题为《从大模型…

如何做好前端单元测试?字节5年测试老司机是这样说的!

近几年,前端发展越来越迅猛,各类框架层出不穷,前端实现的业务逻辑也越来越复杂,前端单元测试也越来越受重视,包括百度在内的一些大厂在面试中也会问到单元测试相关的题目。那么前端应该如何做好单元测试? 什…

写给步入三十的自己,2023年终总结!

前言 古语有云: “二十而立,三十而肆”,而我在二十岁这些年已经有一定的责任感和独立思考了,但是还未步入三十,所以为了之后有一定的胆识和能力,我在今年做了目前能做的准备。 今年已做事件 工作相关 1.拿到了PMP证书…

2023年大数据场景智能运维实践总结

作者:放纵 引言 在当今数字化世界中,如何充分挖掘和发挥数据价值已经成为了企业成功的关键因素,大数据也成为企业决策和运营的重要驱动力。在《当我们在谈论DataOps时,我们到底在谈论什么》一文中也提到,企业在面对到…

开关电源基础而又硬核的知识

1.什么是Power Supply? Power Supply是一种提供电力能源的设备,它可以将一种电力能源形式转换成另外一种电力能源形式,并能对其进行控制和调节。 根据转换的形式分类:AC/DC、DC/DC、DC/AC、AC/AC 根据转换的方法分类:线性电源、…

Docker篇之利用docker搭建ftp服务器可实现多用户上传

一、前言 场景:公司需要搭建FTP服务器,供内网之前可以互相传递数据,安全稳定,需要满足开通多个账号,每个用户上传的文件有自己对应的文件目录。 这里建议:用户目录Disk尽量大一点,避免因为空间不…