虚拟化

虚拟化

虚拟化是为一些组件(例如虚拟应用、服务器、存储和网络)创建基于软件的(或虚拟)表现形式的过程。

它是降低所有规模企业的 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 ) phpjava 容器

SAAS 软件即服务(software as an service ) 企业邮箱服务 cdn服务 rds数据库

image-20201126191107895

云计算的使用:

  • 小公司:10台 20w+ idc 5w + 100M 10W, 10台云主机,前期投入小,扩展灵活,风险小

  • 大公司:闲置服务器计算资源,虚拟机,出租(超卖)

  • 64G 服务器 64台1G 320台1G 64台 大公司自己的业务 264台 租出去

  • 国企,银行

  • 公有云: 谁都可以租

  • 私有云: 只有公司内部使用

  • 混合云: 有自己的私有云 + 租的公有云

云计算的基础KVM虚拟化

宿主机:内存4G+ 纯净的系统CentOS-7(关闭selinuxfirewalldNetworkManager

虚拟化:

虚拟化是为一些组件(例如虚拟应用、服务器、存储和网络)创建基于软件的(或虚拟)表现形式的过程。

它是降低所有规模企业的 IT 开销,同时提高其效率和敏捷性的最有效方式。

虚拟化可以提高 IT 敏捷性、灵活性和可扩展性,同时大幅节约成本。更高的工作负载移动性、更高的性能和资源可用性、自动化运维 - 这些都是虚拟化的优势,虚拟化技术可以使 IT 部门更轻松地进行管理以及降低拥有成本和运维成本。其他优势包括:

降低资金成本和运维成本。
最大限度减少或消除停机。
提高 IT 部门的工作效率、效益、敏捷性和响应能力。
加快应用和资源的调配速度。
提高业务连续性和灾难恢复能力。
简化数据中心管理。
真正的 Software-Defined Data Center 的可用性。

linux虚拟化软件的差别

linux虚拟化软件: qemu 软件纯模拟全虚拟化软件,特别慢!兼容性好! xen(半) 性能特别好,需要使用专门修改之后的内核,兼容性差! redhat 5.5 xen kvm KVMlinux) 全虚拟机,它有硬件支持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开启虚拟化

image-20201126153540448

#本地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 等系列的操作系统,使得系统具备了更好的兼容性。
img

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 (可有可无)

1563160425280

image-20201126123229528

image-20201126123350929

image-20201126123711001

云主机都没有swap分区

image-20201126141406397

注:这个虚拟机只能装一次,添加虚拟机需要重新安装

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 模式的主机虚拟化。

img

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 ;

qcow2qcowcopy 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 infocreateresizeconvert

查看虚拟磁盘信息

  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

QQ图片20201127102805

创建桥接网卡

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地址:

1563250956395

将已有虚拟机网络修改为桥接模式

关机状态下修改虚拟机配置文件:

例如:

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

1563350783150

上传脚本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宿主机  
posted @ 2021-03-06 14:49  上善若水~小辉  阅读(367)  评论(0编辑  收藏  举报