KVM权威指南

KVM权威指南

目录

閱讀本文約花費: 14 (分鐘)

KVM权威指南 – Happiness”Blog

1.什么是虚拟化?

虚拟化,通过模拟计算机的硬件,来实现在同一台计算机上同时运行多个不同的操作系统的技术。

2.为什么要用虚拟化?

kvm: 兼容较好,性能较好! 支持内存压缩技术

qemu:最早,最慢,兼容性最强,模拟所有硬件, x86,arm,power AIX

xen: 性能最好,兼容性最差,使用专门定制的内核,

vmware ESXI商业软件: 最贵,好用

virtual box: 开源

没有虚拟化之前:
计算机的硬件配置越来越高

512G 内存,4路 8核16线程 ,12* PCI-E 1T的SSD
ntp服务,安装多个mysql,安装多个tomcat,安装….

linux开源的,很多软件都有依赖包openssl nginx

充分利用资源,软件运行环境的隔离,只有虚拟化才行实现。

场景1:同一台物理机运行多个php版本 php5.3(openssl,gd) php5.5 php7.2

场景2:机房的迁移,解决了硬件和系统的依赖

场景3:openstack环境,软件发布方式

场景4:开发环境和测试环境,使用虚拟化
只靠一台物理服务器,30台虚拟机

产品 — 开发 — 运维 — 测试
so结尾,linux 库文件

场景5:业务的快速部署
从头安装系统,安装服务,配置
克隆虚拟机,改ip,

虚拟化:提高了资源的利用率,各个服务的安全性隔离,解决了系统和硬件之间的依赖

第一章 安装kvm虚拟机

1.Centos7.6版本

2.宿主机4G 处理器勾选 虚拟化Inter VT-x/EPT或AWD-V/RVI(V)

3.kvm虚拟化管理软件的安装

#安装服务
yum install libvirt virt-install qemu-kvm -y
解释:
KVM:Kernel-based Virtual Machine  

libvirt  作用:虚拟机的管理软件,管理虚拟机的生命周期
libvirt: kvm,xen,qemu,lxc....

virt   virt-install virt-clone   作用:虚拟机的安装工具和克隆工具
qemu-kvm  qemu-img (qcow2,raw)作用:管理虚拟机的虚拟磁盘

#启动虚拟机管理服务
systemctl start libvirtd.service
systemctl status libvirtd.service
建议虚拟机内存不要低于1024M,否则安装系统特别慢!
virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name centos7 --memory 1024 --vcpus 1 --disk /opt/centos7.raw,format=raw,size=10 --cdrom /opt/CentOS-7-x86_64-DVD-17.iso --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole
解释:
--virt-type kvm    虚拟化的类型(qemu)
--os-type=linux    系统类型
--os-variant rhel7 系统版本
--name centos7     虚拟机的名字 
--memory 1024      虚拟机的内存
--vcpus 1          虚拟cpu的核数
--disk /opt/centos2.raw,format=raw,size=10
--cdrom /opt/CentOS-7-x86_64-DVD-1804.iso 
--network network=default   使用默认NAT的网络
--graphics vnc,listen=0.0.0.0 
--noautoconsole

raw:10G  不支持做快照,性能好
qcow2:   支持快照

#打开VNC客户端,安装系统

virsh start centos7     #启动虚拟机  #安装服务
yum install libvirt virt-install qemu-kvm -y
解释:
KVM:Kernel-based Virtual Machine  

libvirt  作用:虚拟机的管理软件,管理虚拟机的生命周期
libvirt: kvm,xen,qemu,lxc....

virt   virt-install virt-clone   作用:虚拟机的安装工具和克隆工具
qemu-kvm  qemu-img (qcow2,raw)作用:管理虚拟机的虚拟磁盘

#启动虚拟机管理服务
systemctl start libvirtd.service
systemctl status libvirtd.service
建议虚拟机内存不要低于1024M,否则安装系统特别慢!
virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name centos7 --memory 1024 --vcpus 1 --disk /opt/centos7.raw,format=raw,size=10 --cdrom /opt/CentOS-7-x86_64-DVD-17.iso --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole
解释:
--virt-type kvm    虚拟化的类型(qemu)
--os-type=linux    系统类型
--os-variant rhel7 系统版本
--name centos7     虚拟机的名字 
--memory 1024      虚拟机的内存
--vcpus 1          虚拟cpu的核数
--disk /opt/centos2.raw,format=raw,size=10
--cdrom /opt/CentOS-7-x86_64-DVD-1804.iso 
--network network=default   使用默认NAT的网络
--graphics vnc,listen=0.0.0.0 
--noautoconsole

raw:10G  不支持做快照,性能好
qcow2:   支持快照

#打开VNC客户端,安装系统

virsh start centos7     #启动虚拟机

第二章 KVM常用管理命令

查看虚拟机

virsh list
virsh list --all  virsh list
virsh list --all

启动虚拟机

virsh start centos7  virsh start centos7

重启虚拟机

virsh reboot centos7  virsh reboot centos7

关闭虚拟机

virsh shutdown centos7
virsh destroy centos7  virsh shutdown centos7
virsh destroy centos7

查看配置文件

virsh dumpxml centos7  virsh dumpxml centos7

导出配置文件

virsh dumpxml centos7 > centos7.xml  virsh dumpxml centos7 > centos7.xml

删除虚拟机

virsh destroy centos7
virsh undefine centos7  virsh destroy centos7
virsh undefine centos7

导入虚拟机

virsh define centos7.xml  virsh define centos7.xml

虚拟机重命名

virsh domrename panghu shouhu  virsh domrename panghu shouhu

主机挂起

virsh suspend centos7  virsh suspend centos7

恢复主机

virsh resume centos7  virsh resume centos7

kvm虚拟机开机启动

virsh autostart centos7
ll /etc/libvirt/qemu/autostart/  virsh autostart centos7
ll /etc/libvirt/qemu/autostart/

小项目:

把虚拟机磁盘迁移到/data目录并且启动

0.停止要迁移的虚拟机

virsh shutdown centos7  virsh shutdown centos7

1.创建数据目录并移动磁盘文件

mkdir /data 
mv /opt/centos7.raw /data   mkdir /data 
mv /opt/centos7.raw /data 

2.使用edit命令修改配置文件

virsh edit centos7
--------------------
 <source file='/data/centos7.raw'/>
--------------------  virsh edit centos7
--------------------
 <source file='/data/centos7.raw'/>
--------------------

3.启动虚拟机

virsh start centos7
virsh list   virsh start centos7
virsh list 

第三章 KVM连接方式

1.VNC

virsh vncdisplay centos7  virsh vncdisplay centos7

2.SSH

3.console显示

登录进需要开启console的虚拟机并添加参数

ssh 192.168.122.{i}  #变量随机数
grubby --update-kernel=ALL --args="console=ttyS0,115200n8"
grep "115200" /boot/grub2/grub.cfg 
reboot
virsh console centos7
#退出
ctrl + ]  ssh 192.168.122.{i}  #变量随机数
grubby --update-kernel=ALL --args="console=ttyS0,115200n8"
grep "115200" /boot/grub2/grub.cfg 
reboot
virsh console centos7
#退出
ctrl + ]

第四章 KVM磁盘管理

1.虚拟机磁盘格式介绍

raw:不支持做快照,性能好
qcow2:支持快照,性能不如raw好

2.查看磁盘信息

qemu-img info centos7.raw   qemu-img info centos7.raw 

3.创建磁盘

qemu-img create -f qcow2 /data/centos7.qcow2 1G  qemu-img create -f qcow2 /data/centos7.qcow2 1G

4.查看磁盘信息

qemu-img info centos7.qcow2  qemu-img info centos7.qcow2

5.调整磁盘容量: 只能加不能减

qemu-img resize /data/centos7.qcow2 1T  qemu-img resize /data/centos7.qcow2 1T

6.磁盘格式转换

1.将虚拟机关机
virsh destroy centos7  virsh destroy centos7
2.转换磁盘格式
qemu-img convert -f raw -O qcow2 centos7.raw centos7.qcow2    qemu-img convert -f raw -O qcow2 centos7.raw centos7.qcow2  

3.编辑配置文件修改为qcow2格式

virsh edit centos7
------------------------------------------
      <driver name='qemu' type='qcow2'/>
      <source file='/opt/centos7.qcow2'/>
------------------------------------------  virsh edit centos7
------------------------------------------
      <driver name='qemu' type='qcow2'/>
      <source file='/opt/centos7.qcow2'/>
------------------------------------------
4.重新启动
virsh start centos7
virsh console centos7  virsh start centos7
virsh console centos7

第五章 KVM快照管理

1.查看快照

virsh snapshot-list centos7  virsh snapshot-list centos7

2.创建快照

virsh snapshot-create-as centos7 snap1
virsh snapshot-list centos7  virsh snapshot-create-as centos7 snap1
virsh snapshot-list centos7

3.恢复快照

virsh snapshot-revert centos7 snap1  virsh snapshot-revert centos7 snap1

4.删除快照

virsh snapshot-delete centos7 snap1  virsh snapshot-delete centos7 snap1

第六章 KVM克隆虚拟机

1.完整克隆

virsh shutdown centos7
virt-clone --auto-clone -o centos7 -n centos7-backup
virsh list --all
virsh dumpxml web-blog-backup |grep "qcow2"
virsh snapshot-list centos7  virsh shutdown centos7
virt-clone --auto-clone -o centos7 -n centos7-backup
virsh list --all
virsh dumpxml web-blog-backup |grep "qcow2"
virsh snapshot-list centos7

2.链接克隆

生成虚拟机磁盘文件
qemu-img create -f qcow2 -b centos7.qcow2 centos7-clone.qcow2   qemu-img create -f qcow2 -b centos7.qcow2 centos7-clone.qcow2 

查看磁盘信息

qemu-img info centos7-clone.qcow2   qemu-img info centos7-clone.qcow2 

生成虚拟机配置文件

virsh dumpxml centos7 > centos7-clone.xml
sed -i '/uuid/d' centos7-clone.xml
sed -i '/mac address/d' centos7-clone.xml
sed -i 's#centos7.qcow2#centos7-clone.qcow2#g' centos7-clone.xml
sed -i '/\<nam/s#centos7#centos7-clone#g' centos7-clone.xml  virsh dumpxml centos7 > centos7-clone.xml
sed -i '/uuid/d' centos7-clone.xml
sed -i '/mac address/d' centos7-clone.xml
sed -i 's#centos7.qcow2#centos7-clone.qcow2#g' centos7-clone.xml
sed -i '/\<nam/s#centos7#centos7-clone#g' centos7-clone.xml

导入配置文件

virsh define centos7-clone.xml 
virsh list --all   virsh define centos7-clone.xml 
virsh list --all 

启动虚拟机

virsh start centos7-clone  virsh start centos7-clone

第七章 KVM桥接网络

默认NAT模式

桥接模式

为了方便测试,可以在VM虚拟机上打开DHCP功能

1.创建桥接网卡和取消桥接网卡

virsh iface-bridge eth0 br0
virsh iface-unbridge br0  virsh iface-bridge eth0 br0
virsh iface-unbridge br0

2.连接克隆新磁盘

cd /opt
qemu-img create -f qcow2 -b centos7.qcow2 bridge.qcow2  cd /opt
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 --vcpus 1 --disk /opt/bridge.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole  virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name centos7-bridge --memory 1024 --vcpus 1 --disk /opt/bridge.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole

4.登录虚拟机查看网卡信息

virsh console centos7-bridge
ip a  virsh console centos7-bridge
ip a

5.在其他主机ping测试

第八章 KVM虚拟机热添加磁盘

1.热添加硬盘

创建磁盘

qemu-img create -f qcow2 centos7-add.qcow2 10G  qemu-img create -f qcow2 centos7-add.qcow2 10G

临时生效添加

virsh attach-disk centos7 /opt/centos7-add.qcow2 vdb --subdriver qcow2  virsh attach-disk centos7 /opt/centos7-add.qcow2 vdb --subdriver qcow2

虚拟机格式化并挂载

virsh console centos7
fdisk -l
mkfs.xfs /dev/vdb
mount  /dev/vdb  /mnt/
df -h  virsh console centos7
fdisk -l
mkfs.xfs /dev/vdb
mount  /dev/vdb  /mnt/
df -h

永久生效添加

virsh attach-disk centos7 /opt/centos7-add.qcow2 vdb --subdriver qcow2
virsh attach-disk centos7 /opt/centos7-add.qcow2 vdb --subdriver qcow2 --config  virsh attach-disk centos7 /opt/centos7-add.qcow2 vdb --subdriver qcow2
virsh attach-disk centos7 /opt/centos7-add.qcow2 vdb --subdriver qcow2 --config

2.剥离磁盘

临时剥离

virsh detach-disk centos7 vdb  virsh detach-disk centos7 vdb

永久剥离

virsh detach-disk centos7 vdb
virsh detach-disk centos7 vdb --config  virsh detach-disk centos7 vdb
virsh detach-disk centos7 vdb --config

3.调整磁盘大小

调整磁盘大小

qemu-img info /opt/centos7-add.qcow2
qemu-img resize /opt/centos7-add.qcow2 +10G  qemu-img info /opt/centos7-add.qcow2
qemu-img resize /opt/centos7-add.qcow2 +10G

添加到虚拟机并查看

virsh attach-disk centos7 /opt/centos7-add.qcow2 vdb --subdriver qcow2
virsh console centos7
fdisk -l /dev/vdb
mount /dev/vdb /mnt/
df -h|tail -1   virsh attach-disk centos7 /opt/centos7-add.qcow2 vdb --subdriver qcow2
virsh console centos7
fdisk -l /dev/vdb
mount /dev/vdb /mnt/
df -h|tail -1 

调整磁盘信息

xfs_growfs /dev/vdb
df -h|tail -1  xfs_growfs /dev/vdb
df -h|tail -1

第九章 KVM热添加网卡

临时添加

virsh attach-interface centos7 --type bridge --mac 52:54:00:b1:b5:8a --source br0 --model virtio detachinterface  virsh attach-interface centos7 --type bridge --mac 52:54:00:b1:b5:8a --source br0 --model virtio detachinterface

永久生效

virsh attach-interface centos7 --type bridge --mac 52:54:00:b1:b5:8a --source br0 --model virtio detachinterface --config   virsh attach-interface centos7 --type bridge --mac 52:54:00:b1:b5:8a --source br0 --model virtio detachinterface --config 

临时剥离

virsh detach-interface centos7 bridge  virsh detach-interface centos7 bridge

永久剥离

virsh detach-interface centos7 bridge
virsh detach-interface centos7 bridge --config  virsh detach-interface centos7 bridge
virsh detach-interface centos7 bridge --config

第十章 KVM热添加内存

创建虚拟机时直接添加最大内存参数

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

如果创建虚拟机的时候没有设置最大内存限制,执行如下操作添加配置

virsh destroy centos7
virsh setmaxmem centos7 4096M
virsh start centos7 
virsh console centos7
free -h   virsh destroy centos7
virsh setmaxmem centos7 4096M
virsh start centos7 
virsh console centos7
free -h 

临时添加

virsh setmem centos7 2048M --live 
virsh console centos7
free -h   virsh setmem centos7 2048M --live 
virsh console centos7
free -h 

永久增大内存

virsh setmem centos7 2048M --config
virsh console centos7
free -h   virsh setmem centos7 2048M --config
virsh console centos7
free -h 

第十一章 kvm虚拟机热与冷添加cpu

KVM热添加cpu

创建最大cpu核数

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

热添加cpu核数

setvcpus centos7 4 --live  setvcpus centos7 4 --live

永久添加cpu核数

setvcpus centos7 4 --config  setvcpus centos7 4 --config

KVM冷添加cpu

编辑配置文件

virsh edit centos7
------------------------------------------------
  <vcpu placement='static' current='2'>4</vcpu>
------------------------------------------------  virsh edit centos7
------------------------------------------------
  <vcpu placement='static' current='2'>4</vcpu>
------------------------------------------------

添加cpu核数

virsh setvcpus centos7 4 --live   virsh setvcpus centos7 4 --live 

永久添加cpu核数

setvcpus centos7 4 --config  setvcpus centos7 4 --config

第十二章 esxi安装部署

安装操作文档:https://blog.51cto.com/10802692/2409826

kvm虚拟机迁移到esxi上

直接使用qemu-img convert 转换为vmdk镜像是无法从ESXI中启动的.
首先使用qemu-img 转换镜像为vmdk.

qemu-img convert -f qcow2 oldimage.qcow2 -O vmdk newimage.vmdk  qemu-img convert -f qcow2 oldimage.qcow2 -O vmdk newimage.vmdk

将该镜像上传至Vmware存储.使用vmkfstools重制镜像

vmkfstools -i oldimage.vmdk newimage.vmdk -d thin  vmkfstools -i oldimage.vmdk newimage.vmdk -d thin

第十三章 kvm图形化管理工具部署

1.初始化

rm -rf /etc/yum.repos.d/*
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

2.安装python依赖
yum -y install git python-pip libvirt-python libxml2-python python-websockify supervisor gcc python-devel
python -m pip install --upgrade --force pip -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install setuptools==33.1.1 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple

3.安装python的Django环境
cd /opt/
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

cat>/etc/yum.repos.d/nginx.repo<<EOF
[nginx-stable]

name=nginx stable repo baseurl=http://nginx.org/packages/centos/\$releasever/\$basearch/ gpgcheck=1 enabled=1 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true

[nginx-mainline]

name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/\$releasever/\$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
EOF
yum makecache fast
yum install nginx -y
yum clean all

5.配置Nginx和代码

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
nginx
netstat -lntup|grep 80

6.配置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

[program:nginx]

command=nginx -g ‘daemon off;’
autostart=true
autorestart=true
stdout_logfile=/var/log/supervisor/nginx.log
redirect_stderr=true
EOF
sed -i “s#nodaemon=false#nodaemon=true#g” /etc/supervisord.conf
supervisord -c /etc/supervisord.conf
重新打开一个终端
supervisorctl status

7.创建用户

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 [email protected](需要管理的kvm机器的ip地址)

另见:
http://blogs.cpolar.cn/articles/2020/02/12/1581481291455.html
http://blogs.cpolar.cn/articles/2020/02/12/1581481367738.html

发表评论

电子邮件地址不会被公开。 必填项已用*标注