1.安装软件
yum install libvirt virt-install qemu-kvm -y
2.启动服务
systemctl start libvirtd.service
systemctl status libvirtd.service
3.创建虚拟机
virt-install \
--virt-type kvm \
--os-type=linux \
--os-variant rhel7 \
--name centos7 \
--memory 1024 \
--vcpus 1 \
--network network=default \
--disk /opt/centos7.raw,format=raw,size=10 \
--cdrom /opt/CentOS-7-x86_64-DVD-2003.iso \
--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 \ #CPU核数
--network network=default \ #网卡类型
--disk /opt/centos7.raw,format=raw,size=10 \ #虚拟机创建路径,格式,大小
--cdrom /opt/CentOS-7-x86_64-DVD-2003.iso \ #系统镜像路径
--graphics vnc,listen=0.0.0.0 \
--noautoconsole
3.查看正在运行的虚拟机
virsh list
virsh list --all
4.启动虚拟机
virsh start centos7
5.关闭虚拟机
virsh shutdown centos7
virsh destroy centos7
6.查看虚拟机配置
virsh dumpxml centos7
7.编辑配置文件
virsh edit centos7
vim 配置文件后需要define
查看是否被发现
ls /etc/libvirt/qemu
8.导出配置文件
virsh dumpxml centos7 >> centos7.xml
9.删除虚拟机
virsh destroy centos7 #拔电源 virsh undefine centos7
10.导入虚拟机
virsh define centos7.xml
11.主机重命名
virsh domrename centos7 web-blog
12.主机挂起
virsh suspend centos7
13.主机恢复
virsh resume centos7
14.挂起恢复实验
ssh 192.168.122.38
for i in {1..100};do echo $i;sleep 1;done
新开窗口挂起
virsh suspend centos7
然后再恢复
virsh resume centos7
15.开机自启
systemctl enable libvirtd.service
virsh autostart centos7
故障案例1:虚拟机停一个没一个
原因: 正在运行的虚拟机,直接undefine,只会删除配置文件,但是不影响虚拟机的运行 此时,正在运行的虚拟机配置文件已经没了,如果重启的话,就会被真的删掉了,但是磁盘文件还在 正在运行的虚拟机,即使配置文件被删除了,也可以把当前内存里的配置导出备份 virsh list --all virsh undefine centos7 #删除 virsh list --all 如何防范: 入职后先把所有虚拟机的配置文件保存一份 virsh list --all virsh dumpxml centos7 >> centos7.xml 恢复步骤: virsh define centos7.xml virsh edit centos7 #编辑配置文件,将数据路径修改为你有的 第45行 <source file='/kvm_data/centos7.raw'/>
故障案例2:磁盘满了,迁移到其他磁盘
操作步骤: 1.关闭虚拟机 2.将磁盘文件移动到新挂载的目录 3.在线修改配置文件 4.导入修改后的配置文件 5.启动虚拟机 操作命令: virsh list --all virsh shutdown centos7 virsh list --all cp /opt/centos7.raw /data/ virsh edit centos7 virsh start centos7 virsh list --all
创建虚拟机报错提示:
1.vmware没有开启CPU虚拟化功能
ERROR Host does not support domain type kvm for virtualization type 'hvm' arch 'x86_64'
2.格式出错,手打少了空格
usage: virt-install --name NAME --memory MB STORAGE INSTALL [options]
virt-install: error: unrecognized arguments: vnc,listen=0.0.0.0
第2章 KVM连接
1.VNC连接方式
VNC默认端口是5900
启动多个虚拟机就从5900依次增加
virsh list --all
virsh vncdisplay centos7
如果Continue后闪退,操作下面步骤
2.console连接方式
ssh root@192.168.122.38 #进入kvm搭建的虚拟机 grubby --update-kernel=ALL --args="console=ttyS0,115200n8" grep "115200" /boot/grub2/grub.cfg reboot #新开一个窗口 virsh console centos7 #退出console ctrl + ]
第3章 kvm磁盘格式转换
1.磁盘格式介绍
raw:不支持做快照,性能好 qcow2:支持快照,性能不如raw好
2.查看磁盘信息
[root@db-51 /data]# qemu-img info centos7.raw
image: centos7.raw
file format: raw
virtual size: 10G (10737418240 bytes)
disk size: 1.9G #实际占用空间
3.创建磁盘
不常用
[root@db-51 /data]# qemu-img create -f qcow2 /data/oldboy.qcow2 1G
[root@db-51 /data]# qemu-img info oldboy.qcow2
image: oldboy.qcow2
file format: qcow2
virtual size: 1.0G (1073741824 bytes)
disk size: 196K
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: false
4.磁盘格式转换
需要停止需要转换的虚拟机
操作步骤: 1.停止虚拟机 virsh shutdown centos7 2.执行转换磁盘格式命令#常用 cd /data/ qemu-img convert -f raw -O qcow2 centos7.raw centos7.qcow2 3.编辑配置文件修改为新的磁盘路径和磁盘格式 [root@db-51 /data]# virsh edit centos7 [root@db-51 /data]# virsh dumpxml centos7 |grep qcow2 <driver name='qemu' type='qcow2'/> <source file='/data/centos7.qcow2'/> <driver name='qemu' type='qcow2'/>
4.启动虚拟机
virsh start centos7
第4章 KVM快照管理
1.创建快照
注意:只有 .qcow2 文件才能作快照。raw不行。
virsh snapshot-create-as --name init centos7
virsh snapshot-create-as centos7 --name snap_1
2.查看快照
virsh snapshot-list centos7
3.还原快照
virsh snapshot-revert centos7 --snapshotname init
4.删除快照
virsh snapshot-delete centos7 --snapshotname init
第5章 虚拟机克隆
1. 完整克隆
1.关闭虚拟机
virsh shutdown centos7
2.执行完整克隆命令
自动化克隆,缺点占空间
必须关机!!
virt-clone --auto-clone -o centos7 -n centos7_clone
3.完整克隆注意事项:
1).完整克隆会将原始磁盘文件不用的空间压缩,起到压缩磁盘的效果 2).完整克隆不会将原主机的快照一起克隆 3).完整克隆的机器会自己处理UUID和MAC地址 4).完整克隆的磁盘文件会和原始机器在同一个数据目录下
4.检查命令:
virsh dumpxml centos7|egrep "uuid|mac" virsh dumpxml centos7_clone|egrep "uuid|mac" virsh snapshot-list centos7 virsh snapshot-list centos7_clone
方法2,手动克隆:
1.cp 它的配置文件和数据目录,并改名字 2.virsh edit centos7 #删除2个配置 <uuid>a20f45f4-4b70-4c61-b31b-908b7309e324</uuid> <mac address='52:54:00:c0:9f:43'/> #修改2个配置 <name>centos7_clone_link</name> <source file='/data/centos7_clone_link.qcow2'/>
2. 链接克隆
1.生成磁盘链接文件
qemu-img create -f qcow2 -b centos7_clone.qcow2 centos7_clone_link.qcow2
2.查看磁盘信息
[root@db-51 /data]# qemu-img info centos7_clone_link.qcow2 image: centos7_clone_link.qcow2 file format: qcow2 virtual size: 10G (10737418240 bytes) disk size: 196K cluster_size: 65536 backing file: centos7_clone.qcow2 Format specific information: compat: 1.1 lazy refcounts: false
3.导出配置文件
virsh dumpxml centos7_clone >> centos7_clone_link.xml
4.修改配置文件
vim centos7_clone_link.xml
#删除2个配置
<uuid>a20f45f4-4b70-4c61-b31b-908b7309e324</uuid>
<mac address='52:54:00:c0:9f:43'/>
#修改2个配置
<name>centos7_clone_link</name>
<source file='/data/centos7_clone_link.qcow2'/>
5.导入配置文件
virsh define centos7_clone_link.xml
查看配置文件是否被发现
ll /etc/libvirt/qemu
6.启动虚拟机
virsh list --all virsh start centos7_clone_link
7.登录使用
virsh console centos7_clone_link
第6章 KVM热添加硬盘
1. 热添加硬盘
1.创建硬盘
qemu-img create -f qcow2 centos7_data.qcow2 5G
2.临时添加
virsh attach-disk centos7 /data/centos7_data.qcow2 vdb --subdriver qcow2
3.永久添加
virsh attach-disk centos7 /data/centos7_data.qcow2 vdb --subdriver qcow2
virsh attach-disk centos7 /data/centos7_data.qcow2 vdb --subdriver qcow2 --config
4.磁盘格式化并配置挂载
在vm虚拟机操作
virsh console centos7
fdisk -l
mkfs.xfs /dev/vdb
mkdir /data/
mount /dev/vdb /data/
df -h
blkid |grep vdb
vim /etc/fstab
5.剥离磁盘
#临时剥离 virsh detach-disk centos7 vdb #永久剥离 virsh detach-disk centos7 vdb virsh detach-disk centos7 vdb --config
6.调整磁盘空间大小(扩容)
qemu-img resize /data/centos7_data.qcow2 +5G qemu-img info centos7_data.qcow2 #以下命令在虚拟机内执行 mount /dev/vdb /data/ df -h xfs_growfs /dev/vdb df -h
第7章 热添加内存
1.创建虚拟机时直接添加最大内存参数
virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name centos7 -- memory 512,maxmemory=2048 --vcpus 1 --disk /opt/centos7.qcow2 --boot hd --network bridge=br0 --
graphics vnc,listen=0.0.0.0 --noautoconsole
2.如果创建虚拟机的时候没有设置最大内存限制,执行如下操作添加配置
virsh shutdown centos7
virsh setmaxmem centos7 3072M
virsh start centos7
virsh console centos7
free -h
3.临时添加内存命令
virsh setmem centos7 2048M --live virsh console centos7 free -h
4.永久添加命令
virsh setmem centos7 2048M --live #临时加 virsh setmem centos7 2048M --live --config virsh dumpxml centos7|grep currentMemory
报错提示:
error: Failed to start domain centos7
error: internal error: qemu unexpectedly closed the monitor: Cannot set up guest memory 'pc.ram': Cannot allocate memory
报错原因:
虚拟机最大内存不能超过宿主机的总内存大小
第8章 KVM热添加CPU
注意: 热添加CPU的前提是创建虚拟机的时候配置了maxvcpus=10参数
1.创建虚拟机的时候添加最大CPU参数
virt-install \
--virt-type kvm \
--os-type=linux \
--os-variant rhel7 \
--name centos7 \
--memory 1024,maxmemory=2048 \
--vcpus 1,maxvcpus=10 \
--network network=default \
--disk /opt/centos7.raw,format=raw,size=10 \
--cdrom /opt/CentOS-7-x86_64-DVD-2003.iso \
--graphics vnc,listen=0.0.0.0 \
--noautoconsole
virt-install \
--virt-type kvm \
--os-type=linux \
--os-variant rhel7 \
--name centos7 \
--memory 512,maxmemory=2048 \
--vcpus 1,maxvcpus=10 \
--disk /data/centos7.qcow2 \
--boot hd \
--network bridge=br0 \
--graphics vnc,listen=0.0.0.0 \
--noautoconsole
2.临时热添加CPU
virsh setvcpus centos7 4 --live
3.永久添加cpu
核数 setvcpus web04 4 --config
假如创建虚拟机的时候没有添加maxvcpus=10参数解决方法:
#1.停止虚拟机
virsh shutdown centos7
#2.改配置添加参数
<vcpu placement='static'>1</vcpu>
#3.启动后热添加
virsh start centos7
virsh setvcpus centos7 4 --live
#4.进入虚拟机并查看CPU核数
virsh console centos7
ls cpu
报错:虚拟机最大CPU核数不能超过宿主机的CPU核数
[root@db-51 /data]# virsh setvcpus centos7 4 --live
error: invalid argument: requested vcpus is greater than max allowable vcpus for the live domain: 4 > 1
第9章 KVM桥接网卡
前提: VMware虚拟机配置桥接模式打开DHCP
1.创建网桥桥接到eth0
virsh iface-bridge eth0 br0
2.链接克隆虚拟机磁盘
qemu-img create -f qcow2 -b centos7.qcow2 bridge.qcow2
3.创建新虚拟机,网络选择是桥接模式
磁盘还在,删了配置文件
virt-install \
--virt-type kvm \
--os-type=linux \
--os-variant rhel7 \
--name centos7-bridge \
--memory 1024,maxmemory=2048 \
--vcpus 1,maxvcpus=10 \
--disk /opt/bridge.qcow2 \
--boot hd \
--network bridge=br0 \
--graphics vnc,listen=0.0.0.0 \
--noautoconsole
配置文件解释
--boot hd \ #硬盘启动
--network bridge=br0 \ #更改网络模式,桥接模式
4.使用VNC链接并查看IP地址
5.测试使用SSH能否链接
第10章 KVM在线热迁移
1.安装配置nfs
[root@nfs-31 ~]# yum install nfs-utils -y
[root@nfs-31 ~]# cat /etc/exports
/data/ 10.0.0.0/24(rw,sync,all_squash,anonuid=107,anongid=107)
[root@nfs-31 ~]# groupadd -g 107 qemu
[root@nfs-31 ~]# useradd -u 107 -g 107 -M -s /sbin/nologin qemu
[root@nfs-31 ~]# mkdir /data
[root@nfs-31 ~]# chown -R qemu:qemu /data/
[root@nfs-31 ~]# systemctl restart rpcbind nfs
2.两台KVM都挂载nfs
mkdir /data
mount -t nfs 10.0.0.31:/data /data
3.移动虚拟机磁盘文件到NFS目录
[root@db-52 ~]# virsh shutdown centos7
[root@db-52 ~]# cp /opt/centos7.qcow2
4.修改配置
[root@db-52 ~]# virsh edit centos7
<source file='/data/centos7.qcow2'/>
5.启动虚拟机
[root@db-52 ~]# virsh start centos7
6.检查运行状态
[root@db-52 ~]# virsh list
7.执行热迁移命令
[root@db-52 ~]# virsh migrate --live --verbose centos7 qemu+ssh://10.0.0.53/system --unsafe
8.53上检查是否运行
[root@db-53 ~]# virsh list
第11章 KVM图形管理界面
1.项目地址
https://github.com/retspen/webvirtmgr/wiki/Install-WebVirtMgr
yum -y install git python-pip libvirt-python libxml2-python python-websockify supervisor gcc python-devel
python -m pip install pip==20.3.4
pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple
3.安装python的Django环境
git clone git://github.com/retspen/webvirtmgr.git
cd webvirtmgr
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
./manage.py syncdb
./manage.py collectstatic
4.安装配置Nginx
rpm -ivh nginx-1.18.0-1.el7.ngx.x86_64.rpm
mkdir /code
mv /opt/webvirtmgr /code/
chown -R nginx:nginx /code
rm -rf /etc/nginx/conf.d/default.conf
cat >/etc/nginx/conf.d/webvirtmgr.conf<<EOF
server {
listen 80 default_server;
server_name localhost;
access_log /var/log/nginx/webvirtmgr_access_log;
location /static/ {
root /code/webvirtmgr;
expires max;
}
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header X-Real-IP \$remote_addr;
proxy_set_header X-Forwarded-for \$proxy_add_x_forwarded_for;
proxy_set_header Host \$host:\$server_port;
proxy_set_header X-Forwarded-Proto \$scheme;
proxy_connect_timeout 600;
proxy_read_timeout 600;
proxy_send_timeout 600;
client_max_body_size 1024M;
}
}
EOF
nginx -t
systemctl start nginx
netstat -lntup|grep 80
5.配置Supervisor
cat >/etc/supervisord.d/webvirtmgr.ini<<EOF
[program:webvirtmgr]
command=/usr/bin/python /code/webvirtmgr/manage.py run_gunicorn -c /code/webvirtmgr/conf/gunicorn.conf.py
directory=/code/webvirtmgr
autostart=true
autorestart=true
logfile=/var/log/supervisor/webvirtmgr.log
log_stderr=true
user=nginx
[program:webvirtmgr-console]
command=/usr/bin/python /code/webvirtmgr/console/webvirtmgr-console
directory=/code/webvirtmgr
autostart=true
autorestart=true
stdout_logfile=/var/log/supervisor/webvirtmgr-console.log
redirect_stderr=true
user=nginx
EOF
systemctl start supervisord.service
supervisorctl status
6.创建用户
mkdir /var/cache/nginx/.ssh/ -p chown -R nginx:nginx /var/cache/nginx/ su - nginx -s /bin/bash ssh-keygen touch ~/.ssh/config && echo -e "StrictHostKeyChecking=no\nUserKnownHostsFile=/dev/null" >> ~/.ssh/config chmod 0600 ~/.ssh/config ssh-copy-id root@10.0.0.12