kvm 基本安装和使用

Posted on Posted in virtualization

查看

-> root@mycentos ~ ☺ # cat /proc/cpuinfo | grep vmx # Intel
-> root@mycentos ~ ☺ # cat /proc/cpuinfo | grep svm # AMD
-> root@mycentos ~ ☺ # yum -y install kvm virt-manager libvirt # kvm 虚拟化模块 virt-manager 图形化管理工具 libvirt 虚拟化服务
-> root@mycentos ~ ☺ # /etc/init.d/libvirtd start 
-> root@mycentos ~ ☺ # chkconfig libvirtd on
-> root@mycentos ~ ☺ # lsmod | grep kvm
kvm_intel              55432  0 
kvm                   346318  1 kvm_intel
-> root@mycentos ~ ☺ # virsh list # 操作库
-> root@mycentos ~ ☺ # virt-manager # 启动界面操作

-> root@mycentos ~ ☺ # echo $LANG # 小技巧,界面临时变成中文字符
en_US.UTF-8
-> root@mycentos ~ ☺ # LANG="zh_CN.UTF-8"

配置KVM桥接功能

-> root@mycentos ~ ☺ # ifconfig # virbr0 是做 nat 的
virbr0    Link encap:Ethernet  HWaddr 52:54:00:D6:BE:14  
          inet addr:192.168.122.1  Bcast:192.168.122.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
-> root@mycentos ~ ☺ # yum -y install bridge-utils
-> root@mycentos /etc/sysconfig/network-scripts ☺ # cat ifcfg-eth0
DEVICE=eth0
HWADDR=00:0C:29:91:5D:31
TYPE=Ethernet
UUID=b17fb0a0-4480-4c81-9b71-e62ec33971e3
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=dhcp
BRIDGE="br0"  # 添加这个
-> root@mycentos /etc/sysconfig/network-scripts ☺ # cat ifcfg-br0 # 添加一个br0
DEVICE="br0"
NM_CONTROLLED="yes"
ONBOOT="yes"
TYPE="Bridge"
BOOTPROTE=NONE
IPADDR=192.168.1.160 # 可以和以前的eth0一样
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=192.168.1.1
-> root@mycentos ~ ☺ # brctl show # 查看桥设备状态
bridge name bridge id       STP enabled interfaces
br0     8000.000c29915d31   no      eth0
virbr0      8000.525400d6be14   yes     virbr0-nic

-> root@mycentos ~ ☺ # fdisk /dev/sdb # 创建一个新分区
-> root@mycentos ~ ☺ # mkfs.ext4 /dev/sdb1 # 格式化
-> root@mycentos ~ ☺ # mount /dev/sdb1 /var/lib/libvirt/images # 这个路径是默认存放虚拟机的路径
-> root@mycentos ~ ☺ # cat /etc/fstab
/dev/sdb1   /var/lib/libvirt/images ext4    defaults    0   0

基本命令

-> root@mycentos ~ ☺ # virsh list
 Id    Name                           State
----------------------------------------------------
 1     ubuntu                         running
-> root@mycentos ~ ☺ # virsh start ubuntu # 启动一个系统
-> root@mycentos ~ 1☺ # virsh shutdown ubuntu # 这个暂时关机不好使,是电源管理的问题。需要安装acpi服务
-> root@mycentos ~ 1☺ # virsh list --all # 显示所有的,包括关机的
# 给 kvm 里的系统配置网卡 IP 和 yum 源,关闭 iptables 和 selinux
# 可以在宿主机上安装 httpd 挂载 ISO yum,kvm里添加源
(KVM)-> root@mycentos ~ 1☺ # cat /etc/yum.repos.d/rhel6
[rhel6]
name=rhel6
baseurl=http://192.168.1.160
enabled=1
gpgcheck=0
(KVM)-> root@mycentos ~ 1☺ # yum -y install acpid
(KVM)-> root@mycentos ~ 1☺ # /etc/init.d/acpid restart

-> root@mycentos ~ ☺ # virsh autostart ubuntu # 宿主机设置自动启动

克隆kvm虚拟机

  1. 克隆器,需要关机
  2. 语法 virt-clone -o 原虚拟机名字 -n 新虚拟机名字 -f 新虚拟机镜像存放路径
  3. 选项: -o old -n new
  4. 虚拟机镜像是整个虚拟机文件。不是系统镜像iso
ls -al /var/lib/libvirt/images/ubuntu.img # 虚拟机镜像文件
  1. 克隆完毕,mac地址需要修改,网卡配置也需要修改
virsh list --all
virt-clone -o ubuntu -n ubuntu-clone -f /var/lib/libvirt/images/ubuntu.img

一台kvm虚拟机两部分组成,虚拟机配置文件和镜像img

/etc/libvirt/qemu # 目录下的xml文件即是配置文件

让克隆的机器上网

方法一

rm -rf /etc/udev/rules.d/70-persistent-*

vim /etc/sysconfig/network-scripts/ifcfg-eth0
# 删除mac地址
IPADDR=192.168.1.100
NETMASK=255.255.255.0

reboot

方法二

start_udev # 重新启动udev服务,自动生成刚删除的/etc/udev/rules.d/70-persistent-*文件,生成新的udev
service network restart

KVM 快照

kvm 默认使用raw格式镜像,性能好,速度快,缺点不支持一些新的功能。如需使用快照,磁盘格式必须转为 qcow2

  1. 如果分区是lvm分区,可以利用lvm进行kvm的快照备份
  2. 使用qcow2格式的镜像创建快照
  3. 目前主要虚拟机镜像格式: raw/cow/qcow/qcow2/vmdk
mount /dev/sdb1 /var/lib/libvirt/images/
qemu-img info /var/lib/libvirt/images/ubuntu.img # 查看格式

virsh shutdown ubuntu
# 转换磁盘格式
# qemu-img 参数
# -f 源镜像的格式
# -O 目标镜像的格式
qemu-img convert -f raw -O qcow2 /var/lib/libvirt/images/ubuntu.img /var/lib/libvirt/images/ubuntu.qcow2

# 修改虚拟机配置文件,使用qcow2格式镜像文件,启动虚拟机
virsh list --all
virsh edit ubuntu # 修改配置,vim直接编辑xml文件是不生效的,如果vim编辑了xml,需要重启 /etc/init.d/libvirtd restart
...
<driver name='qemu' type='qcow2' cache='none'/> # 修改type
<sorce file='/var/lib/libvirt/images/ubuntu.qcow2'> # 修改镜像文件存储路径
...

快照管理

virsh list --all
virsh snapshot-create ubuntu # 创建快照
virsh snapshot-create-as ubuntu ubuntusp # 虚拟机名字,快照名
virsh snapshot-list ubuntu # 查看当前的快照列表
virsh snapshot-current ubuntu # 查看当前使用的快照
# 快照配置文件 /var/lib/libvirt/qemu/snapshotp/ubuntu(虚拟机名字)
# 快照占用的是虚拟机自身的 img 镜像空间

virsh domstate ubuntu
qemu-img info /var/lib/libvirt/images/ubuntu.qcow2 # 查看快照信息

快照恢复

恢复快照必须关闭虚拟机。阿里云也是一样

virsh snapshot-revert ubuntu httpd # 恢复ubuntu快照httpd

删除快照

virsh snapshot-delete ubuntu httpd

开机创建快照(上面的例子是关机时运行的)

virsh snapshot-create-as ubuntu http-start
virsh snapshot-list ubuntu # 查看,快照会占用了空间,不是0,存储开机时的运行状态,比如内存中的数据

virsh 基本命令

  • virsh list 查看已打开的虚拟机列表
  • virsh list --all 查看所有的虚拟机列表
  • virsh version 查看virsh版本
  • virsh start node1 启动虚拟机
  • virsh shutdown node1 关闭虚拟机
  • virsh dumpxml node1 > /opt/node1.xml 导出node1虚拟机配置文件
  • virsh undefine node1 取消node1定义,在虚拟机列表中删除,只是删掉了 /etc/libvirt/qemu
  • virsh define /opt/node1.xml 重新加回来,上面那个dumpxml
  • virsh destroy node1 强制关闭虚拟机

字符界面安装 kvm

准备环境

上传一个 iso 到 /var/lib/libvirt/images/ 下

安装 vnc 软件

yum -y install tigervnc
/etc/init.d/libvirtd status

virt-install # 通过这个命令安装

参数

  • -n NAME, --name=NAME 指定 guest 名字
  • -r MEMORY, --ram=MEMORY 指定内存大小
  • --vcpus=VCPUS 指定虚拟机的 CPU 数量
  • --disk 指定虚拟机磁盘存储文件的路径
  • size=5 指定虚拟磁盘的大小,单位是 G
  • -f DISKFILE, --file=DISKFILE 虚拟机的虚拟磁盘,磁盘可以是文件、磁盘分区或者是 lvm。此选项用来指定虚拟机磁盘的路径
  • -s DISKSIZE, --file-size=DISKSIZE 指定虚拟磁盘的大小单位是 G;如果 --file 指定文件的路径不存在,并且 00nonsparse 选项没有指定,对这个文件不会预先分配存储空间
  • --accelerate KVM 或 KQEMU 内核加速器,这个选项默认是添加的。另外,如果系统KVM 和 KQEMU 加速器都支持,有限使用 kvm 加速器。
  • -c CDROM, --cdrom=CDROM 指定用于全虚拟化guest的虚拟 cd,可以使 iso,也可以是 cdrom 设备。
  • -w NETWORK, --network=NETWORK 三种,bridge:BRIDGE,network:NAME和 user
  • -l LOCATION,--location=LOCATION 指定 kernel 和 initrd 的安装源,系统光盘的位置,四中格式:DIRECTORY、nfs:hosts:/path、http://host/path、ftp://host/path
  • -pxe 使用 PEX boot 协议来加载初始化的 ramdisk 和 kernel,以便于启动 guest段的安装进程
  • -x EXTRA, --extra-args=EXTRA 用来给加载的 kernel 和 initrd 提供额外的内核参数

实例,使用 virt-install 安装 kvm 虚拟机

:~# virsh list --all
 Id    名称                         状态
----------------------------------------------------
 1     centos6.5                      running
:~# virt-install --name centos6.5-command --ram 1024 --vcpus=1 --disk path=/var/lib/libvirt/images/centos6.5-command.img,size=5 --accelerate --cdrom /var/lib/libvirt/images/CentOS-6.5-x86_64-bin-DVD1.iso --network bridge=br0 --graphics vnc
:~# yum -y install virt-viewer
:~# vncviewer 127.0.0.1 # 测试环境是本地
# KVM 中的 vnc 默认绑定的是本机127.0.0.1,如果其他机器用 vnc 客户端,需要把 vnc 半丁到服务器的 IP 地址或者0.0.0.0,即本机的所有 IP 地址都坚挺5900端口
vim /etc/libvirt/qemu.conf # 这个应该提前做,否则,就在界面重启centos6.5-command
...
vnc_listen = "0.0.0.0"
...
/etc/init.d/libvirtd restart

xshell
只有在物理机上必须安装了图形界面,在可以使用 vnc

vncviewer 192.168.1.100:5900
gnome-terminal

使用 ks 文件,无交互字条界面安装

virt-install \
--name rhel \
--ram 1024 \
--vcpus=1 \
--disk path=/var/lib/libvirt/images/rhel.img, size=15 \
--accelerate \
--location=http://192.168.1.100/rhel/ \
--network bridge=br0 \
-x "ks=http://192.168.1.100/anaconda-ks.cfg"

ls /root/anaconda-ks.cfg # 应答文件
» 转载请注明来源:呢喃 » kvm 基本安装和使用