虚拟化和容器化

目录

一. 虚拟化和容器化的概念

什么是虚拟化、容器化

案例

为什么要虚拟化、容器化?

二. 虚拟化实现方式 

应用程序执行环境分层

虚拟化常见类别

虚拟机

容器

JVM 之类的虚拟机

三. 常见虚拟化实现

主机虚拟化(虚拟机)实现

容器虚拟化实现

容器虚拟化实现原理

容器虚拟化基础之 NameSpace

容器虚拟化基础之 cgroups


一. 虚拟化和容器化的概念

物理机:际的服务器或者计算机。相对于虚拟机而言的对实体计算机的称呼。物理 机提供给虚拟机以硬件环境,有时也称为寄主宿

虚拟化是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机。在一台计算机上 同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都 可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。

容器化容器化是一种虚拟化技术,又称操作系统层虚拟化( Operating system level virtualization),这种将操作系统内核虚拟化,可以允许用户空间软件实例(instances)被分割成几个独立的单元,在内核中运行,而不是只有一个单一实例运 行。这个软件实例,也被称为是一个容器(containers)。对每的拥有者与用户 来 说 ,他 们使 用的 服务 器 程 序, 看起 来就 像是 自 己 专 用 的。 容器 技术 是 虚 拟 化 的一 种。 docker 是现今容器技术的事实标准。

案例

举个生活中的例子。

物理机, 就像一个庄园,独立占用了一块土地,花园都是自己的,其他人无法共享使用。

虚拟机当于开发商的一个楼盘,一栋楼一套房子一户人家,共享一块宅基地,共享小区的花园,共享小区的游乐设施。

容器1 个房子里面,开辟出来一个又一个的胶囊公寓,共享这套房子的卫生间、共享厨房、共享 WiFi,只有衣服、电脑等私人物品是你自己的。

器化

我们从上面的历史发展来看,虚拟化和容器化的最主要目的就是资源隔离随着资源隔离的实现逐渐也带来了更大的收益。

• 资源利用率高

将利用率较低的服务器资源进行整合,用更少硬件资源运行更多业务,降低 IT 支出和运维管理成本。

比如土地可以直接复用,使庄园

• 环境标准化

一次构建,随处执行。实现执行环境的标准化发布,部署和运维。开发过程中一个常见的问题是环境一致性问题。由于开发环境、测试环境、生产环境不一致,导致有些 bug 并未在开发过程中被 发现。而 Docker 的镜 像提供了除内核外完整的运行时环境,确保了应用运行环境一致性,从而不会再出现 这段代在我器上题啊 这类问题。

• 资源弹性伸缩

根据业务情况,动态调整计算、存储、网络等硬件及软件资源。比如 遇到双 11 了,把 服务扩容 100 个,双 11 去了, 把扩容的 100 个收回去。

• 差异化环境提供

同时提供多套差异化的执行环境,限制环境使用资源。

比如我的服务一个以来 Ubuntu 作系统,一个服务依赖 CentOS 但是没有预算购买两个物理机,这个时候容器化就能很好的提供多种不同的环境。

• 沙箱安全

 为避免不安全或不稳定软件对系统安全性、稳定性造成影响,可使用虚拟化技术构建虚拟执行环境。

比如我在容器里面执行 rm -rf /* 不会把整个服务器搞死,也不影响其他人部署的程序使用。

• 容器对比虚拟机更轻量,启动更快

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

docker 不需要虚拟内核,所以启动可以更快,相当 windows 的开机时间省去

• 维护和扩展容易

Docker 使用的分层存储以 及镜像的技术,使得应用重复部分的复用更为容易,也使得 应用的维护更新更加简单,基于基础镜像进一步扩展镜像也变得非常简单。此外, Docker 团队同各个开源项 目团队一起维护了一大批高质量的 官方镜像,既可以直接 在生产环境使用,又可以作为基础进一步定制,大大的降低了应用服务的镜像制作成 本。比如 docker hub 了很多镜像,各个系统的一个命令就可以拿到了,研发也可 以自己定制镜像分享给各个产品。

二. 虚式 

应用程序执行环境分层

硬件层:提供硬件抽象,包括指令集架构、硬件设备及硬件访问接口

操作系统层 :提供系统调用接口,管理硬件资源

程序库层:提供数据结构定义及函数调用接口

虚拟化常见类别

虚拟机

存在于硬件层和操作系统层间的虚拟化技术。虚拟机通过个硬件抽象接口 将一个操作系统以及操作系统层以上的层嫁接到硬件上,实现和真实物理机几乎一样 的功能。比如我们在一台 Windows 统的电脑上使用 Android 虚拟机,就能够用这台 电脑打开 Android 统上的应用。

容器

存在于操作系统层和函数库层之间的虚拟化技术。容器通过作系统的接口 将函数库层以上的功能置于操作系统上。以 Docker 例,其就是一个基于 Linux 操作 系统的 Namespace Cgroup 能实现的隔离容器,可以模拟操作系统的功能。简单 来说,如果虚拟机是把整个操作系统封装隔离,从而实现跨平台应用的话,那么容器 则是把一个个应用单独封装隔离,从而实现跨平台应用。所以容器体积比虚拟机小很多,理论上占用资源更少。容器化就是应用程序级别的虚拟化技术。容器提供了将应 用程序的代码、运行时、系统工具、系统库和配置打包到一个实例中的标准方法。容 器共享一个内核(操作系统),它安装在硬件上。

JVM 之类的虚拟机

存在于函数库层和应用程序之间的虚拟化技术。Java 虚拟机同样具有跨平台特性,所 谓跨平台特性实际上也就是虚拟化的功劳。我们知道 Java 调用操作系统函数库 的,JVM 就是在应用层与函数库层之间建立一个抽象层,对下通过不同的版本适应不 同的操作系统函数库,对上提供统一的运行环境交给程序和开发者,使开发者能够调 用不同操作系统的函数库。

三. 常见虚拟化实现

主机虚拟化(虚拟机)

主机虚拟化的原理是通过在物理服务器上安装一个虚拟化层来实现。这个虚拟化层可 以在物理服务器和客户操作系统之间建立虚拟机,使得它们可以独立运行。

从软件框架的角度上,根据虚拟化层是直接位于硬件之上还是在一个宿主操作系统之 上,将虚拟化划分为 Type1 Type2.

Type1 Hypervisor(Hypervisor 种系统软件,它充当计算机硬件和虚拟机之间 的中介,负责有效地分配和利用由各个虚拟机使用的硬件资源,这些虚拟机在物理主 机上单独工作,因此,Hypervisor 称为虚拟机管理器。)直接运行在硬件之上,没有 宿主机操作系统,Hypervisor 接控制硬件资源和客户机。典型框架为 XenVmware ESX

Type2类的 Hypervisor 行在一个宿主机操作系统之上( Vmware Workstation 者 系统里面 ,Hypervisor 作为宿主机操作系统中的一个应用程序,客户机就是在宿主机操 作系统上的一个进程。

容器虚拟化实现

容器虚拟化实现原理

容器虚拟化,有别于主机虚拟化,是操作系统层的虚拟化。通过 namespace 行各程 序的隔离,加上 cgroups 进行资源的控制,以此来进行虚拟化。

容器虚拟化基础之 NameSpace

什么是 Namespace(命名空间)

namespace Linux 用来隔离内核资源的方式。通过 namespace 让一些进 程只能看到与自己相关的一部分资源,而另外一些进程也只能看到与它们自己相关的 资源,这两拨进程根本就感觉不到对方的存在。具体的实现方式是把 一个或多个进程 的相关资源指定在同一个 namespace

Linux n amespaces 局系统资源的一种封装隔离,使得处于不同 namespace 的 进程拥有独立的全局系统资源,改变一个 namespace 中的系统资源只会影响当前 namespace 进程,对其他 namespace 进程没有影响。

Linux 提供了多个 API 来操作 namespace,它们是 clone()setns() unshare() 函 数,为了确定隔离的到底是哪项 namespace使用这些 API 时,通常需要指定一些 调用参数:CLONE_NEWIPCCLONE_NEWNETCLONE_NEWNSCLONE_NEWPIDCLONE_NEWUSERCLONE_NEWUTS CLONE_NEWCGROUP。如果要同时隔离多个 namespace可以使用 | (位或)合 这些参数。

举个例子

三年一班的小明和三年二班的小明,虽说他们名字是一样的,但是所在班级不一样, 那么,在全年级排行榜上面,即使出现两个名字一样的小明,也会通过各自的学号来 区 分 。对 于学 校来 说, 每 个 班级 就相 当于 是 一 个 命 名 空 间, 这个 空间 的 名 称是 班级 号。 班级号用于描述逻辑上的学生分组信息,至于什么学生分配到 1 ,什么学生分配到 2 班,那就由学校层面来统一调度。

namesp

ace

系统调用参数

被隔离的全局系统资源

引入内

核版本

UTS

CLONE_NEWUTS

主机名和域名

2.6.19

IPC

CLONE_NEWIPC

信号量、消息队列和共享内存 - - 程间通信

2.6.19

PID

CLONE_NEWPID

进程编号

2.6.24

Network

CLONE_NEWNET

网络设备、网络栈、端口等

2.6.29

Mount

CLONE_NEWNS

文件系统挂载点

2.4.19

以上命名空间在容器环境下的隔离效果:

UTS每个容器能看到自己的 hostname拥有独立的主机名和域名。

IPC:同一个 IPC namespace 的进程之间能互相通讯,不同的 IPC namespace 之间 不能通信。

PID:每个 PID namespace 中的进程可以有其独立的 PID每个容器可以有其 PID 为1 的 root 进程

Network个容器用有其独立的网络设备,IP 地址,IP 路由表,/proc/net 目录,端口号。

Mount每个容器能看到不同的文件系统层次结构。

User container 可以有不同的 user group id

想想以下如果我们要隔离两个进程需要怎么办?

  1. 首先容器进程与进程之间需要隔离,所以需要 PID
  2. 首先容器 A 能读取容器 B 进程通讯内容需要隔离信号量等,所以需要 IPC 隔离
  3. 首先容器 A 能读取容器 B 进程的文件,所以需要 Mount 隔离
  4. 首先容器 A 能读取容器 B 进程的 socket以需要网络隔离、主机隔离
  5. Docker 允 许 用 户 在 主 机和 容 器 间 共享 文 件 夹 , 同 时 不 需 要限制 容 器 的 访 问 权 限 ,这就容易让容器突破资源限制。需要借助用户空间来完成用户之间的隔离。

容器虚拟化基础之 cgroups

1. 什么是 cgroups

cgroups(Control Groups) linux 内核提供的一种机制,这种机制可以根据需求把一 系列系统任务及其子任务整合()资源划分等级的不同组内,从而为系统资源 管理提供一个统一的框架。单说,cgroups 可以限制、记录任务组所使用的物理资 源。本质上来说,cgroups 是内核附加在程序上的一系列钩子(hook),通过程序运行时 对资源的调度触发相应的钩子以达到资源追踪和限制的目的。

2. 为什么使用 cgroups

其可以做到对 cpu等资源实现精细化的控制,目前越来越火的轻量级容器Docker 及 k8s 中的 pod 使用了 cgroups 提供的资源限制能力来完成 cpu,内存等部 分的资源控制。

比如在一个既部署了前端 web 务,也部署了后端计算模块的八核服务器上,可以使 用 cgroups web server 仅可以使用其中的六个核,把剩下的两个核留给后端计算 模块。

3. cgroups

Resource limitation: 制资源使用,例:内存使用上限/cpu 使用限制

Prioritization: 制,例:CPU 利用/ IO

Accounting: 些审计或一些统计

Control: 进程/恢复执行进程

4. cgroups 的子系统

blkio

对块设备的 IO 行限制。

cpu

限制 CPU 间片的分配

cpuacct

生成 cgroup 的任务占用 CPU 资源的报告,与 cpu 挂载在同 一目录。

cpuset

cgroup 的任务分配独立的 CPU(处理器系统) 和内存节 点。

devices

限制设备文件的创建,和对设备文件的读写

freezer

暂停/恢复 cgroup 务。

                     

memory

cgroup 的任务的可用内存进行限制,并自动生成资源占用 报告。

perf_event

允许 perf 观测 cgroup task

net_cls

cgroup 中的任务创建的数据报文的类别标识符,这让 Linux

控制器(tc 指令)可以识别来自特定 cgroup 数据包,并 进行网络限制。

hugetlb

限制使用的内存页数量。

容器虚拟化基础之 LXC

LXC 是什么?

LXCLinuX ContainersLinux 容器,一种操作系统层虚拟化技术,为 Linux 核容 器功能的一个用户空间接口。它将应用软件系统打包成一个软件容器(Container), 内含应用软件本身的代码,以及所需要的操作系统核心和库。透过统一的名字空间和 共 享 API 来分配 不同软件容 器的可用硬件 资源,创造 出应用程序的 独立沙箱运 行环境, 使得 Linux 用户可以容易的创建和管理系统或应用容器。

LXC 最早一批真正把完整的容器技术用一组简易使用的工具和模板来极大的简化了 容器技术使用的一个方案

LXC 然极大的简化了容器技术的使用,但比起直接通过内核调用来使用容器技术, 其复杂程度其实并没有多大降低,因为我们必须要学会 LXC 一组命令工具,且由于 内核的创建都是通过命令来实现的,通过批量命令实现数据迁移并不容易。其隔离性 也没有虚拟机那么强大。

后来就出现了 docker,所以从一定程度上来说,docker 就是 LXC 的增强版。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

kafka的位移

文章目录 概要消费位移__consumer_offsets主题位移提交 概要 本文主要总结kafka的位移是如何管理的,在broker端如何通过命令行查看到位移信息,并从代码层面总结了位移的提交方式。 消费位移 对于 Kafka 中的分区而言,它的每条消息都有唯一…

【科研论文配图绘制】task1 掌握科研绘图的基本知识

【科研论文配图绘制】task1 掌握科研绘图的基本知识 写在最前 8月份Datawhale组队学习,写下该博客记录学习内容 1.科研论文配图的分类与构成 2.科研论文配图的格式和尺寸 3.科研论文配图中的字体和字号设置 4.科研论文配图的版式设计、结构布局和颜色搭配 占个…

Postman接口自动化测试实战,从0到1一篇彻底打通...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 postman中的测试 …

6.2.0在线编辑:GrapeCity Documents for Word (GcWord) Crack

GrapeCity Word 文档 (GcWord) 支持 Office Math 函数以及转换为 MathML GcWord 现在支持在 Word 文档中创建和编辑 Office Math 内容。GcWord 中的 OMath 支持包括完整的 API,可处理科学、数学和通用 Word 文档中广泛使用的数学符号、公式和方程。以下是通过 OMa…

2022年3月全国计算机等级考试真题(二级C语言)

2022年3月全国计算机等级考试真题(二级C语言) 第1题 下列有关栈论述正确的是( ) A. 栈顶元素最先能被删除 B. 栈顶元素最后才被删除 C. 栈底元素永远不能被删除 D. 以上三种说法都不对 正确答案:A 得 0 / 1 分 第2题…

【C# 基础精讲】异常的类型和处理方法

异常(Exception)是在程序执行过程中发生的意外或异常情况,例如除零错误、空引用访问、文件不存在等。在C#及其他编程语言中,异常处理是一种重要的机制,用于捕获和处理程序运行时可能出现的错误,以保证程序的…

考研 408 | 【计算机网络】 应用层

导图 网络应用模型 客户/服务器(c/s)模型 P2P模型 DNS 域名 域名服务器 域名解析过程 文件传输协议FTP FTP服务器和用户端 FTP工作原理 电子邮件 电子邮件的信息格式 组成结构 邮件服务器的功能: 1.发送&接收邮件 2.给发件人报告邮…

vue基础知识三:v-show和v-if有什么区别?使用场景分别是什么?

一、v-show与v-if的共同点 我们都知道在 vue 中 v-show 与 v-if 的作用效果是相同的(不含v-else)&#xff0c;都能控制元素在页面是否显示 在用法上也是相同的 <Model v-show"isShow" /> <Model v-if"isShow" />当表达式为true的时候&#…

数据结构--最短路径 Floyd算法

数据结构–最短路径 Floyd算法 F l o y d 算法&#xff1a;求出每⼀对顶点之间的最短路径 \color{red}Floyd算法&#xff1a;求出每⼀对顶点之间的最短路径 Floyd算法&#xff1a;求出每⼀对顶点之间的最短路径 使⽤动态规划思想&#xff0c;将问题的求解分为多个阶段 对于n个顶…

视频汇聚平台EasyCVR视频监控播放平台WebRTC流地址无法播放的问题解决方案

开源EasyDarwin视频监控TSINGSEE青犀视频平台EasyCVR能在复杂的网络环境中&#xff0c;将分散的各类视频资源进行统一汇聚、整合、集中管理&#xff0c;在视频监控播放上&#xff0c;TSINGSEE青犀视频安防监控汇聚平台可支持1、4、9、16个画面窗口播放&#xff0c;可同时播放多…

NRF24L01+数据手册_关于几种工作模式

使用的是官方数据手册的章节编号&#xff0c;原文截图方便对照&#xff0c;部分翻译&#xff08;标蓝&#xff09;、个人理解&#xff08;标紫&#xff09;&#xff0c;关键信息&#xff08;标红&#xff09;。 6.1 Operational Modes操作模式 6.1.1 State diagram状态机图 6…

Android Socket使用TCP协议实现手机投屏

本节主要通过实战来了解Socket在TCP/IP协议中充当的是一个什么角色&#xff0c;有什么作用。通过Socket使用TCP协议实现局域网内手机A充当服务端&#xff0c;手机B充当客户端&#xff0c;手机B连接手机A&#xff0c;手机A获取屏幕数据转化为Bitmap&#xff0c;通过Socket传递个…

校园外卖小程序怎么做

校园外卖小程序是为满足校园内学生和教职员工的外卖需求而开发的一种应用程序。它涵盖了从用户端、商家端、骑手端、电脑管理员到小票打印、多商户入驻等多个方面的功能&#xff0c;以下将逐一介绍。 1. 用户端功能&#xff1a;校园外卖小程序为用户提供了便捷的订餐和外卖服务…

21.0 CSS 介绍

1. CSS层叠样式表 1.1 CSS简介 CSS(层叠样式表): 是一种用于描述网页上元素外观和布局的样式标记语言. 它可以与HTML结合使用, 通过为HTML元素添加样式来改变其外观. CSS使用选择器来选择需要应用样式的元素, 并使用属性-值对来定义这些样式.1.2 CSS版本 CSS有多个版本, 每个…

《测试设计思想》——图书推荐

前言&#xff1a; 在当今软件行业飞速发展的时代&#xff0c;软件测试的重要性日益凸显。为了帮助读者提高测试效率和测试质量&#xff0c;清华大学出版社推出了一本名为《测试设计思想》的书籍&#xff0c;由知名专家周海旭老师撰写。这本书深入探讨了测试设计的思想和方法&am…

easyx图形库基础:3实现弹球小游戏

实现弹球小游戏 一.实现弹球小游戏:1.初始化布&#xff1a;2.初始化一个球的信息&#xff1a;3.球的移动和碰撞反弹4.底边挡板的绘制和移动碰撞重置数据。 二.整体代码&#xff1a; 一.实现弹球小游戏: 1.初始化布&#xff1a; int main() {initgraph(800, 600);setorigin(40…

P16 电路定理——巧妙-灵性-智慧

1、诺顿定理的证明 诺顿定理的证明&#xff0c; 回忆戴维南定理的证明是&#xff0c;在a,b两端加上一个电流源&#xff0c;再根据叠加定理&#xff0c;就解电压Uab。 对偶原理&#xff1a; 在a,b两端加上一个电压源u&#xff0c;再根据叠加定理求A中的独立源作用是给到a&#x…

【爬虫】P1 对目标网站的背景调研(robot.txt,advanced_search,builtwith,whois)

对目标网站的背景调研 检查 robot.txt估算网站大小识别网站所用技术寻找网站的所有者 检查 robot.txt 目的&#xff1a; 大多数的网站都会包含 robot.txt 文件。该文件用于指出使用爬虫爬取网站时有哪些限制。而我们通过读 robot.txt 文件&#xff0c;亦可以最小化爬虫被封禁的…

观察者模式实战

场景 假设创建订单后需要发短信、发邮件等其它的操作&#xff0c;放在业务逻辑会使代码非常臃肿&#xff0c;可以使用观察者模式优化代码 代码实现 自定义一个事件 发送邮件 发送短信 最后再创建订单的业务逻辑进行监听&#xff0c;创建订单 假设后面还需要做其它的…

循环内的try-catch 跟循环外的try-catch有什么不一样

起因&#xff1a;一位面试管突然问了这么一道基础的面试题&#xff0c;反而秀了面试者一脸&#xff0c;经常用的却被问到时不知道怎么回答&#xff0c;所以我们平时在写代码的时候&#xff0c;要多注意细节跟原理。也许你不服&#xff1a;不就是先这样&#xff0c;再那样&#…