虚拟化之KVM-阿里云开发者社区

开发者社区> 开发与运维> 正文

虚拟化之KVM

简介: 目录 一、安装 1.1、先确认CPU是否支持虚拟化 1.2、安装KVM及相关工具包 1.3、启动libvirtd并设置为开机启动 1.

目录

一、安装
    1.1、先确认CPU是否支持虚拟化
    1.2、安装KVM及相关工具包
    1.3、启动libvirtd并设置为开机启动
    1.4、创建磁盘
    1.5、开始安装虚拟机

二、虚拟机操作
    2.1 虚拟机启停操作
    2.2 虚拟机网卡操作
    2.3 虚拟机快照
    
三、获取帮助
    3.1 获取所有命令帮助
    3.2 获取子命令帮助

一、安装

1.1、先确认CPU是否支持虚拟化

intel的CPU虚拟化技术是vmx,AMD的CPU是svm:

[root@localhost ~]# grep -E "vmx|svm" /proc/cpuinfo
flags       : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts mmx fxsr sse sse2 ss ht syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts nopl xtopology tsc_reliable nonstop_tsc aperfmperf pni pclmulqdq vmx ssse3 cx16 pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm ida arat epb pln pts dtherm tpr_shadow vnmi ept vpid fsgsbase tsc_adjust smep

有输出结果,表示你的CPU支持虚拟化

1.2、安装KVM及相关工具包

[root@localhost ~]# yum install qemu-kvm qemu-kvm-tools libvirt virt-manager virt-install

1.3、启动libvirtd并设置为开机启动

libvirtd进程会创建一个桥接的网上virbr0,而且IP地址是192.168.122.1

[root@localhost ~]# systemctl  start libvirtd
[root@localhost ~]# systemctl  enable  libvirtd
[root@localhost ~]# ifconfig  virbr0
virbr0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255
        ether 52:54:00:cb:ca:b0  txqueuelen 0  (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

下面的是为虚拟机分配IP地址的服务:

[root@localhost ~]# ps -aux | grep dns
nobody     2877  0.0  0.0  15552   888 ?        S    13:06   0:00 /sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/usr/libexec/libvirt_leaseshelper
root       2878  0.0  0.0  15524   180 ?        S    13:06   0:00 /sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/usr/libexec/libvirt_leaseshelper
root       4546  0.0  0.0 112664   980 pts/0    S+   13:29   0:00 grep --color=auto dns

1.4、创建磁盘

[root@llocalhost ~]# qemu-img create -f qcow2 /opt/CentOS-7-x86_64.qcow2 10G #创建一个格式为qcow2大小为10G的磁盘
Formatting '/opt/CentOS-7-x86_64.raw', fmt=qcow2 size=10737418240 

注意:常用的磁盘格式有raw和qcow2。raw是直接从物理磁盘上划一块空间出来,创建磁盘时设定的磁盘是10GB,生成出来的磁盘文件就是10GB,raw格式的磁盘比较占用宿主机的资源,但是它的性能相较于qcow2要好。而qcow2格式,只是设定了一个逻辑大小为10GB,使用磁盘空间最多不能超过10GB,,生成的磁盘文件开始只有100KB,这个文件的大小 ,会随着你的使用增大,但不会超过10GB。

1.5、开始安装虚拟机

[root@LOCALHOST imgs]# virt-install --virt-type=kvm --name=openstack-load_balancing-node1 --ram=4096 --vcpus=1 --cdrom=/system/iso/CentOS-7-x86_64-Minimal-1511.iso --disk path=/system/imgs/openstack-load_balancing-node1.qcow2,size=100,format=qcow2 --network bridge=br1 --graphics vnc,listen=0.0.0.0,port=60000 --noautoconsole

#参数解释
--virt-type=kvm     指定虚拟机类型为KVM

--name=openstack-load_balancing-node1   指定虚拟机名称

--ram=4096          指定内存为4096M,默认单位是M

--vcpus=1           指定虚拟CPU个数为1个

--cdrom=/system/iso/CentOS-7-x86_64-Minimal-1511.iso    指定安装虚拟机用的镜像

--disk path=/system/imgs/openstack-load_balancing-node1.qcow2,size=100,format=qcow2     指定虚拟磁盘,切记要加上size和format,否则安装系统时会出现磁盘仅为194K,不能安装系统的情况

--network bridge=br1    桥接到宿主机的br1网卡

--graphics vnc,listen=0.0.0.0,port=60000    使用VNC远程桌面连接,操作安装系统用,端口为60000;VNC默认的端口为5900,有时可能会被运营商禁用,这时你需要换一个端口试试。

--noautoconsole     不要自动尝试连接到客户端控制台

注意:要想为虚拟机添加多块网卡,就需要指定多个“--network” 参数。

命令执行成功,如下图:

img_3223d11287bec318da76b37481f87728.png
image.png

这时就可以用VNC连接图形界面,进行安装了:


img_bf6f7bb048119a6b67ebd4490f664122.png
image.png
img_915e772e57ff7759bc9e3ce7f57a0395.png
image.png

进入安装界面,将CentOS 7无规则的网卡命名方式修改为eth0 、eth1这样,需在上述界面中按上方向键选中“Install CentOS Linux 7”,然后按“Tab”键进行编辑,给内核传参,加入“net.ifnames=0 biosdevname=0”

img_15a9390fc9d9bfdda1517a4e53d5d2e9.png
image.png

接下来的系统安装步骤就不再赘述了。

二、虚拟机操作

2.1 虚拟机启停操作

查看: virsh list --all
开启: virsh start openstack-load2
重启:virsh reboot openstack-load2
关机:virsh shutdown openstack-load2
删除:virsh undefine openstack-load2
随宿主机自启动:virsh autostart openstack-load2
恢复:virsh define /etc/libvirtd/qemu/openstack-load2.xml

注意:要想恢复虚拟机,必须保证虚拟机配置文件中<source file='/system/imgs/openstack-load2.qcow2'/> 定义的虚拟磁盘是存在的。

2.2 虚拟机网卡操作

  • 列出指定虚拟机的网卡:

命令:virsh domiflist openstack-compute1

  • 动态添加虚拟机网卡:

命令:virsh attach-interface --domain openstack-compute1 --type bridge --source br2 --model virtio --persistent --config
注意:

  • --domain 后面可以跟虚拟机名称或者虚拟机ID。
  • --persistent 实时更改并将修改写入配置文件中
  • --config 下一次启动时生效
  • 移除虚拟网卡

命令:virsh detach-interface openstack-load1 --type bridge --mac 52:54:00:0f:0d:df
注意:虚拟机网卡MAC地址可以通过virsh domiflist openstack-load1命令获取

2.3 虚拟机快照

  • 列出指定虚拟的所有快照:

命令:virsh snapshot-list openstack-load1

  • 为指定虚拟机创建快照:
    • 命令格式: virsh snapshot-create-as 虚拟机名 快照别名

命令:virsh snapshot-create-as openstack-load1 openstack-load1-base-180324

  • 列出指定虚拟机的快照

命令:virsh snapshot-list openstack-compute1

  • 查看虚拟机当前快照:

命令:virsh snapshot-current openstack-load1

  • 为虚拟机恢复至指定快照
[root@LOCALHOST ~]# virsh snapshot-revert --help
  NAME
    snapshot-revert - Revert a domain to a snapshot

  SYNOPSIS
    snapshot-revert <domain> [<snapshotname>] [--current] [--running] [--paused] [--force]

  DESCRIPTION
    Revert domain to snapshot

  OPTIONS
    [--domain] <string>  domain name, id or uuid
    [--snapshotname] <string>  snapshot name
    --current        revert to current snapshot
    --running        after reverting, change state to running
    --paused         after reverting, change state to paused
    --force          try harder on risky reverts

命令:virsh snapshot-revert openstack-load1 openstack-load1-base-180324 --running
- openstack-load1:虚拟机名称
- openstack-load1-base-180324 是快照名称,可通过virsh snapshot-list 虚机名查看
- --running 表示恢复快照后,将虚拟机状态改为正在运行

2.4 虚拟机改名

1)终端命令行下查看虚拟机

[root@kvm-server ~]# virsh list
Id Name State
----------------------------------------------------
4 vmserver004 running
5 vmserver003 running
6 vmserver005 running

2)关闭虚拟机

[root@kvm-server ~]# virsh shutdown vmserver003

3)导出xml文件

[root@kvm-server ~]# cd /etc/libvirt/qemu
[root@kvm-server qemu]# ls
networks vmserver003.xml vmserver004.xml vmserver005.xml
[root@kvm-server qemu]# virsh dumpxml vmserver003 > test-huanqiu.xml
[root@kvm-server qemu]# ls
networks test-huanqiu.xml vmserver004.xml vmserver005.xml

4)编辑test-huanqiu.xml文件,将里面的vmserver003全部替换成test-huanqiu

[root@kvm-server qemu]# sed -i 's/vmserver003/test-huanqiu/g' test-huanqiu.xml
  1. 重定义
[root@kvm-server qemu]# virsh undefine vmserver003
[root@kvm-server qemu]# virsh define test-huanqiu.xml

若有修改img也将文件重命名下如:
[root@kvm-server qemu]# vim test-huanqiu.xml # 将里面使用的img镜像文件名也可以重命名(文件里有镜像文件路径)

6)启动虚拟机

[root@kvm-server qemu]# virsh start test-huanqiu

7) 重命名后查看

[root@kvm-server qemu]# virsh list
Id Name State
----------------------------------------------------
4 vmserver004 running
5 test-huanqiu running
6 vmserver005 running

2.5 KVM虚拟机硬件配置修改、磁盘扩展以及主机迁移

1,KVM虚拟机硬件配置修改
关机,virsh edit host 编译虚拟机配置文件,进行内存 、cpu参数修改。修改以后重启虚拟机加载最新配置。

2,磁盘扩展
由于非专业搞虚拟化,这里只用于测试环境部署使用。更为专业的磁盘扩展请参考其他资料。这里以linux 66主机的qcow2为例扩展。操作步骤:
(1)关机
(2)扩展
qemu-img resize linuxt66.qcow2 +5G
(3)启动并登录服务器扩展磁盘

3,主机迁移
思路:
(1)导出xml文件
(2)转移虚拟机磁盘文件
(3)新服务器重新定义主机 virsh define host
(4)启动

三、获取帮助

3.1 获取所有命令帮助

命令:virsh --help

3.2 获取子命令帮助

命令: virsh 子命令 --help

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章