KVM权威指南

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     #启动虚拟机

第二章 KVM常用管理命令

查看虚拟机

virsh list
virsh list --all

启动虚拟机

virsh start centos7

重启虚拟机

virsh reboot centos7 

关闭虚拟机

virsh shutdown centos7
virsh destroy centos7

查看配置文件

virsh dumpxml centos7

导出配置文件

virsh dumpxml centos7 > centos7.xml

删除虚拟机

virsh destroy centos7
virsh undefine centos7

导入虚拟机

virsh define centos7.xml

虚拟机重命名

virsh domrename panghu shouhu

主机挂起

virsh suspend centos7

恢复主机

virsh resume centos7

kvm虚拟机开机启动

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

小项目:

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

0.停止要迁移的虚拟机

virsh shutdown centos7

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

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

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

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

3.启动虚拟机

virsh start centos7
virsh list 

第三章 KVM连接方式

1.VNC

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

第四章 KVM磁盘管理

1.虚拟机磁盘格式介绍

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

2.查看磁盘信息

qemu-img info centos7.raw 

3.创建磁盘

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

4.查看磁盘信息

qemu-img info centos7.qcow2

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

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

6.磁盘格式转换

1.将虚拟机关机
virsh destroy centos7
2.转换磁盘格式
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'/>
------------------------------------------
4.重新启动
virsh start centos7
virsh console centos7

第五章 KVM快照管理

1.查看快照

virsh snapshot-list centos7

2.创建快照

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

3.恢复快照

virsh snapshot-revert centos7 snap1

4.删除快照

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

2.链接克隆

生成虚拟机磁盘文件
qemu-img create -f qcow2 -b centos7.qcow2 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 define centos7-clone.xml 
virsh list --all 

启动虚拟机

virsh start centos7-clone

第七章 KVM桥接网络

默认NAT模式

桥接模式

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

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

virsh iface-bridge eth0 br0
virsh iface-unbridge br0

2.连接克隆新磁盘

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

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

virsh console centos7-bridge
ip a

5.在其他主机ping测试

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

1.热添加硬盘

创建磁盘

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

临时生效添加

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

3.调整磁盘大小

调整磁盘大小

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 

调整磁盘信息

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

临时剥离

virsh detach-interface centos7 bridge

永久剥离

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

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

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

热添加cpu核数

setvcpus centos7 4 --live

永久添加cpu核数

setvcpus centos7 4 --config

KVM冷添加cpu

编辑配置文件

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

添加cpu核数

virsh setvcpus centos7 4 --live 

永久添加cpu核数

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

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

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 root@10.0.0.113(需要管理的kvm机器的ip地址)

详情见:
https://www.jianshu.com/p/3f74e93dc1a4
https://www.jianshu.com/p/c71001437964




最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,445评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,889评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,047评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,760评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,745评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,638评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,011评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,669评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,923评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,655评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,740评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,406评论 4 320
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,995评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,961评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,023评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,483评论 2 342

推荐阅读更多精彩内容