虚拟化
虚拟化
虚拟化是为一些组件(例如虚拟应用、服务器、存储和网络)创建基于软件的(或虚拟)表现形式的过程。
它是降低所有规模企业的 IT 开销,同时提高其效率和敏捷性的最有效方式。
虚拟化可以提高 IT 敏捷性、灵活性和可扩展性,同时大幅节约成本。更高的工作负载移动性、更高的性能和资源可用性、自动化运维 - 这些都是虚拟化的优势,虚拟化技术可以使 IT 部门更轻松地进行管理以及降低拥有成本和运
维成本。其他优势包括:
降低资金成本和运维成本。
最大限度减少或消除停机。
提高 IT 部门的工作效率、效益、敏捷性和响应能力。
加快应用和资源的调配速度。
提高业务连续性和灾难恢复能力。
简化数据中心管理。
真正的 Software-Defined Data Center 的可用性。
云计算:
kvm
虚拟机
openstack
视频(大厂用)
docker
k8s
阿里云
云计算是一种按量付费的模式!云计算的底层是通过虚拟化技术来实现的!
物理服务器:40核心4 ×512G 硬盘12×4T ssl
虚拟化
物理机 64G
虚拟机 1G * 640 128 64+64
阿里云 腾讯云 华为云 百度云 天翼云
网易云 美团云 滴滴云 金山云
云计算的服务类型
IAAS
基础设施即服务(infrastructure as an service
) 虚拟机 ecs云主机
PAAS
平台即服务(platform as an service
) php
,java
容器
SAAS
软件即服务(software as an service
) 企业邮箱服务 cdn
服务 rds
数据库
云计算的使用:
-
小公司:10台 20w+ idc 5w + 100M 10W, 10台云主机,前期投入小,扩展灵活,风险小
-
大公司:闲置服务器计算资源,虚拟机,出租(超卖)
-
64G 服务器 64台1G 320台1G 64台 大公司自己的业务 264台 租出去
-
国企,银行
-
公有云: 谁都可以租
-
私有云: 只有公司内部使用
-
混合云: 有自己的私有云 + 租的公有云
云计算的基础KVM
虚拟化
宿主机:内存4G+ 纯净的系统CentOS-7
(关闭selinux
,firewalld
和NetworkManager
)
虚拟化:
虚拟化是为一些组件(例如虚拟应用、服务器、存储和网络)创建基于软件的(或虚拟)表现形式的过程。
它是降低所有规模企业的 IT 开销,同时提高其效率和敏捷性的最有效方式。
虚拟化可以提高 IT 敏捷性、灵活性和可扩展性,同时大幅节约成本。更高的工作负载移动性、更高的性能和资源可用性、自动化运维 - 这些都是虚拟化的优势,虚拟化技术可以使 IT 部门更轻松地进行管理以及降低拥有成本和运维成本。其他优势包括:
降低资金成本和运维成本。
最大限度减少或消除停机。
提高 IT 部门的工作效率、效益、敏捷性和响应能力。
加快应用和资源的调配速度。
提高业务连续性和灾难恢复能力。
简化数据中心管理。
真正的 Software-Defined Data Center 的可用性。
linux
虚拟化软件的差别
linux
虚拟化软件: qemu
软件纯模拟全虚拟化软件,特别慢!兼容性好! xen(半) 性能特别好,需要使用专门修改之后的内核,兼容性差! redhat 5.5
xen
kvm
KVM
(linux
) 全虚拟机,它有硬件支持cpu,内置在linux内核模块,而且不需要使用专门的内核 centos6 kvm
性能较好,兼容较好
vmware workstations
: 图形界面
virtual box
: 图形界面 Oracle
安装kvm虚拟化管理工具
主机名 | ip地址 | 内存 | 虚拟机 |
---|---|---|---|
kvm01 | 10.0.0.11 | 4G(后期调整到2G) | cpu开启vt虚拟化 |
kvm02 | 10.0.0.12 | 2G | cpu开启vt虚拟化 |
libvirt
作用:虚拟机的管理软件 libvirt
: kvm
,xen
,qemu
,lxc
....
virt
virt-install virt-clone
作用:虚拟机的安装工具和克隆工具 qemu-kvm
qemu-img
(qcow2,raw
)
作用:管理虚拟机的虚拟磁盘
环境要求:
centos 7.4 7.6 7.8(不要使用7.5)
vmware 宿主机 kvm虚拟机
内存4G,cpu开启虚拟化
#本地yum源仓库安装
echo "192.168.15.253 mirrors.aliyun.com" >>/etc/hosts
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
mv /etc/yum.repos.d/epel.repo /tmp
yum install libvirt virt-install qemu-kvm -y
KVM:Kernel-based Virtual Machine
启动
systemctl start libvirtd.service
systemctl enable libvirtd.service
systemctl status libvirtd.service
安装kvm虚拟机
虚拟机
虚拟计算机系统称为“虚拟机”(VM),它是一种严密隔离且内含操作系统和应用的软件容器。每个自包含虚拟机都是
完全独立的。通过将多台虚拟机放置在一台计算机上,可仅在一台物理服务器或“主机”上运行多个操作系统和应用,
名为“hypervisor”的精简软件层可将虚拟机与主机分离开来,并根据需要为每个虚拟机动态分配计算资源。
虚拟机的主要特性:
1.分区
可在一台物理机上运行多个操作系统。
可在虚拟机之间分配系统资源。
2.隔离
可在硬件级别进行故障和安全隔离。
可利用高级资源控制功能保持性能。
3.封装
可将虚拟机的完整状态保存到文件中。
移动和复制虚拟机就像移动和复制文件一样轻松。
4.独立于硬件
可将任意虚拟机调配或迁移到任意物理服务器上。
云计算
-
云计算是概念最早是由Google 前首席执行官埃里克•施密特(Eric Schmidt)在2006 年8 月9 日的搜索引擎大会上首次提出的一种构想,而“云计算”就是这种构想的代名词,
-
云计算以虚拟化为基础,以网络为中心,为用户提供安全、快速、便捷的数据存储和网络计算服务,包括所需要的硬件、平台、软件及服务等资源,而提供资源的网络就被称为“云”。
云计算分类:
公有云:比如aws、阿里云以及azure、金山云、腾讯云等都属于公有云,每个人都可以付费使用,不需要自己关心,底层硬件,但是数据安全需要考利。
私有云:在自己公司内部或IDC自建Openstack、VMware等环境
混合云:既要使用公有云,又要使用私有云,即自己的私有云的部分业务和公有云有交接,这部分称为混合云
虚拟化技术分类
模拟器:在一个host之上通过虚拟化模拟器软件,模拟出一个硬件或者多个硬件环境,每个环境都是一个独立的虚拟机,CPU、IO、内存等都是模拟出来的,可以在宿主机模拟出不同于当前物理机CPU指令集的虚拟机,比如可以在Windows 模拟出mac OS、unix系统,比较出名的模拟器有:pearpc、QEMU、Bochs。
全虚拟机化/准虚拟化:full virtualization/native virtualization,全虚拟化不做CPU和内存模拟,只对CPU和内存做相应的分配等操作,完全虚拟化需要物理硬件的支持,比如需要CPU必须支持并且打开虚拟化功能,例如Intel的 Intel VT-X/EPT,AMD的AMD-V/RVI,以在CPU 层面支持虚拟化功能和内存虚拟化技术,因此完全虚拟化是基于硬件辅助的虚拟化技术,vmware workstation、vmware esxi、paralles desktop、KVM、Microsoft Hyper-V。
半虚拟化:para virtualization,半虚拟化要求guest OS 的内核是知道自己运行在虚拟化环境当中的,因此guestOS的系统架构必须和宿主机的系统架构相同,并且要求对guest OS的内核做相应的修改,因此半虚拟化只支持开源内核的系统,不支持闭源的系统,比较常见的半虚拟化就是早期版本的XEN,但是Xen 从其3.0 版本开始,可以支持利用硬件虚拟化技术的支持(http://www-archive.xenproject.org/files/xen_3.0_datasheet.pdf),实现了完全虚拟化,可以在其平台上不加修改的直接运行如Linux/Windows 等系列的操作系统,使得系统具备了更好的兼容性。
hypervisor类型
直接运行到物理机:vmware esxi、rhev hypervisor
需要运行到操作系统:KVM,XEN,vmware workstation
VNC-Viewer-6.19.325
微软的远程桌面
vnc:远程的桌面管理工具 向日葵 微软的远程桌面
10.0.0.11 宿主机
建议虚拟机内存不要低于1024M,否则安装系统特别慢!
[root@kvm01 opt]# wget http://192.168.15.253/CentOS-7-x86_64-Minimal-1511.iso
[root@kvm01 opt]# wget -C http://192.168.15.253/CentOS-7-x86_64-Minimal-1511.iso #断点续传
virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name centos7 --memory 1024 --vcpus 1 --disk /opt/centos2.raw,format=raw,size=10 --cdrom /opt/CentOS-7-x86_64-Minimal-1511.iso --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole
[root@kvm01 opt]#netstat -tnlup #查看5900端口是否启动
注:只能使用一次 修改名字和磁盘目录再次使用
centos7----->oldboy
centos2----->oldboy
virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name oldboy --memory 1024 --vcpus 1 --disk /opt/oldboy2.raw,format=raw,size=10 --cdrom /opt/CentOS-7-x86_64-Minimal-1511.iso --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole
vnc:10.0.0.11: 5900#端口号
--virt-type kvm 虚拟化的类型(qemu)
--os-type=linux 系统类型
--os-variant rhel7 系统版本
--name centos7 虚拟机的名字 (必须唯一)
--memory 1024 虚拟机的内存单位为M
--vcpus 1 虚拟cpu的核数
--disk /opt/centos2.raw,format=raw,size=10(必须唯一)
--cdrom /opt/CentOS-7-x86_64-DVD-1708.iso
--network network=default 使用默认NAT的网络
--graphics vnc,listen=0.0.0.0 --noautoconsole (可有可无)
云主机都没有swap分区
注:这个虚拟机只能装一次,添加虚拟机需要重新安装
KVM的介绍、准备工作和qemu-kvm 命令详解
KVM
KVM:就是Keyboard Video Mouse的缩写。KVM 交换机通过直接连接键盘、视频和鼠标 (KVM) 端口,让您能够访问和控制计算机。KVM 技术无需目标服务器修改软件。这就意味着可以在 Windows 的 BIOS 环境下,随时访问目标计算机。KVM 提供真正的主板级别访问,并支持多平台服务器和串行设备。
KVM 技术已经从最初的基础SOHO办公型,发展成为企业 IT 基础机房设施管理系统。可以从kvm 客户端管理软件轻松的直接访问位于多个远程位置的服务器和设备。KVM over IP 解决方案具备完善的多地点故障转移功能、符合新服务器管理标准 (IPMI) 的直接界面,以及将本地存储媒体映射至远程位置的功能。
KVM 是个"怪胎",原本是类型2 的主机虚拟化;但一旦在OS 上加载了kvm.ko 模块,就会"感染"OS,使其变为hypervisor(kvm),原本的软件空间作为控制台,转化成类型1 模式的主机虚拟化。
KVM的组件
kvm.ko:模块
API 应用程序编程接口
qemu-kvm:用户空间的工具程序;
qemu-KVM是一种开源虚拟器,它为KVM管理程序提供硬件仿真。
运行中的一个kvm虚拟机就是一个qemu-kvm进程,运行qemu-kvm程序并传递给它合适的选项及参数即能完成虚拟机启动,终止此进程即能关闭虚拟机;
libvirt 虚拟化库:Libvirt是一个C工具包,可以与最近版本的Linux(以及其他操作系统)的虚拟化功能进行交互。主包包含了导出虚拟化支持的libvirtd服务器。
C/S:
Client:
libvirt-client
virt-manager
Daemon:
libvirt-daemon
KVM模块load进内存之后,系统的运行模式:
内核模式
GuestOS
执行IO
类的操作时,或其它的特殊指令操作时的模式;它也被称为"Guest-Kernel
"模式;用户模式
Host OS的用户空间,用于代为GuestOS发出IO请求;
客户机模式
GuestOS的用户模式;所有的非IO类请求。
kvm
虚拟机的virsh
日常管理和配置
[root@linux-node1 ~]# virt-install --help
usage: virt-install --name NAME --ram RAM STORAGE INSTALL [options]
使用指定安装介质新建虚拟机。
optional arguments:
-h, --help show this help message and exit
--version show program's version number and exit
--connect URI 使用 libvirt URI 连接到 hypervisor
通用选项:
-n NAME, --name NAME 客户端事件名称
--memory MEMORY 配置虚拟机内存分配。例如:
--memory 1024 (in MiB)
--memory 512,maxmemory=1024
--vcpus VCPUS 为虚拟机配置的 vcpus 数。例如:
--vcpus 5
--vcpus 5,maxcpus=10,cpuset=1-4,6,8
--vcpus sockets=2,cores=4,threads=2,
--cpu CPU CPU 型号及功能。例如:
--cpu coreduo,+x2apic
--cpu host
--metadata METADATA 配置虚拟机元数据。例如:
--metadata name=foo,title="My pretty title",uuid=...
--metadata description="My nice long description"
安装方法选项:
--cdrom CDROM 光驱安装介质
-l LOCATION, --location LOCATION
安装源(例如:nfs:host:/path、http://host/path ftp://host/path)
--pxe 使用 PXE 协议从网络引导
--import 在磁盘映像中构建虚拟机
--livecd 将光驱介质视为 Live CD
-x EXTRA_ARGS, --extra-args EXTRA_ARGS 附加到使用 --location 引导的内核的参数
--initrd-inject INITRD_INJECT 使用 --location 为 initrd 的 root添加给定文件
--os-variant DISTRO_VARIANT在其中安装 OS 变体的虚拟机,
比如
'fedora18','rhel6','winxp' 等等。
--boot BOOT 配置虚拟机引导设置。
案例:
--boot hd,cdrom,menu=on
--boot init=/sbin/init (for containers)
--idmap IDMAP 为 LXC 容器启用用户名称空间。
例如:
--idmap uid_start=0,uid_target=1000,uid_count=10
设备选项:
--disk DISK 使用不同选项指定存储。例如:
--disk size=10 (new 10GiB image in default location)
--disk /my/existing/disk,cache=none
--disk device=cdrom,bus=scsi
--disk=?
-w NETWORK, --network NETWORK
配置虚拟机网络接口。例如:
--network bridge=mybr0
--network network=my_libvirt_virtual_net
--network network=mynet,model=virtio,mac=00:11...
--network none
--network help
--graphics GRAPHICS
配置虚拟机显示设置。例如:
--graphics vnc
--graphics spice,port=5901,tlsport=5902
--graphics none
--graphics vnc,password=foobar,port=5910,keymap=ja
--controller CONTROLLER
配置虚拟机控制程序设备。例如:
--controller type=usb,model=ich9-ehci1
--input INPUT
配置虚拟机输入设备。例如:
--input tablet
--input keyboard,bus=usb
--serial SERIAL 配置虚拟机串口设备
--parallel PARALLEL 配置虚拟机并口设备
--channel CHANNEL 配置虚拟机沟通频道
--console CONSOLE 配置虚拟机与主机之间的文本控制台连接
--hostdev HOSTDEV 将物理 USB/PCI/etc
主机设备配置为与虚拟机共享
--filesystem FILESYSTEM
将主机目录传递给虚拟机。例如:
--filesystem /my/source/dir,/dir/in/guest
--filesystem template_name,/,type=template
--sound [SOUND] 配置虚拟机声音设备模拟
--watchdog WATCHDOG 配置虚拟机 watchdog 设备
--video VIDEO 配置虚拟机视频硬件。
--smartcard SMARTCARD
配置虚拟机智能卡设备。例如:
--smartcard mode=passthrough
--redirdev REDIRDEV
配置虚拟机重定向设备。例如:
--redirdev usb,type=tcp,server=192.168.1.1:4000
--memballoon MEMBALLOON
配置虚拟机 memballoon 设备。例如:
--memballoon model=virtio
--tpm TPM
配置虚拟机 TPM 设备。例如:
--tpm /dev/tpm
--rng RNG
配置虚拟机 RNG 设备。例如:
--rng /dev/random
--panic PANIC
配置虚拟机 panic 设备。例如:
--panic default
虚拟机配置选项
--security SECURITY 设定域安全驱动器配置。
--numatune NUMATUNE 为域进程调整 NUMA 策略。
--memtune MEMTUNE 为域进程调整内粗策略。
--blkiotune BLKIOTUNE
为域进程调整 blkio 策略。
--memorybacking MEMORYBACKING
为域进程设置内存后备策略。
例子:
--memorybacking hugepages=on
--features FEATURES 设置域 <features> XML。
例如:
--features acpi=off
--features apic=on,eoi=on
--clock CLOCK 设置域 <clock> XML。
例子:
--clock offset=localtime,rtc_tickpolicy=catchup
--pm PM 配置 VM 电源管理功能
--events EVENTS 配置 VM 生命周期管理策略
--resource RESOURCE 配置 VM 资源分区(cgroups)
虚拟化平台选项:
-v, --hvm 客户端应该是一个全虚拟客户端
-p, --paravirt 这个客户端一个是一个半虚拟客户端
--container 这台虚拟机需要一个容器客户端
--virt-type HV_TYPE 要使用的管理程序名称(kvm、qemu、xen等等)
--arch ARCH 模拟的 CPU 构架
--machine MACHINE 要模拟的机器类型
其它选项:
--autostart #引导主机时自动启动域。
--wait WAIT #等待安装完成的分钟数。
--noautoconsole #不要自动尝试连接到客户端控制台
--noreboot #完成安装后不要引导虚拟机。
--print-xml [XMLONLY]
#输出所生成域 XML,而不是创建虚拟机。
--dry-run #完成安装步骤,但不要创建设备或者定义虚拟机。
--check CHECK #启用或禁用验证检查。
例如:
--check path_in_use=off
--check all=off
-q, --quiet #禁止无错误输出
-d, --debug #输入故障排除信息
列表
list(--all)
virsh list --all
开机
start
virsh start centos7
关机
shutdown
(虚拟机有系统)virsh shutdown centos7
拔电源关机
destroy
virsh destory centos7
重启
reboot
(虚拟机有系统)virsh reboot centos7
导出配置
dumpxml
virsh dumpxml centos7 >vm_centos7.xml
删除
undefine
推荐:先destroy,在undefine
导入配置
define
virsh define vm_centos7.xml
重命名
domrename
(低版本不支持)virsh domrename centos7 web01 ###需在关机状态下
mv centos2.raw web01.raw
修改配置
edit
(自带语法检查)virsh edit web01
挂起suspend
virsh suspend web01
恢复resume
virsh resume web01
查询vnc端口号vncdisplay
virsh vncdisplay web01
kvm虚拟机开机启动
kvm运行业务程序
开机启动autostart;
前提:systemctl enable libvirtd;
virsh autostart web01
[root@kvm01 opt]# ls /etc/libvirt/qemu
autostart networks web01.xml
取消开机启动autostart --disable
virsh autostart --disable web01
一台kvm虚拟机:由磁盘文件和配置文件组成
console 控制台 登录
virsh console web01
centos7的kvm虚拟机:
vim /etc/grub2.cfg #查看内核
[root@localhost ~]# ip add
inet 192.168.122.114/24
[root@kvm01 opt]# ssh root@192.168.122.114
grubby --update-kernel=ALL --args="console=ttyS0,115200n8"
[root@localhost ~]# reboot
[root@kvm01 opt]# virsh console web01
Connected to domain web01
Escape character is ^]
[root@localhost ~]# hostnamectl set-hostname lph
[root@localhost ~]# bash
[root@lph ~]#
注:console vs VNC 10.0.0.11:5900
1:不需要安装
vnc
客户端2:
console
支持复制粘贴
作业1:安装一台centos6的kvm虚拟机,实现console登录 安装一台centos6的kvm虚拟机,在安装的过程中.内核参数selinux=0
kvm虚拟机虚拟磁盘管理和快照管理 qemu-kvm
raw
: 俗称裸格式,占用空间比较大,不支持快照功能,不方便传输 ,读写性能较好 总50G,用1G,传输50G ;
qcow2
: qcow
(copy on write
)占用空间小,支持快照,性能比raw差一点,方便传输 总50G,用1G,传输1G;
virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name centos7 --memory 1024 --vcpus 1 --disk /opt/centos2.raw,format=raw,size=10 --cdrom /opt/CentOS-7-x86_64-Minimal-1511.iso --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole
virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name centos7 --memory 1024 --vcpus 1 --disk /opt/oldboy.qcow2,format=qcow2,size=10 --cdrom /data/CentOS-7-x86_64-Minimal-1511.iso --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole
磁盘工具的常用命令
qemu-img
info
,create
,resize
,convert
查看虚拟磁盘信息
qemu-img info web01.raw
创建一块qcow2格式的虚拟硬盘:
qemu-img create oldgirl 1G
qemu-img create -f qcow2 oldboy.qcow2 1G
qemu-img info oldboy.qcow2
调整磁盘磁盘容量
qemu-img resize /opt/oldboy.qcow2 +2G
qemu-img resize /opt/oldboy.qcow2 8G
qemu-img info /opt/oldboy.raw
注:只能扩容量,不能缩小容量
raw转qcow2:
[root@kvm01 ~]# virsh shutdown web01
qemu-img convert -f raw -O qcow2 /opt/web01.raw /opt/web01.qcow2
qemu-img convert -f raw -O qcow2 -c /opt/web01.raw /opt/web01.qcow2
virsh edit web01:
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2'/>
<source file='/opt/web01.qcow2'/>
[root@kvm01 opt]# virsh start web01
[root@kvm01 opt]# qemu-img info /opt/web01.qcow2
image: /opt/web01.qcow2
file format: qcow2
快照管理
创建快照
virsh snapshot-create web01
virsh snapshot-create-as web01 --name install_os
查看快照
virsh snapshot-list web01
还原快照
virsh snapshot-revert web01 --snapshotname install_os
删除快照
virsh snapshot-delete web01 --snapshotname
注:raw不支持做快照,qcow2支持快照,并且快照就保存在qcow2的磁盘文件中
kvm虚拟机克隆
完整克隆
自动挡:
virt-clone --auto-clone -o web01 -n web02
virt-clone --auto-clone -o web01 -n web02 (完整克隆) --file /srv/web03.qcow2 #指定文件地址克隆
手动挡:
qemu-img convert -f qcow2 -O qcow2 web01.qcow2 web03.qcow2
qemu-img convert -f qcow2 -O qcow2 -c web01.qcow2 web03.qcow2
virsh
virsh dumpxml web01 >vm_web02.xml
vim vm_web02.xml
#修改虚拟机的名字
<name>web02</name>
#删除虚拟机uuid
<uuid>8e505e25-5175-46ab-a9f6-feaa096daaa4</uuid>
#删除mac地址
<mac address='52:54:00:4e:5b:89'/>
#修改磁盘路径
<source file='/opt/web02.qcow2'/>
virsh define web02.xml
virsh start web02
链接克隆
生成虚拟机磁盘文件
qemu-img create -f qcow2 -b web03.qcow2 web04.qcow2
qemu-img info web04.qcow2
chattr +i web03.qcow2 #可以保证不让删除web03.qcow2
virsh underfine web03
生成虚拟机的配置文件
virsh dumpxml web02 >vm_web04.xml
vim vm_web04.xml
#修改虚拟机的名字
<name>web04</name>
#删除虚拟机uuid
<uuid>8e505e25-5175-46ab-a9f6-feaa096daaa4</uuid>
#删除mac地址
<mac address='52:54:00:4e:5b:89'/>
#修改磁盘路径
<source file='/opt/web04.qcow2'/>
导入虚拟机并进行启动测试
virsh define vm_web04.xml
virsh start web04
virsh list --all
全自动链接克隆脚本:
[root@kvm01 scripts]# cat auto_link_clone_sh
#!/bin/bash
old_vm=$1
new_vm=$2
#a:生成虚拟机磁盘文件
old_disk=`virsh dumpxml $old_vm|grep "<source file"|awk -F"'" '{print $2}'`
#取上级目录
disk_tmp=`dirname $old_disk`
qemu-img create -f qcow2 -b $old_disk ${disk_tmp}/${new_vm}.qcow2
#b:生成虚拟机的配置文件
virsh dumpxml $old_vm >/tmp/${new_vm}.xml
#修改虚拟机的名字
sed -ri "s#(<name>)(.*)(</name>)#\1${new_vm}\3#g" /tmp/${new_vm}.xml
#删除虚拟机uuid
sed -i '/<uuid>/d' /tmp/${new_vm}.xml
#删除mac地址
sed -i '/<mac address/d' /tmp/${new_vm}.xml
#修改磁盘路径
sed -ri "s#(<source file=')(.*)('/>)#\1${disk_tmp}/${new_vm}.qcow2\3#g" /tmp/${new_vm}.xml
#c:导入虚拟机并进行启动测试
virsh define /tmp/${new_vm}.xml
virsh start ${new_vm}
sh auto_link_clone_sh web02 db01
sh auto_link_clone_sh web02 db02
sh auto_link_clone_sh web02 db03
链接克隆与完整克隆的区别
创建链接克隆 (学习环境)
优势:
a 节省物理主机资源
b 克隆主机效率快
劣势:
a 模板主机删除,链接主机也会失效
创建完整克隆 (企业应用)
优势:
a 模板主机删除,克隆主机依然可以使用
劣势:
a 比较消耗物理主机资源
b 克隆主机效率低
kvm虚拟机的桥接网络
默认的虚拟机网络是NAT模式
网段192.168.122.0/24
ip:192.168.122.1
创建桥接网卡
1.关闭NetworkManger
2.修改网卡配置文件
3.selinux关掉
修改配置文件
virsh console web04
ip route
#eth0
TYPE=Ethernet
BOOTPROTO=none
NAME=eth0
DEVICE=eth0
ONBOOT=yes
IPADDR=10.0.0.11
NETMASK=255.255.255.0
GATEWAY=10.0.0.254
DNS1=180.76.76.76
DNS2=223.5.5.5
#eth1
TYPE=Ethernet
BOOTPROTO=none
NAME=eth0
DEVICE=eth0
ONBOOT=yes
IPADDR=172.16.1.12
NETMASK=255.255.255.0
GATEWAY=10.0.0.254
DNS1=180.76.76.76
DNS2=223.5.5.5
systemctl restart network
注:桥接网卡只能配置一次
创建桥接网卡命令
virsh iface-bridge eth0 br0
取消桥接网卡命令
virsh iface-unbridge br0
新虚拟机使用桥接模式
默认NAT模式
virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web04 --memory 1024 --vcpus 1 --disk /opt/web04.qcow2 --boot hd **--network network=default** --graphics vnc,listen=0.0.0.0 --noautoconsole
桥接模式
virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web04 --memory 1024 --vcpus 1 --disk /data/web04.qcow2 --boot hd **--network bridge=br0** --graphics vnc,listen=0.0.0.0 --noautoconsole
问题1:
如果虚拟机获取不到ip地址:
将已有虚拟机网络修改为桥接模式
关机状态下修改虚拟机配置文件:
例如:
virsh shutdown web04
virsh edit web04
<interface type='bridge'>
<source bridge='br0'/>
virsh start web04
virsh console web04
[root@lph ~]# ip add
[root@lph ~]# curl 10.0.0.1
#重新启动vmnet8网卡配置 dhcp
[root@lph ~]# systemctl restart network
[root@lph ~]# ip add
[C:\~]$ ssh root@10.0.0.128
[root@lph ~]# lscpu |grep -i kvm
Hypervisor vendor: KVM
启动虚拟机,测试虚拟机网络
如果上层没有开启dhcp,需要手动配置ip地址
IPADDR,NATMASK.GATEWAY,DNS1=180.76.76.76
热添加技术
热添加硬盘、网卡、内存、cpu
kvm热添加硬盘
[root@kvm01 opt]# qemu-img create -f qcow2 /opt/web04_add01.qcow2 20G
临时立即生效
virsh attach-disk web04 /opt/web04_add01.qcow2 vdb --subdriver qcow2
永久生效(需要重启)
virsh attach-disk web04 /opt/web04_add01.qcow2 vdb --subdriver qcow2 --config
临时剥离硬盘
virsh detach-disk web04 vdb
永久剥离硬盘
virsh detach-disk web04 vdb --config
#虚拟机
fdisk -l
mkfs.xfs /dev/vdb
mount /dev/vdb /mnt
扩容: 在虚拟机里把扩容盘的挂载目录,卸载掉
1.虚拟机中卸载挂载点
umount /mnt
2.在宿主机上剥离硬盘
virsh detach-disk web04 vdb
3.在宿主机上调整容量
qemu-img resize /opt/web04_add01.qcow2 50G
在宿主机上再次附加硬盘
virsh attach-disk web04 /opt/web04_add01.qcow2 vdb --subdriver qcow2
5:虚拟机重新挂载
mount /dev/vdb /mnt
6.更新vdb 元数据 超级块
xfs_growfs /dev/vdb
kvm虚拟机在线热添加网卡
virsh attach-interface web04 --type bridge --source br0 --model virtio
virsh attach-interface web04 --type bridge --source br0 --model virtio --config
virsh detach-interface web04 --type bridge --mac 52:54:00:35:d3:71rui
virsh detach-interface web04 network default --mac +地址 --config
virsh detach-interface web04 network default --config
kvm虚拟机在线热添加内存
初始值调内存:
virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web04 --memory 512,maxmemory=2048 --vcpus 1 --disk /data/web04.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole
临时热添加内存
virsh setmem web04 1024M
永久增大内存
virsh setmem web04 1024M --config
调整虚拟机内存最大值
virsh setmaxmem web04 4096M
virsh setmaxmem web04 4G #默认永久
virsh start web04
kvm虚拟机在线热添加cpu
virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web04 --memory 512,maxmemory=2048 --vcpus 1,maxvcpus=10 --disk /data/web04.qcow2 --boot hd -- bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole
调整虚拟机cpu的最大值 #冷添加
virsh setvcpus web04 --maximum 4 --config #只支持重启生效
热添加cpu核数
virsh setvcpus web04 4
永久添加cpu核数
virsh setvcpus0 web04 4 --config
virt-manager和kvm虚拟机热迁移(共享的网络文件物理系统)
冷迁移kvm虚拟机:配置文件,磁盘文件
[root@kvm01 opt]# scp -rp vm_web02.xml web02.qcow2 root@10.0.0.12:/opt/
[root@kvm01 opt]# scp -rp web02-1.qcow2 root@10.0.0.12:/opt/
[root@kvm02 ~]# virsh define /opt/vm_web02.xml
[root@kvm02 ~]# virsh iface-bridge eth0 br0
[root@kvm02 ~]# virsh start web02
热迁移kvm虚拟机:配置文件,nfs共享
kvm虚拟机热迁移 :两边的环境(桥接网卡)
主机名 | ip | 内存 | 网络 | 软件需求 | 虚拟化 |
---|---|---|---|---|---|
kvm01 | 10.0.0.11 | 2G | 创建br0桥接网卡 | kvm和nfs | 开启虚拟化 |
kvm02 | 10.0.0.12 | 2G | 创建br0桥接网卡 | kvm和nfs | 开启虚拟化 |
nfs01 | 10.0.0.31 | 1G | 无 | nfs | 无 |
实现共享存储(nfs)
yum install nfs-utils rpcbind -y
vim /etc/exports
/data 10.0.0.0/24(rw,async,no_root_squash,no_all_squash)
systemctl start rpcbind nfs
systemctl enable nfs
在线热迁移
kvm01 ---->kvm02临时迁移
[root@kvm01 opt]#mv /opt/web0* /srv/
[root@kvm01 opt]#mv/opt/web04.qcow2 /srv/
[root@kvm01 opt]#ls /srv/
[root@kvm01 opt]# mount -t nfs 10.0.0.31:/data /opt
[root@kvm01 opt]# mv /srv/* /opt/
真实文件在ls /data
#kvm01和kvm02
[root@kvm02 opt]# mount -t nfs 10.0.0.31:/data /opt
[root@kvm02 opt]# showmount -e 10.0.0.31
[root@kvm01 opt]# virsh start web02
[root@kvm01 opt]# virsh start web04
[root@kvm01 opt]#echo "10.0.0.11 kvm01 \n 10.0.0.12 kvm02" >>/etc/hosts
[root@kvm01 opt]# virsh migrate --live --verbose web04 qemu+ssh://10.0.0.12/system --unsafe
迁移完成之后
virsh list --all
注:临时迁移只能迁移状态不能把配置文件迁移过去
kvm01------>kvm02永久迁移
[root@kvm01 opt]# virsh migrate --live --verbose web04 qemu+ssh://10.0.0.12/system --unsafe --persistent --undefinesource
[root@kvm01 opt]# virsh console web02
[root@lph ~]# ping 10.0.0.128
kvm管理平台
kvm宿主机 2000台
查看每一个宿主机有多少台虚拟机?
查看每一个宿主机还剩多少资源?
查看每一台宿主机,每一个虚拟机的ip地址?
excel 资产管理 cmdb
kvm管理平台,数据库工具
信息:宿主机,总配置,剩余的总配置
虚拟机的信息,配置信息,ip地址,操作系统
带计费功能的kvm管理平台,openstack ceilometer计费 ecs IAAS层
自动化管理kvm宿主机,云主机定制化操作
用脚本自动化部署openstack M版
部署openstack
克隆一台openstack模板机:
all-in-one环境
4G内存,开启虚拟化,挂载centos7.6的光盘
虚拟机开机之后,修改ip地址为10.0.0.11
上传脚本openstack-mitaka-autoinstall.sh到/root目录
上传镜像:cirros-0.3.4-x86_64-disk.img到/root目录
上传配置文件:local_settings到/root目录
上传openstack_rpm.tar.gz到/root下
tar xf openstack_rpm.tar.gz -C /opt/
mount /dev/cdrom /mnt
sh /root/openstack-mitaka-autoinstall.sh 大概10-30分钟左右
访问http://10.0.0.11/dashboard
登录设置:
域:default
用户名:admin
密码:ADMIN_PASS
修改登录密码:123456
注意: 在windows系统上修改host解析(10.0.0.11 controller)
添加node节点: 10.0.0.12
修改ip地址 hostnamectl set-hostname compute1
重新登录让新主机名生效
上传openstack_rpm.tar.gz到/root下,
tar xf openstack_rpm.tar.gz -C /opt/
mount /dev/cdrom /mnt
上传脚本openstack_compute_install.sh
sh openstack_compute_install.sh
openstack controller主控制节点,node节点, kvm宿主机
node节点, kvm宿主机
node节点, kvm宿主机
node节点, kvm宿主机