目录
一.虚拟化技术
1.虚拟化与云技算的概述
1)虚拟化:
虚拟化是一种技术,顾名思义,就是将不可拆分的实体资源变成可以自由划分的逻辑资源,从而实现资源的整合、隔离、在分配, 云计算就是利用了虚拟化技术的这个特点。
2)云计算:
云计算是一种服务模式(IAAS) , 其思想就是把各种资源整合起 来, 然后租给有需要的用户, 其中的资源包括处理器(CPU) 、内 存、存储、网络和其它基本的计算资源。通常我们通过虚拟化手 段把这些资源分割打包提供给用户使用。
2.虚拟化的开启
1)虚拟化主要厂商
系列 pc/服务器版代表 VMware VMware Workstation,vSphere Microsoft Virtual PC,Hyper-V RedHat KVM,RHEV Citrix Xen Oracle Oracle VM VirtualBox 2)开启虚拟化
当在windows平台的VMware中安装系统时,如果电脑没有开启虚拟化,在安装过程中,会发生错误。
查看电脑是否开启虚拟化,【任务管理器】
windows如未开启则:
intel CPU开启虚拟化
开机进入BIOS,在coufiguration选项中,将【 Intel Virtual Technology】选项由【disable】调整为【enable】。
AMD CPU开启虚拟化
开机进入BIOS,在coufiguration选项中,将【 AMD SVM Technology】选项由【disable】调整为【enable】。
linux查看支持虚拟化
# 查看CPU是否支持虚拟化 ~]# grep -P "vmx|svm" /proc/cpuinfo flags : ... ... vmx # 查看kernel(内核)是否有虚拟化内核 ~]# lsmod |grep kvm kvm_intel 294912 8 kvm 786432 1 kvm_intel irqbypass 16384 7 kvm #如没有模块则添加 ~]# modprobe kvm ~]# modprobe kvm-intel
3.虚拟化的架构
虚拟层,仿真层,管理层
-KVM是linux内核模块, 它需要CPU指令集(Intel-VT/AMD-V) 的支持,是一种硬件辅助虚拟化技术
-QEMU是一个虚拟化的仿真工具, 通过ioctI与内核模块交互 完成对硬件的虚拟化支持
-Libvirt是一个对虚拟化管理的接口和工具, 提供客户端程 序,例如: virsh,virt-manager
4.linux虚拟化平台安装
虚拟化平台必须的四个软件包
qemu-kvm -为kvm提供底层系统设备仿真支撑
libvirt-daemon -libvirtd守护进程,管理虚拟机
libvirt-client -客户端软件,提供客户端管理命令
libvirt-daemon-driver-qemu -libvirtd连接qemu的驱动
1)安装软件
~]# yum -y install qemu-kvm libvirt-daemon libvirt-client libvirt-daemon-driver-qemu ~]# systemctl enable --now libvirtd ~]# virsh version Compiled against library: libvirt 4.5.0 Using library: libvirt 4.5.0 Using API: QEMU 4.5.0
5.虚拟机的构成
1)配置文件与储存文件
虚拟配置文件(*.xml)(扩展标记语言)
-文件默认路径:/etc/libvirt/qemu
-用途:配置虚拟机资源参数
存储文件(*.img)
-文件默认路径:/var/lib/libvirt/images/
-用途:仿真虚拟磁盘,储存所有数据信息
2)cow技术的原理
Copy On Write 写实复制技术
-直接映射原始盘的数据内容
-当数据有写入需求时,在写入之前自动将数据块拷贝存入前端盘后,对前端盘进行修改
-原始盘始终是只读的
3)linux使用后端磁盘的命令
注:每一个虚拟机应该有单独的磁盘
qemu-img 是虚拟机的磁盘管理命令,支持非常多的磁盘
格式,例如 raw, qcow2,vdi,vmdk等等
qemu-img命令格式
-qemu-img子命令 子命令参数 块文件名称 大小 -常用子命令有: -create 创建一个磁盘 -convert 专换磁盘格式 -info 查看磁盘信息 -f 磁盘格式 -b 原始盘 #创建后端盘 ~]# cd /var/lib/libvirt/images ~]# qemu-img create -f qcow2 master.img 10G Formatting 'master.img', fmt=qcow2 size=10737418240 encryption=off cluster_size=65536 lazy_refcounts=off ~]# ls node.img ~]# qemu-img info master.img image: master.img file format: qcow2 virtual size: 10G (10737418240 bytes) disk size: 196K cluster_size: 65536 Format specific information: compat: 1.1 lazy refcounts: false # 创建链接盘 ~]# qemu-img create -f qcow2 -b master.img node.img 30G
二.虚拟化管理
1.虚拟化网络管理
1)网桥的概述
早期的网桥就是将两个计算机连接起来的网络通信设备,但是在现在很多虚拟化技术,无论是虚拟机还是容器技术想要进行网络通信所以提出了个虚拟网桥的概念。虚拟网桥的概念的提出含义就是使用网桥搭建一个局域网而虚拟机和容器和宿主机是局域网内同等级别节点。用一句话总结就是现在虚拟化技术就是通过网桥技术将宿主机和虚拟机和容器搭建成局域网,是虚拟机和宿主机之间可以通信。
所以一般创建虚拟机想要上外网一般有两种方式一种是通过桥接借助宿主机的物理连接,然后和宿主机配上相同的上网环境的就可以上网,还有一种是用桥接的方式是虚拟机和宿主机之间能够通信,然后借助NAT(网络地址转换)使用宿主机代理上网。而docker就是使用的这种技术。
2)网络管理命令
命令 | 说明 |
---|---|
virsh tnet-list [--all] | 列出虚拟网络 |
virsh net-start | 启动虚拟交换机 |
virsh net -destroy | 强制停止虚拟交换机 |
virsh net-define | 根据xml文件创建虚拟网络 |
virsh net- rundefine | 删除一个虚拟网络设备 |
virsh net-edit | 修改虚拟交换机的配置 |
virsh net-autostart | 设置开机自启动 |
3)虚拟网桥创建(xml扩展标记语言)
注:官网手册 https://libvirt.org/format.html
直接看network中的nat就行,其他先用直接套用
~]# cd /etc/libvirt/qemu/networks ~]# vim vbr.xml <network> <name>vbr</name> <forward mode='nat'/> <bridge name='vbr' stp='on' delay='0'/> <ip address='192.168.100.254' netmask='255.255.255.0'> <dhcp> <range start='192.168.100.100' end='192.168.100.200'/> </dhcp> </ip> </network> # vbr设备名 # 网桥的模式 mode='nat'可以上网 # bridge name='vbr':ifconfig可以看到的名字 # address,netmask:网桥的IP地址与子网掩码 # range start=开始ip,end=结束ip ## 创建网桥设备 ~]# virsh net-define /etc/libvirt/qemu/networks/vbr.xml Network vbr defined from /etc/libvirt/qemu/networks/vbr.xml # 查看网桥设备 ~]# virsh net-list --all Name State Autostart Persistent ---------------------------------------------------------- vbr inactive no yes --all 显示所有网桥因为没有设置开启 # Name 网桥名;State 启动状态(inactive【没有启动】);Autostart 是否开机自启 ## 设置开启自启 ~]# virsh net-autostart vbr Network vbr marked as autostarted ~]# virsh net-list --all Name State Autostart Persistent ---------------------------------------------------------- vbr inactive yes yes ## 启动网桥 ~]# virsh net-start vbr Network vbr started ## 查看是否启动 ~]# virsh net-list Name State Autostart Persistent ---------------------------------------------------------- vbr active yes yes ~]# ifconfig vbr: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500 inet 192.168.100.254 netmask 255.255.255.0 broadcast 192.168.100.255 ether 52:54:00:a8:36:ce txqueuelen 1000 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 # active 启动 ## 修改网桥设备 ~]# virsh net-edit vbr Network vbr XML configuration not changed. ## 重启生效 ~]# virsh net-destroy vbr Network vbr destroyed ~]# virsh net-start vbr Network vbr started
2.虚拟机配置管理
1)创建虚拟机配置文件
官网文件参拷 https://libvirt.org/format.html
~]# vim node_bash.xml <name>node_base</name> <memory unit='KB'>2248000</memory> <currentMemory unit='KB'>2248000</currentMemory> <vcpu placement='static'>2</vcpu> <os> <type arch='x86_64' machine='pc'>hvm</type> <boot dev='hd'/> <bootmenu enable='yes'/> <bios useserial='yes'/> </os> <features> <acpi/> <apic/> </features> <cpu mode='host-passthrough'> </cpu> <clock offset='localtime'/> <on_poweroff>destroy</on_poweroff> <on_reboot>restart</on_reboot> <on_crash>restart</on_crash> <devices> <emulator>/usr/libexec/qemu-kvm</emulator> <disk type='file' device='disk'> <driver name='qemu' type='qcow2'/> <source file='/var/lib/libvirt/images/node_base.img'/> <target dev='vda' bus='virtio'/> </disk> <interface type='bridge'> <source bridge='vbr'/> <model type='virtio'/> </interface> <channel type='unix'> <target type='virtio' name='org.qemu.guest_agent.0'/> </channel> <serial type='pty'></serial> <console type='pty'> <target type='serial'/> </console> <memballoon model='virtio'></memballoon> </devices> </domain> # <domain ...>证明是一个kvm的虚拟机 # <name....>虚拟机的名字 # <memory..>虚拟最大内存;<currentMemory...>虚拟机有效内存;一般生产环境当两个内存相同时最合适(测试环境可不同;如该服务最少几个G能起来【8:2】) # <vcpu...> 几CPU # <os...> 系统启动引导配置;32位的64位的系统的区别;32位代表2的32次幂的字长(4G),最大只能识别4G;64位就是2的64次幂的字长(16E);所以arch='x86_64';machine=类型;boot dev=硬盘驱动(hd)【cdrom光驱启动{可装windows}】,<bootmenu 菜单管理;<bios bios管理; # <features> 电源(配置休眠策略); # <cpu mode=cpu类型(host-passthrough表示使用真机的cpu) # <clock offset='localtime'>使用本机的时间 # <on_poweroff...><on_reboot...><on_crash..>重置,重启,电源(相当于服务器上的电源) ##<devices>定义硬件设备 #<emulator>仿真程序的路径; # <disk...>定义虚拟机硬盘路径<source...>;<target...> 设备的识别名,设备的种线与驱动; #<interface ..>网卡配置;<source bridge=默认vbr可写多个不同的设备 # <channel..>虚拟机的管理程序 # <console>;<memballoon>连接设备
2)创建虚拟机
~]# cp node_bash.xml /etc/libvirt/qemu/vmhost.xml ~]# virsh define /etc/libvirt/qemu/node_base.xml Domain vmhost defined from /etc/libvirt/qemu/node_base.xml ~]# virsh list --all Id Name State ---------------------------------------------------- - vmhost shut off # 开启虚拟机 ~]# virsh start vmhost Domain vmhost started ~]# virsh list --all Id Name State ---------------------------------------------------- - vmhost running # 进入虚拟机 ~]# virsh console vmhost 注:多拍几次回车密码与用户会显示在屏幕上
3)虚拟机管理命令
命令 | 说明 |
---|---|
virsh list --all | 列出虚拟机 |
virsh start/shutdown | 启动/关闭虚拟机 |
virsh destroy | 强制停止虚拟机 |
virsh define/undefine | 创建/删除虚拟机 |
virsh ttyconsole | 显示终端设备 |
virsh console | 连接虚拟机console |
virsh edit | 修改虚拟机配置 |
virsh autostart | 设置虚拟机自启动 |
virsh dominfo | 查看虚拟机摘要信息 |
virsh domiflist | 查看虚拟机网卡信息 |
virsh domblklist | 查看虚拟机硬盘信息 |
# 查看虚拟机网卡信息 ~]# virsh domiflist vmhost Interface Type Source Model MAC ------------------------------------------------------- vnet0 bridge vbr virtio 52:54:00:2e:bc:20 ~]# ifconfig vnet: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500 ether 52:54:00:a8:36:ce txqueuelen 1000 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 # 查看虚拟机硬盘信息 ~]# virsh domblklist vmhost Target Source ------------------------------------------------ vda /var/lib/libvirt/images/node.img # 修改虚拟机配置 ~]# virsh edit vmhost Domain vmhost XML configuration not changed. # 删除虚拟机 ~]# virsh undefine vmhost Domain vmhost has been undefined ~]# virsh list --all Id Name State ----------------------------------------------------
3.写一个脚本以后就可以直接创建
~]# vim clone.sh #!/bin/bash cd /var/lib/libvirt/images qemu-img create -f qcow2 -b master.qcow2 ${1}.img 30G sed "s,node_base,${1}," node_bash.xml > /etc/libvirt/qemu/${1}.xml virsh define /etc/libvirt/qemu/${1}.xml # 执行测试 ~]# mv node_bash.xml /var/lib/libvirt/images ~]# ./clone.sh keke Formatting 'keke.img', fmt=qcow2 size=32212254720 backing_file='cirros.qcow2' encryption=off cluster_size=65536 lazy_refcounts=off Domain keke defined from /etc/libvirt/qemu/keke.xml ~]# virsh list --all Id Name State ---------------------------------------------------- - keke shut off
修改脚本1
~]# vim clone.sh #!/bin/bash if (( $# == 1 ));then cd /var/lib/libvirt/images qemu-img create -f qcow2 -b master.qcow2 ${1}.img 30G sed "s,node_base,${1}," node_base.xml >/etc/libvirt/qemu/${1}.xml virsh define /etc/libvirt/qemu/${1}.xml else echo $0 vmname fi
修改脚本2
~]# vim clone.sh #!/bin/bash read -p "请输入要创建的名字:" keke if (( $? == 0 ));then for i in $(echo $keke) do cd /var/lib/libvirt/images qemu-img create -f qcow2 -b master.qcow2 ${i}.img 30G sed "s,node_base,${i}," node_bash.xml > /etc/libvirt/qemu/${i}.xml virsh define /etc/libvirt/qemu/${i}.xml done else echo $0 输入错误 fi ~]# mv clone.sh /usr/sbin/clone ## 测试 ~]# clone 请输入要创建的名字:node1 node2 node3 node4 Formatting 'node1.img', fmt=qcow2 size=32212254720 backing_file='cirros.qcow2' encryption=off cluster_size=65536 lazy_refcounts=off Domain node1 defined from /etc/libvirt/qemu/node1.xml Formatting 'node2.img', fmt=qcow2 size=32212254720 backing_file='cirros.qcow2' encryption=off cluster_size=65536 lazy_refcounts=off Domain node2 defined from /etc/libvirt/qemu/node2.xml Formatting 'node3.img', fmt=qcow2 size=32212254720 backing_file='cirros.qcow2' encryption=off cluster_size=65536 lazy_refcounts=off Domain node3 defined from /etc/libvirt/qemu/node3.xml Formatting 'node4.img', fmt=qcow2 size=32212254720 backing_file='cirros.qcow2' encryption=off cluster_size=65536 lazy_refcounts=off Domain node4 defined from /etc/libvirt/qemu/node4.xml ~]# virsh list --all Id Name State ---------------------------------------------------- - node1 shut off - node2 shut off - node3 shut off - node4 shut off
批量删除
~]# vim remove.sh #!/bin/bash virsh list --all | awk 'NR>2{print $2}' | xargs -i virsh undefine {} ~]# chmod +x remove.sh ~]# ./remove.sh Domain node1 has been undefined Domain node2 has been undefined Domain node3 has been undefined Domain node4 has been undefined Domain node_base has been undefined [root@VM-0-98-centos ~]# virsh list --all Id Name State ----------------------------------------------------
4.安装会总:
1)装包,与测试是否支持虚拟化
2)创建后端盘并连接一个
文件位置 :/var/lib/libvirt/images
3)创建虚拟机配置文件
文件位置 :/etc/libvirt/qemu/
4)使用方法