物理机演进到虚拟化部署时代

本文回顾了服务器应用部署的历史,从物理机到虚拟机再到容器技术的转变,重点介绍了Docker如何利用Linux容器技术解决资源冲突、部署效率和资源利用问题,强调了容器技术在现代IT架构中的轻量级和高效优势。
摘要由CSDN通过智能技术生成

容器 docker技术的演进

我们先看看很久很久以前,服务器是怎么部署应用的!

学习每一块新的领域的知识,我们的理念是
1. 学习架构,原理,为什么,清晰你为什么要学,以及能解决你什么问题
(阶段1.为什么学	原理性 学习新技术的背景)
(阶段3,回头继续看书,如今时代,已经遍地是成提醒化的知识框架,已经很方便学习了,深入理解原理性学习)
2. 学习命令使用(阶段2, 如何用)	
docker 的前世今生
1.发展阶段
2015年,2016年,docker开始在市面上流行 现在是2024年了,docker目前的应用广度   发展阶段
2.学习如何使用 docker

物理机时代 > 虚拟机时代 > 容器化时代 (VM->KVM)

对KVM虚拟机管理一堆技术(openstack redhat->openshit等等技术)
物理机->VM(虚拟机)->KVM->对KVM虚拟机管理技术->容器时代
内核 + 发行版
1.最早是如何部署应用的
physical server(物理机)->operating system(宿主机OS centos,ubuntu,windows  内核+发行板)->application(安装部署应用,比如跑一个LNMP)
服务器:DELL R740 8C(8核) 64G   这么高的配置就跑一个LNMP,是不是很浪费  如果想在一个机器是跑多套业务?
业务1:LNMP	业务版本部署最新的,对底层的依赖也会升级
nginx	/opt/nginx-1-20/ (文件系统) 进程 1745 端口 80或者443
mysql	/opt/mysql-5.7/ (文件系统) 进程 端口
python	/opt/python3.6/ (文件系统) 进程 端口

PATH 调整PATH变量

业务2:LNMP	业务版本部署不需要最新的,对底层的依赖也会版本也较低
nginx-1.6	再来一套文件系统  进程  端口  一定是不能重复的
mysql-8.0
python-3.9 php

 

如果你有10套业务呢?

给当前宿主机 编译安装   基础环境也要安装  nginx,mysql,python
yum install xxx  基础依赖 (基础的库要安装)
依赖1	依赖2	依赖3	版本	其实说白了,基础依赖也是软件 比如 lib-xxx版本 openssl-xxx版本等他们都是有版本的(缺少基础依赖 nginx mysql python就没发安装)

业务1 与 业务2 会导致版本冲突 此时该如何解决?你就没有办法一台机器跑10几套业务了 只能再采购新的服务器
服务器1	服务器2	服务器3  
一台新的服务器
-你需要装机
-要划分网络
-你要进行系统初始化
-你要一步一步把基础依赖安装好
-应用部署环境
-测试
-开发
-线上多套环境

1. 为什么要学 docker

某公司的产品运行在内部的虚拟化平台中,如 openstack ,也就我们所学的 KVM 虚拟化,创建虚拟机。
但是不断增加的云端应用,增加了对硬件资源的消耗,不断的创建虚拟机,给公司带来了难题,公司已经在
云平台上运行了多台云主机,消耗了大量的硬件资源。
怎么样才能够高效利用硬件资源实现云服务呢?
容器技术,此时就派上用场了

DELL R740 8C 64G	> 基本配置	如 50 个虚拟机节点 50 个应用	完整的 OS 系统,独立的50个 LNMP 环境
50 个虚拟机节点-> 想跑 2000 个应用呢?2000个 LNMP?虚拟机肯定跑不起来,docker 就出现了 资源最大化利用
docker一堆好处:

容器技术,  linux 内核支持,本身就有功能
提供容器技术的软件有很多种
docker 干掉了其他所有的产品,成为市面标准

容器对宿主机,资源最大化利用
房间,资源最大化利用
资源隔离,环境隔离
Openstack
openstack 是云管理平台,其本身并不提供虚拟化功能,真正的虚拟化能力是由底层的 Hypervisor (如 KVM,Qemu,Xen等)提供,所谓管理平台就是为方便使用而与。
如果没有 openstack 一样可以通过 virsh,virl-manager 来实现创建虚拟机的操作,只不过对敲命令行方式需要
要一定的学习成本,对于普通用户不是很友好。
openstack 是一个完整的 web 平台,通过各个组件创建虚拟机,管理网络,cpu,磁盘资源。
kvm
KVM是底层的 Hypervisor ,是用来模拟 cpu 的运行,然而一个用户能在 KVM 上完成虚拟机的操作还需要 network 及周边的 I/O 支持,所以便借鉴了 Qemu 进行一定的修改,形成 qemu-kvm。
但是 openstack 不会直接控制 qemu-kvm ,会用一个 libvirt 的库去间接控制 qemu-kvm。
qemu-kvm 的地位就像底层驱动来着。
KVM 是 linux 虚拟化的核心管理技术
docker的诞生
Docker 公司位于旧金山,原名 dotCloud, 底层利用了 linux 容器技术 (LXC) (在操作系统中实现资源隔离与限制)。为了方便创建和管理这些容器,dotCloud 开发了一些内部工具,之后被命名为"docker".	
Docker 就是这样诞生的

Hypervisor , 一种运行基础物理服务器和操作系统之间的中间软件层,可允许多个操作系统和应用共享硬件,常见的 vmware的 workstation,ESXi,微软的 Hyper-v或者思杰的 XenServer.

Container Runtime ,通过 linux 内核虚拟化能力管理多个容器。多个容器共享一套操作系统内核。因此摘掉了内核占用的空间及运行所需要的耗时,使得容器极其轻量与快速。

2. 容器技术(发展)

- Docker 最初是 DotCloud 公司在法国期间发起的一个公司内部项目,后来以 Apache 2.0 授权协议开源,代码在 github 上维护

-  Docker 是基于 Google 公司推出的 Golang 语言开发而来的,基于 Linux 内核的 Cgroups,NameSpace,以及 Union FS 等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术。

-  由于隔离的进程独立于宿主机和其他隔离的进程,也被称之为容器。

- 最初的 Docker 是基于 LXC ( Linux Containers  是一种 linux 端 操作系统 级的虚拟化技术,可以实现轻量级容器,每个容器看起来像一个独立的操作系统,他们共享同一个物理服务器,但是互相隔离。LXC容器比传统虚拟机更加轻便,高效,且启动速度快) 的,后来去除 LXC 转而使用自行开发的 Libcontainer。

-  Docker 被定义为开源的容器引擎,可以方便的对容器进行管理,例如对镜像打包封装,引入 Docker Registry 对镜像统一管理。

-  利用 Docker 可以实现开发,测试,生产环境的部署一致性,极大的减少运维成本。

LXC > Libcontainer (创建一个隔离的,独立的 namespace,也就是容器实例)
docker 的强大在于通过操作系统层面的虚拟化实现进程隔离,因此 docker 容器进程运行后,不需要像虚拟机一样的一个完整的操作系统。。。

红帽官网的虚拟化文章
https://www.redhat.com/zh/topics/virtualization
https://www.redhat.com/zh/containers/whats-a-linux-container

维基百科,什么是操作系统虚拟化
https://zh.wikipedia.org/zh-cn/topics/


LXC > Libcontainer (创建一个隔离的,独立的 namespace,也就是容器实例)

容器技术  隔绝了软件的依赖,文件系统一类

LXC

LXC(Linux Containers)是一种操作系统级虚拟化技术,它允许在单个Linux内核上运行多个独立的Linux系统。LXC提供了一种轻量级的虚拟化解决方案,可以在一个主机上隔离运行多个应用程序或服务,并提供与传统虚拟机相似的隔离性和资源控制。

LXC利用Linux内核的cgroups和命名空间功能来实现容器的隔离。cgroups(control groups)用于限制和控制容器的资源使用,如CPU、内存、磁盘IO等。命名空间则用于隔离容器的进程、网络、文件系统等。

LXC提供了一个用户友好的命令行工具,可以方便地创建、启动、停止和管理容器。通过LXC,您可以快速部署和管理多个独立的容器,每个容器都有自己的文件系统、网络和进程空间。

LXC还支持容器快照、迁移和自动化管理等功能,使得容器的管理更加灵活和高效。此外,LXC还可以与其他工具和技术集成,如Docker、Kubernetes等,以满足不同场景下的需求。
我们先看看很久很久以前,服务器是怎么部署应用的!
  • 部署非常慢
  • 成本非常高
  • 资源浪费
  • 难于迁移和扩展
  • 可能会被限定硬件厂商
购买新机器,你得把安装的步骤都得再来一遍 从开机到完成,你可能一个上午或者一天时间 你都有可能在安装依赖  yum  rpm 编译 等等安装方式 安装一天才能把依赖安装起来,还有可能搞不定  部署慢 成本高(一台服务器要多少钱) 假如你公司有三个业务,你要买三台服务器,要多少钱?你要写成 一个shell或者anse 部署还能轻松一点,要是没有,让你手工迁移,你可能一个月就干这一件事情了 不同的服务器安装是不一样的 inter cpu  AND CPU 物理服务器对cpu的支持是不一样的 2012的时候 浦发银行 一次银行业务的更新 请了40几个运维 做数据库升级 有一堆品牌服务器 一堆应用 
由于物理机的很多问题,后来就出现了虚拟机
由于物理机的诸多问题,后来出现了虚拟机。
  • 一个物理机可以部署多个app
    • 一台物理机可以通过 vmware 虚拟化安装多个操作系统
    • 每个操作系统可以运行单挂的app
    • 因此一个物理机可以部署多个app
  • 每个app独立运行在一个VM里

物理机 很重量级

虚拟机 很重量级

容器 轻量级

但是虚拟化也是有局限性的,每一个虚拟机都是一个完整的操作系统,要分配系统资源,虚拟机多到一定程度时,操作系统本身资源也就消耗殆尽,或者说必须扩容。
举例	C代表核	私有云服务	阿里云 本质创建虚机 以及跑什么业务
宿主机	8核	64G	内存	20TB硬盘	能跑300个虚机实例   100个虚机实例  物理机资源用完就要扩容
物理机  主板 内存已经到达最大 64G	磁盘最大 20TB 不能再扩容了  此时只能增加物理机来扩容
虚拟化的迁移是一个大工程 
不同业务用的资源是不一样的,
比如计算类的 数据库 后端	对cpu要求高 
如NFS (源站)静态服务器 CDN(源站服务器)	对磁盘要求高一点
VM 虚拟机 1	1C	2G	python,php,nginx 	内网 xxOA平台  几十,几百,几千人访问
VM 虚拟机 2	2c	4G	对外优惠券,会员卡等业务	比如你搞一个活动,流量大直接500都很正常 他只能分配一部分资源,当你的虚机程度达到一定
VM 虚拟机 3	4C 8G 	(RDS) 核心数据库业务
一下三套应用就出来了,但是,你要知道他的缺点
1.他每一个机器都是完整的操作系统 这套系统也是很吃资源的 大量损耗硬盘资源
2.虚机可分配的资源是有限的 
例如上一篇,超哥讲解的 KVM, 你所创建的资源,也都会消耗宿主机的资源,而且也都太重了。
创建一个虚拟机去运行程序,费劲
例如咱们前面所学的 web 集群部署,9台机器节点,9个虚拟机吗?费劲
physical server (dell r740 物理机)->host operating system(esxi系统 企业级的虚拟化)->hypervisor(虚拟化程序  需要cpu支持)


vmware企业级虚拟化架构
1.准备物理机(服务器)
2.安装vmware vsphere程序	vmware workstation 模式


笔记本->windows操作系统->BIOS开启虚拟化->安装 vmare workstation 程序	提供了虚拟化程序   
虚机1	虚机2 虚机3 每一个虚机就是 一个完整的OS系统 比如 ISO安装centos ubuntu 还有安装macos系统
三个虚机就可以分别跑 LNMP1	LNMP2	LNMP3等业务

vmware企业级虚拟化架构解决了物理机问题

1.环境隔离问题	LNMP1  依赖1-1.1	LNMP2  依赖1-1.2	LNMP1  依赖3-1.5 解决依赖版本冲突问题
2.应用迁移	可以把虚机1 整个克隆一遍 可以实现快速迁移 也可以把虚机1当作模板导出 然后基于模板,你可以很快创建出很多个 LNMP 这样的环境
3.省钱,基于一个物理机,可以跑很多APP(节点),可以最大化利用 资源
容器 docker 技术以及名称空间三大块
容器可以解决什么问题?宿主机冲突,应用部署冲突 解决
学习容器的本质,以及知道企业都是如何使用 docker 容器架构
容器可以解决什么问题?
宿主机冲突,应用部署冲突
一些程序,死命开启进程,导致服务器进程用光,服务器卡死,崩溃,宿主机进程,共用同一个进程空间。
如何对宿主机,资源最大化利用、
房间,资源最大化利用
空间最大化利用	资源隔离,环境隔离


# 没有用容器的情况
这是一个机器,虚拟机,物理机都可以(安装一个centos系统 没有容器的情况)
1.LNMP1(这是第一套应用  没有问题)	10。0.0.200(网卡1)
端口:80	443	  6379	3306
作为客户端该如何访问这台机器的应用	ip+port	就可以了

2.LNMP2 (再来一套应用  再用 IP+PORT 就无法访问 LNMP2 这个应用) 10.0.0.177(网卡2)
端口:180	1443	16379	13306
作为客户端要访问 LNMP2 只能修改端口号或者。。。才能访问LNMP2这个应用

# 网络空间概念
修改端口号来达到访问的目的,即 ip port等访问  这是网络资源  网络空间	ip+port等
所有宿主机上,使用宿主机的网络空间信息
端口号:0-65535
可以在一个机器加多个网卡 可以对应用程序单独绑定ip(网卡),基于 nginx 转发,匹配就可以实现业务访问
nginx  基于ip+port实现业务定位


# 进程空间概念
每一个端口都会对应一个 pid   每个端口对应不同的 pid		这叫进程资源	进程空间	如 pid 号等
可分配的 pid 号也是有限的  如果你跑了n个进程,把 pid 号分配用光了,你以后就没有办法在创建进程
比如一些垃圾程序死命开进程,导致服务器进程号用光,服务器卡死,崩溃	宿主机的进程 公用同一个进程空间

# 文件系统空间概念
文件系统冲突 分析理解如下	
所有资源都共用一个 centos 的磁盘,挂载目录,文件路径   绝对路径的资源是不可以重复的
比如 LNMP1
nginx-1.17  二进制文件的绝对路径 	/usr/local/sbin/nginx
python-3.9						/usr/local/sbin/python3.9

LNMP2  开发要求 必须是如上的路径(/usr/local/sbin/nginx)

python-3.6					/usr/local/sbin/python-3.6

LNMP1与LNMP2在同一个机器里面要有两套不同版本的Python,这个肯定是不允许的,会发生文件冲突的问题
这两个应用的python是两个不同版本的二进制文件,这两个二进制文件不可以放在同一个绝对路径下


总结:
应用部署关注的三个重点就是:
linux 的三个名词是	
进程空间:就是 linux 内核分配的可用的 pid 号码范围
网络空间: 就是 有网络接口,网卡,端口等
文件系统空间:就是 /opt/,/usr/./home 等路径

以前是如何解决上面三个问题	虚拟机 
虚拟机1  是一个完整的系统
虚拟机2  是一个完整的系统 

完整的系统:系统 ->iso镜像文件
1.系统发行版 如centos		
2.内核 你是选的 linux 内核,windows内核,macOS内核


要解决部署问题,就是要提供独立的进程空间,网络空间,文件系统空间。 
为的是每个应用都有  独立的进程空间,网络空间,文件系统空间
这样就实现了一个完完全全的资源隔离,有一个名字: namespace 即实现进程隔离,网络隔离,文件系统隔离

资源隔离就是指实现了 namespace 隔离 每一个机器都有自己的 pid  port 以及 filesystem 这样就可以实现运行更多独立的应用。且相互不冲突。

资源依赖冲突
系统内置(系统自带python2.7把它干掉吗?或者改掉吗?不能 你如改了,python有大量的调用 如何实现不动宿主机系统内置的软件呢?)
/usr/bin/python2.7

业务:
AI机器学习的业务
给公司部署一个  
/usr/bin/python2.9


实现基于 namespace 的资源隔离
搭建一个容器,
他就实现了4的独立的 namespace
独立的端口号	0-65535
pid 号
文件系统

容器1
4的独立的 namespace
可用独立的端口号	0-65535
pid 号
文件系统 /usr/bin/python2.9

容器2
4的独立的 namespace
可用独立的端口号	0-65535
pid 号
文件系统 /usr/bin/python2.6.4

容器3
4的独立的 namespace
可用独立的端口号	0-65535
pid 号
文件系统 /usr/bin/python2.7.5

容器4
4的独立的 namespace
可用独立的端口号	0-65535
pid 号
文件系统 /usr/bin/python2.9.10

容器最大优势之一
非常轻量级实现了虚拟机一样的
环境隔离,
独立的名称空间 namespace


关于虚拟机和容器技术基于名称空间实现的资源隔离好处:
虚拟机的弊端是太重量级了
一个虚拟机安装最少要占用 20GB 磁盘空间 如果你要部署50个虚拟机,你最少要损耗 1000GB 的资源 
创建一个虚拟机最少要5分钟

容器你可以创建 2000个 也占用不了多少空间  
创建容器只需要 1 秒钟 

名称空间三大块: 进程,网络,文件系统	能实现资源隔离

 以上就是

物理机部署时代 V1 很重量级

虚拟机部署架构时代 V2 很重量级

容器技术部署架构时代 V3 轻量级

的演进

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值