###安装配置libvirtd(须有weivirtmgr服务端使用)
01.安装libvirt和KVM
curl | sudo sh
如开了防火墙还需打开对libvirt端口的访问权限:
iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport 16509 -j ACCEPT
02.设置开机自启
chkconfig libvirtd on
03. 配置账号密码
saslpasswd2 -a libvirt webvirtmgr
password: KvmRocks
#sasl是一种用来扩充C/S模式验证能力的机制。
#-a use appname as application name
04.验证账号密码
virsh -c qemu+tcp://localhost/system nodeinfo
#账号: webvirtmgr 密码:上面设置的密码KvmRocks
05.配置libvirtd
cat >>/etc/libvirt/libvirtd.conf<<EOF
max_clients = 1024
min_workers = 50
max_workers = 200
max_requests = 1000
max_client_requests = 200
EOF
06.重启libvirtd
service libvirtd restart
###配置网卡的bridge模式(命令行见后面)
环境:这里在已经做好了bond的基础上配置bridge (没做bond就用em1代替,配置类似)
01.修改配置ifcfg-bond0
vim /etc/sysconfig/network-scripts/ifcfg-bond0
TYPE=Bond
BOOTPROTO=none
NAME=bond0
DEVICE=bond0
ONBOOT=yes
BOOTPROTO=none
BONDING_MASTER=yes
ONBOOT=yes
#IPADDR=10.0.0.200
#NETMASK=255.255.255.0
#GATEWAY=10.0.0.254
BONDING_OPTS="mode=4 miimon=100 xmit_hash_policy=layer2+3"
BRIDGE=br0
02.配置网桥
vim /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE=br0
TYPE=Bridge
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=none
IPADDR=10.0.0.200
NETMASK=255.255.255.0
GATEWAY=10.0.0.254
03.重新加载网卡配置文件
ifdown bond0 && ifup bond0
ifdown br0 && ifup br0
###图形化安装KVM虚拟机(命令行见后面)
步骤: 需要一个iso镜像,配置存储池,挂载镜像,标准安装
注: 新建虚拟磁盘挂载后,如果mkfs很慢,需要修改libvirtd中的xml配置,设置 cache='none' 或者 cache='unsafe'
xml例子:
<driver name='qemu' type='qcow2' cache='none'/>
01.准备磁盘文件
#方法一:拷贝一个以后镜像
mkdir -p /data/vm/storage1
scp vm-dc-temple-20.img 10.0.0.201 #复制磁盘文件时,使用此磁盘文件的虚拟机要关闭
#方法二:自己制作镜像(后面有详细步骤)
认证账户密码:webvirtmgr KvmRocks
02.登录WebVirtMgr仪表盘
输入账户密码 user:root Pass:KvmRocks
03.创建一个连接
user:Webvirtmgr pass:KvmRocks
04.创建存储池
05.创建新的网卡设备
网桥名称:与物理机网桥设备的名称要相同
06.创建虚拟机实例
07.VNC连接测试
IP是物理机br0的IP,端口是刚才xml中查看的
(如果镜像是克隆的,可能需要关闭其他虚拟机,使其端口成为5900)
最后能在物理机上ping通12.40这个实例即可!
安装配置libvirtd 客户端
01.安装libvirt和KVM
可参考:
curl | sudo sh
如开了防火墙还需打开对libvirt端口的访问权限:
iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport 16509 -j ACCEPT
02.设置开机自启
chkconfig libvirtd on
03. 配置账号密码
saslpasswd2 -a libvirt webvirtmgr
password: KvmRocks
#sasl是一种用来扩充C/S模式验证能力的机制。
04.验证账号密码
virsh -c qemu+tcp://localhost/system nodeinfo
#账号: webvirtmgr 密码:上面设置的密码KvmRocks
05.配置libvirtd
cat >>/etc/libvirt/libvirtd.conf<<EOF
max_clients = 1024
min_workers = 50
max_workers = 200
max_requests = 1000
max_client_requests = 200
EOF
06.重启libvirtd
service libvirtd restart
如果有做好的磁盘镜像文件,则无需创建虚拟机镜像!!!!!
将磁盘镜像文件直接放到/data/vm/storage1目录下,然后在webvirtdmgr上即可使用其创建新的虚拟机。
07.创建存储池
图形方式操作在上面,命令方式操作在下面
08.创建网络池
图形方式操作在上面
————————————————————————————————
创建KVM虚拟机镜像:
第一部分:安装kvm环境
01.安装kvm依赖包
yum install qemu-kvm libvirt virt-install virt-manager bridge-utils
02.检查是否支持kvm
lsmod | grep kvm
03.启动libvirtd服务
systemctl enable libvirtd.service
systemctl start libvirtd.service
第二部分:搭建网桥
04.创建网桥
nmcli c add type bridge autoconnect yes con-name br0 ifname br0
05.创建网桥IP地址
nmcli c modify br0 ipv4.address 10.50.13.0/24 ipv4.method manual
06.创建网桥网关地址
nmcli c modify br0 ipv4.gateway 10.0.0.254
07.删除eth0网卡配置
nmcli c delete em1
08.给eth0网卡指定网桥
nmcli c add type bridge-slave autoconnect yes con-name em1 ifname em1 master br0
09.重启网络服务
systemctl restart network
第三部分:创建kvm虚拟机
10.创建磁盘
ps:分为ram和qcow2俩种磁盘格式
qcow2的磁盘空间可以动态增长
qemu-img create -f qcow2 /data/vm/m7-template.qcow2 100G
11. 查看磁盘信息
ps:虽然通过ls看磁盘为20G,但实际空间为0,所以说通过qemu-img创建的磁盘为稀疏模式磁盘。
qemu-img info m7-template.qcow2
12.安装虚拟机
图形界面安装:
virt-install --name m7-vm-ops-37 --vcpus1 --ram 4096 --disk /data/vm/m7-template.qcow2,format=qcow2 --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole --os-type=linux --os-variant=rhel7 --location=/iso/CentOS-7-x86_64-DVD-1611.iso
ps:--location 后面也可以指定远程镜像,--os-variant 后面写成rhel7(不要写centos7,不识别)
安装完后,可以通过vnc端口连接并配置(vnc端口在xml文件中)
-------------------------------------------------------------------------------
命令行界面安装:
virt-install --name m7-vm-ops-37 --ram 512 --vcpus 2 --disk path=/data/vm/m7-template.img,size=10 --os-type linux --os-variant rhel7 --graphics none --console pty,target_type=serial --location=/data/CentOS-7-x86_64-DVD-1503-01.iso --extra-args 'console=ttyS0,115200n8 serial'
从1开始配置,时区,密码,磁盘选1......
安装完后的磁盘文件可用作模板,在图形界面(webvirtmgr)可以使用其创建新的虚拟机。
虚拟机克隆:
方法一:
virt-clone -o m7-vm-ops-37 -n m7-vm-test-38 -f /data/vm/storage1/m7-vm-test-38.qcow2
ps:-f 指定新的磁盘文件 -o 指定被克隆虚拟机 -n 新的虚拟机
方法二:
拷贝磁盘文件和xml文件,修改里面关键点即可
虚拟机快照:
virsh snapshot-create
常用命令:
#宿主机和虚拟机切换
退出虚拟机:crtl+]
进入虚拟机:virsh console centos71
#开启虚拟机
virsh start centos71
#关闭虚拟机
virsh shutdown centos71
#连接虚拟机
virsh console centos71
#强制关闭虚拟机
virsh destroy centos71
#编辑这个虚拟机文件.xml
virsh edit centos71
#删除虚拟机包括配置
virsh undefine centos71
#查看所有kvm虚拟机
virsh list --all
#进入vrish环境
virsh
#磁盘挂载(在vrish环境下使用)
attach-disk m7-vm-ops-37 /data/vm/m7-template.qcow2 vdb
#查看下有没有vdb
fdisk -l
brctl show #查看网桥
brctl delbr br0 #删除网桥
brctl delif br0 vnet0 #删除网桥接口
创建存储池:
手动创建文件:
/var/libvirt/storage/m7-vm-ops-37.xml:
<pool type='dir'>
<name>m7-vm-ops-37</name> #存储池名称
<capacity>0</capacity>
<allocation>0</allocation> #最大容量
<available>0</available> #可见容量
<source></source>
<target>
<path>/var/libvirt/storage</path>
<permissions>
<mode>0700</mode>
<owner>-1</owner>
<group>-1</group>
</permissions>
</target>
</pool>
----------------------------以下可作为参考---------------------------------
vim /etc/libvirt/storage/storage1.xml
<pool type='dir'>
<name>storge1</name>
<uuid>4aa56c0c-a23e-6569-7ef5-0584e3bd6a8a</uuid> #复制时删除此标签
<capacity unit='bytes'>0</capacity>
<allocation unit='bytes'>0</allocation>
<available unit='bytes'>0</available>
<source>
</source>
<target>
<path>/data/vm/storage1</path>
<permissions>
<mode>0755</mode>
<owner>-1</owner>
<group>-1</group>
</permissions>
</target>
</pool>
常用命令:
#查看存储值
virsh pool-list
#定义存储值
virsh pool-define /var/libvirt/storage/linux43.xml
#查看存储值
virsh pool-list --all
#开启存储值
virsh pool-start linux43
#自动启动
virsh pool-autostart linux43
#查看存储值
virsh pool-list
#挂载磁盘
virsh deattach-disk cirros vdb
补充:
#virsh console vm-ops
卡死连接不上执行下面命令后reboot
在虚拟机中执行:
grubby --update-kernel=ALL --args="console=ttyS0"
错误总结:
1.报错与网络有关;提示什么NetworkManager
nmcli device status
systemctl stop NetworkManager
systemctl start NetworkManager
# nmcli c add type bridge autoconnect yes con-name br0 ifname br0
brctl show #检查vnet0是否存在
br0 eth0
vnet0