Linux虚拟化与容器化
随着云计算的不断发展,计算资源不断集中于大规模的服务器集群上。为了充分发挥硬件潜力,提高服务器性能,虚拟化技术由此诞生。
所谓虚拟化技术,是指将计算元件和硬件隔离开来,隐藏底层的硬件物理特性,为用户提供抽象、统一的模拟计算环境,从而可以适应庞大的硬件资源而不至于浪费性能。如Intel-VT和AMD-V技术可以单CPU模拟多CPU运行,允许同一平台同时运行多个操作系统,且应用程序和服务在相互独立的空间内运行而不影响,从而尽可能的压榨硬件性能并提高工作效率。
虚拟化级别可分为:硬件抽象层、指令集层、操作系统层、基础运行库层、应用程序层。
指令集层:使用类似代码解释的方法实现不同平台计算资源的通用,但是效率极低,如Bochs,可以实现Unix like系统中模拟X86平台(指令集、I/O、内存、BIOS等等),例如在Android上运行Windows。
硬件抽象层:将底层硬件虚拟化,如VMware ESXi,Windows Hyper-V,Xen,Linux KVM等,可以使同一硬件平台上运行多个不同的操作系统;又可分为全虚拟化和半虚拟化(下文详解)。目前I/O和内存的虚拟化较为成熟,CPU方面由于指令集在设计时未考虑到特权指令(hypervisor)和非特权指令(用户)区分的原因(主要是X86)会造成性能下降,因此开发出了Intel-VT等CPU虚拟化技术(硬件辅助虚拟化),但是性能仍然会受到影响。
操作系统层:在操作系统层面为多个用户或应用创建不同的容器或实例,分别拥有自己的进程、文件系统、IP、用户、命名空间等,但是仍然共享一个操作系统。例如Docker一类的容器和各种VPS、VE。相对硬件虚拟化,操作系统层级的虚拟化解决了:物理机器和虚拟机实例数可以动态改变;初始化虚拟机几乎不消耗时间;几乎没有硬件性能损失,不需要额外资源开销等问题。但是只能使用Linux系统,在资源隔离级别和资源管理上较为简单。非常适合云计算环境。
运行库层:由于大部分应用调用的是用户级别的API而不是系统级别,因此可以通过API钩子控制应用程序和其他系统部分之间的连接;例如使用WINE在Unix like系统上运行Win32程序。
应用程序层:将应用程序虚拟化为一个虚拟机,如早期的JVM(现在的JVM加入了即时编译功能)。
现在国内的云计算服务主要采用的是KVM(腾讯云)和Xen(阿里云,正在向KVM迁移),主要是由于VMware和Windows Hyper-V是收费的并且不开源。于此同时,以Docker为代表的操作系统级别的虚拟化也火热了起来。
容器与Docker
顾名思义,容器就是装东西用的,比如我们都学过C++ STL的基本容器类型,在操作系统级别,容器就是操作系统为不同的用户或进程分配的具有一定相互独立空间(包括内存分页空间、CPU时钟分配、硬盘空间、进程空间、运行库等、IP地址)。Docker就是容器的一种,在早期版本使用的是Linux自带的LXC(Linux Container),现在使用的是libcontainer来实现。
使用Docker的时候,不同的容器可以部署不同的开发环境,运行不同的应用;由于开发环境和操作系统分离,Docker的可移植性非常高(Docker的宣传口号是 Build ,Ship ,and Run Any App ,Anywhere),在不同的服务器之间转移非常便捷。同时,官方和开发者也共同构建出了一个巨大的模板镜像库(被墙了,需要使用加速器访问),足够满足很多naive的需求。
进行虚拟化时,很重要的一部分工作就是计算资源的分配和不同虚拟机/容器之间的通讯,在创建Docker镜像时,不仅可以显示地为每个镜像分配资源,同时还会根据分配的比例不同确定各自的权重,从而可以在系统负荷高的时候保证权重高的镜像不会被权重低的镜像阻塞,在负荷低的时候,权重低的镜像也能得到足够的资源应对突发的压力。弹性的分配机制保证了硬件的最大利用效率。
管理虚拟机
1、虚拟机的管理命令
virt-viewer 虚拟机名称 ##显示虚拟机
virsh start 虚拟机名称 ##开启指定虚拟机
virsh list ##显示正在运行的虚拟机
virsh list --all ##显示所有虚拟机
virsh shutdown 虚拟机名称 ##正常关闭指定虚拟机
virsh destroy 虚拟机名称 ##强制关闭指定虚拟机
virsh define 虚拟机 ##恢复虚拟机
virsh undefine 虚拟机 ##删除虚拟机的配置(硬件信息文件)
virsh create 虚拟机.xml ##利用虚拟机硬件信息文件打开虚拟机,只是一次性的
2、虚拟机拷贝
虚拟机是由两部分组成:硬件信息文件和硬盘文件
/etc/libvirt/qemu/虚拟机.xml ##虚拟机硬件信息文件
/var/lib/libvirt/images/虚拟机.qcow2 ##虚拟机硬盘文件
实例:将虚拟机westos从一台虚拟机拷贝到另一台虚拟机,其中/mnt充当U盘
[root@foundation16 ~]# cd /etc/libvirt/qemu/
[root@foundation16 qemu]# ls
desktop.xml networks server.xml westos.xml ##此处存在westos.xml文件,虚拟机westos的前端文件
[root@foundation16 qemu]# cp westos.xml /mnt/ ##将westos.xml硬件信息文件拷贝到/mnt/
[root@foundation16 qemu]# cd /var/lib/libvirt/images/
[root@foundation16 images]# ls
generic-1.qcow2 rh124-desktop-vdb.qcow2 rh124-server-vdb.qcow2
generic.qcow2 rh124-desktop.xml rh124-server.xml
rh124-desktop-vda.ovl rh124-server-vda.ovl westos.qcow2 ##找到虚拟机硬盘westos.qcow2
rh124-desktop-vda.qcow2 rh124-server-vda.qcow2
rh124-desktop-vdb.ovl rh124-server-vdb.ovl
[root@foundation16 images]# mv westos.qcow2 /mnt/ ##将硬盘westos.qcow2 拷贝到/mnt/中
[root@foundation16 images]# cd /mnt/ ## 模拟虚拟机拷贝
[root@foundation16 mnt]# ls
westos.qcow2 westos.xml ##此时/mnt/文件中存在已拷贝的westos.xml和westos.qcow2
[root@foundation16 mnt]# virsh create westos.xml ##执行此命令前,先删除虚拟机,方便模拟虚拟机拷贝
error: Failed to create domain from westos.xml
error: Cannot access storage file '/var/lib/libvirt/images/westos.qcow2' (as uid:107, gid:107): No such file or directory
[root@foundation16 mnt]# mv /mnt/westos.qcow2 /var/lib/libvirt/images/
#不存在 '/var/lib/libvirt/images/westos.qcow2',将文件添加到路径中
[root@foundation16 mnt]# virsh create westos.xml ##将虚拟机删除,重新创建
Domain westos created from westos.xml
[root@foundation16 mnt]# virsh define westos.xml ##永久创建
Domain westos defined from westos.xml
3、虚拟机快照
虚拟机的快照只是一个存储更改信息的文件,在虚拟机被读取时还是读取母盘中的内容。
在虚拟机管理工具中,把"快照.qcow.2"import导入到新的虚拟机中即可使用。
1> 虚拟机快照命令
qemu-img create -f qcow2 -b 母盘.qcow2 快照.qcow2
1
实例:快照虚拟机建立步骤
https://blog.csdn.net/helloworlddm/article/details/76785388 虚拟化技术的历史
Linux虚拟化与容器化的更多相关文章
- Docker---大型项目容器化改造
虚拟化和容器化是项目云化不可避免的两个问题.虚拟化由于是纯平台操作,一个运行于linux操作系统的项目几乎不需要做任何改造就可以支持虚拟化.而项目如果要支持容器化则需要做许多细致的改造工 ...
- aspnetcore 容器化部属到阿里云全过程记录
第一次写博客,作为一个全栈er,记录一下从阿里云到产品运维上线的全过程 一.阿里云上的设置 购买阿里云ECS后: 进控制台查看实例公网IP 在控制台.网络与安全->安全组,配置规则 点击进去可以 ...
- 2019 DevOps 必备面试题——容器化和虚拟化
原文地址:https://medium.com/edureka/devops-interview-questions-e91a4e6ecbf3 原文作者:Saurabh Kulshrestha 翻译君 ...
- <Mastering KVM Virtualization>:第一章 了解Linux虚拟化
本章为读者提供了Linux虚拟化中流行技术的深刻见解,以及相较于其他同类技术的优势特点.本书共有14章,囊括了KVM虚拟化中的各个方面,从KVM的内部构造开始,并包括了诸如软件定义网络(SDN),性能 ...
- .NET Core容器化@Docker
温馨提示:本文适合动手演练,效果更佳. 1. 引言 我们知道. NET Core最大的特性之一就是跨平台,而对于跨平台,似乎大家印象中就是可以在非Windows系统上部署运行.而至于如何操作,可能就 ...
- 容器化-Docker介绍
导读:本文章对Docker技术进行了介绍,阐述了Docker的技术发展历程.容器与虚拟机的差异.Docker原理.特点.Docker三组件和Docker带来的影响,为我们进一步理解Docker打下基础 ...
- Coding-Job:从研发到生产的容器化融合实践
大家好,我是来自 CODING 的全栈开发工程师,我有幸在 CODING 参与了 Coding-Job 这个容器化的编排平台的研发.大家对 CODING 可能比较了解, Coding.net 是一个一 ...
- .NETCore 实现容器化Docker与私有镜像仓库管理
原文:.NETCore 实现容器化Docker与私有镜像仓库管理 一.Docker介绍 Docker是用Go语言编写基于Linux操作系统的一些特性开发的,其提供了操作系统级别的抽象,是一种容器管理技 ...
- .NETCore Docker实现容器化与私有镜像仓库管理
一.Docker介绍 Docker是用Go语言编写基于Linux操作系统的一些特性开发的,其提供了操作系统级别的抽象,是一种容器管理技术,它隔离了应用程序对基础架构(操作系统等)的依赖.相较于虚拟机而 ...
随机推荐
- 可能是东半球最好的 Curl 学习指南,强烈建议收藏!
本文首发于:微信公众号「运维之美」,公众号 ID:Hi-Linux. 「运维之美」是一个有情怀.有态度,专注于 Linux 运维相关技术文章分享的公众号.公众号致力于为广大运维工作者分享各类技术文章和 ...
- Linux的desktop文件正常编写赋权,仍无法打开解决办法
Linux的desktop文件正常编写赋权,仍无法打开解决办法 如果你像我一样遇到了这个问题, 明明都没有问题, desktop文件不显示图标, 双击打开是文本编辑器, 同时也有执行权限 打开却是这样 ...
- STM32 LoRaWAN探索板B-L072Z-LRWAN1中文用户手册
UM2115用户手册 支持LoRaWAN和 LPWAN协议的STM32L0探索套件 前言 B-L072Z-LRWAN1探索套件采用了 Murata公司的CMWX1ZZABZ-091 LoRa模块.该探 ...
- ngtos 天融信
NGFW系列产品基于天融信公司10年高品质安全产品开发经验结晶的NGTOS系统架构,采用了多项突破性技术.基于分层的设计思想,天融信公司通过长期的安全产品研发经验,分析多种安全硬件平台技术的差异,创造 ...
- subprocess模块笔记
subprocess笔记 import subprocess subprocess.call("netstat -ano") #父进程等待子进程完成任务,返回执行结果和结束信息0或 ...
- 2019-2020-1 20199301《Linux内核原理与分析》第三周作业
操作系统是如何工作的 本章目标是在mykernel的基础上编写一个简单的内核 一.学习笔记 1.计算机的三个法宝:a.存储程序计算机:b.函数调用堆栈:c.中断 存储程序计算机(所有计算机的基础性的逻 ...
- Codeforces Round #413 (Div1 + Div. 2) C. Fountains(树状数组维护最大值)
题目链接:https://codeforces.com/problemset/problem/799/C 题意:有 c 块硬币和 d 块钻石,每种喷泉消耗硬币或钻石中的一种,每个喷泉有一个美丽值,问建 ...
- Mac卸载Python
推荐使用 Homebrew 来安装第三方工具 自己安装的python散落在电脑各处,删除起来比较麻烦 今天在此记录一下删除的过程(以Python3.6为例) 删除Python 3.6 framewor ...
- How To Use The Repository Pattern In Laravel
The Repository Pattern in Laravel is a very useful pattern with a couple of great uses. The first us ...
- 九.配置SMB共享(Samba共享)
• Samba 软件项目 – 用途:为客户机提供共享使用的文件夹 – 协议:SMB(TCP 139).CIFS(TCP 445) • 所需软件包:samba • 系统服务:smb 管理共享账号 ...