KVM特点

KVM必须在具备Intel VT或AMD-V功能的x86平台上运行。KVM包含一个为处理器提供底层虚拟化,可加载的核心模块kvm.ko(kvm-intel.ko或kvm-AMD.ko)。使用一个经过修改的QEMU(qemu-kvm),作为虚拟机上层控制和界面。

由于KVM仅是一个简单的虚拟化模块,所以它的内存管理没有自我实现,需借助于Linux内核实现内存管理。KVM能够使用Linux所支持的任何存储,在驱动程序的实现上,直接借助于Linux内核来驱动任何硬件。在性能上KVM继承了Linux很好的性能和伸缩性,在虚拟化性能方面,已经达到非虚拟化原生环境95%左右的性能(官方数据)。KVM拓展性也非常好,客户机和宿主机都可以支持非常多的CPU数量和非常大的内存,可以过载使用CPU和内存,还可借助KSM技术实现对内存的过量使用,且保证性能依旧非常不错。
mark
KVM的架构非常简单,就是内核的一个模块,用户空间通过qemu模拟硬件提供给虚拟机使用,一个虚拟机就是一个普通的Linux进程,通过对这个进程的管理,就可以完成对虚拟机的管理。

KVM虚拟化是通过内核来控制虚机运行的,在Linux中,内核版本在2.6之后的都已经集成了KVM内核驱动,只需要安装我们所需要的管理接口和管理软件就可以正常使用了。


一键安装脚本

**Centos 7一键安装脚本:**请一定要先修改里面的用户设置!!!
请用root用户执行脚本,执行此脚本前,请确认有3张网卡以上,网卡1,网卡2会变为桥接卡,不可用,提前设置网卡3IP或者动态IP,ssh连接卡3,安装完成后重启生效

报错:关闭了NetworkManager,网卡将采用传统的ifcfg-ethx这样的命名方式,重启后如果出现无法连接网卡3,或其他除桥接卡以外的IP。基本上是配置文件的问题,要么是参数设置有误,要么就是有异常字符。
如果能连接卡3,但是是配置的静态IP得不到IP,但是用原来的ifcfg-eno1之类的命名法可以得到IP,桥接卡也无法桥接,systemctl restart network
Failed to start LSB: Bring up/down networking.错误。这是配置文件找不到对应的网卡的原因,用ip addr查看各网卡MAC,记录下来,在每个对应的ifcfg-ethx
文件里面添加一行:HWADDR=(网卡MAC),然后重启系统,之后桥接卡,静态IP等都正常了。

#!/bin/bash
export PATH="/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin"
# #######################
# Author: LeoLan
# Blog: www.leolan.top
# Data: 20170605
# ENV: Centos 7(Mini纯净的环境)
# Script: Install KVM
# #######################
#
# ############## 用户设置部分 #####################
# 如果没有那么多块网卡,也一样填写,多余的网卡不会被启用(多余的卡mac随便填)
# 设置主机名
hostname="name02_kvm"
#
# 用于备份网卡配置,填写网卡名开头。比如ifconfig看到em1、em2,那个就是em开头。
netcard="em"
#
# 设置VNC连接密码
vncpasswd="123456"
#
# 默认启用Firewalld防火墙,需要放行的端口请以英文逗号隔开,最末尾不要有逗号。
firewallport=22,5899
#
# 桥接网卡0(网口1) IP NETMASK GATEWAY DNS
br0="172.16.16.73"
gateway0="172.16.16.1"
netmask0="255.255.255.0"
DNS0a="8.8.8.8"
DNS0b="8.8.4.4"
#
# 桥接网卡1(网口2) IP NETMASK GATEWAY DNS
br1="172.16.16.105"
gateway1="172.16.16.1"
netmask1="255.255.255.0"
DNS1a="8.8.8.8"
DNS1b="8.8.4.4"
#
# 普通网卡3(网口3) IP NETMASK GATEWAY DNS
ip2="172.16.16.106"
gateway2="172.16.16.1"
netmask2="255.255.255.0"
DNS2a="8.8.8.8"
DNS2b="8.8.4.4"
#
######################## 以下部分暂时不用设置 ################################
# 设置网卡MAC(避免某些老机子关闭自动命名后无法获取IP及无法管理网卡的问题)
# 请用ip addr命令查看网卡对应的MAC地址,其他静态IP如无法获取,则要设置MAC
# 分别对应网卡1、网卡2、网卡3(不用管这部分,下面脚本已配置自动获取mac)
# eth0mac="18:66:da:56:ad:68"
# eth1mac="18:66:da:56:ad:69"
# eth2mac="18:66:da:56:ad:70"
#
#
# 关于UUID
# 特殊机型设置(安装后配置是正确的,但是内外网都无法联通的情况,dell R530遇到过这种情况)
# 查看UUID可以cat /etc/sysconfig/network-scripts/bakup/ifcfg-em*查看,或nmcli con show命令查看。
# 如果已经安装完成了(不想重装系统的),就修改网卡配置,修改或注释UUID。
# 以下这段不用管,已设置脚本自动配置了。
# UUID1="05cb6074-23fe-4f14-b206-cc313bf17788"
# UUID1="8e828eae-6acb-47cc-9099-a7255a803cee"
#
#
# ############# 用户设置部分结束 ##################

# ############################################################################
# 环境检测
egrep '(vmx|svm)' /proc/cpuinfo
[ $? -ne 0 ] && echo "Hardware virtualization is not supported(本机不支持虚拟化,安装终止)" && exit 1
#
# OFF Card auto rename
cp /etc/sysconfig/grub /etc/sysconfig/grub.bak
cat > /etc/sysconfig/grub <<EOF
GRUB_TIMEOUT=5
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto rhgb net.ifnames=0 biosdevname=0 quiet"
GRUB_DISABLE_RECOVERY="true"
EOF
grub2-mkconfig -o /boot/grub2/grub.cfg
#
# OFF firewalld,NetworkManager,selinux
systemctl disable iptables
systemctl stop iptables
systemctl stop firewalld
systemctl disable NetworkManager      #禁用NetworkManager服务管理网卡配置
systemctl stop NetworkManager
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
grep SELINUX=disabled /etc/selinux/config
setenforce 0
#
# 创建桥接网卡
cat > /etc/sysconfig/network-scripts/ifcfg-br0 <<EOF
TYPE="Bridge"
BOOTPROTO="static"
NAME="br0"
DEVICE="br0"
ONBOOT="yes"
IPADDR="$br0"
GATEWAY="$gateway0"
NETMASK="$netmask0"
DNS1="$DNS0a"
DNS2="$DNS0b"
EOF
#
cat > /etc/sysconfig/network-scripts/ifcfg-br1 <<EOF
TYPE="Bridge"
BOOTPROTO="static"
NAME="br1"
DEVICE="br1"
ONBOOT="yes"
IPADDR="$br1"
GATEWAY="$gateway1"
NETMASK="$netmask1"
DNS1="$DNS1a"
DNS2="$DNS1b"
EOF
#
# 备份网卡配置
#ifconfig |grep flags |awk -F : '{print $1}'
mkdir /etc/sysconfig/network-scripts/bakup
mv /etc/sysconfig/network-scripts/ifcfg-$netcard* /etc/sysconfig/network-scripts/bakup
# 自动获取UUID
UUID1=`cat /etc/sysconfig/network-scripts/bakup/ifcfg-${netcard}1 |grep UUID`
UUID2=`cat /etc/sysconfig/network-scripts/bakup/ifcfg-${netcard}2 |grep UUID`
UUID3=`cat /etc/sysconfig/network-scripts/bakup/ifcfg-${netcard}3 |grep UUID`
# 自动获取mac
eth0mac=`ifconfig | grep ether | awk '{print $2}'|awk 'NR==1'`
eth1mac=`ifconfig | grep ether | awk '{print $2}'|awk 'NR==2'`
eth2mac=`ifconfig | grep ether | awk '{print $2}'|awk 'NR==3'`
#
cat > /etc/sysconfig/network-scripts/ifcfg-eth0 <<EOF
TYPE="Ethernet"
HWADDR="$eth0mac"
BOOTPROTO="none"
NAME="eth0"
BRIDGE="br0"
DEVICE="eth0"
ONBOOT="yes"
NM_CONTROLLED="yes"
$UUID1
EOF
#
cat > /etc/sysconfig/network-scripts/ifcfg-eth1 <<EOF
TYPE="Ethernet"
HWADDR="$eth1mac"
BOOTPROTO="none"
NAME="eth1"
BRIDGE="br1"
DEVICE="eth1"
ONBOOT="yes"
NM_CONTROLLED="yes"
$UUID2
EOF
#
cat > /etc/sysconfig/network-scripts/ifcfg-eth2 <<EOF
TYPE="Ethernet"
HWADDR="$eth2mac"
BOOTPROTO="static"
NAME="eth2"
DEVICE="eth2"
ONBOOT="yes"
NM_CONTROLLED="yes"
$UUID3
IPADDR="$ip2"
GATEWAY="$gateway2"
NETMASK="$netmask2"
DNS1="$DNS2a"
DNS2="$DNS2b"
EOF
# set hostname
hostnamectl --static set-hostname $hostname
#
# 打开文件的最大数目(套接字连接处于打开状态时会打开许多文件,这里放宽限制)
echo ' * - nofile 100000 ' >>/etc/security/limits.conf
#
# restart network and libvirt
systemctl restart network
#
# download yum repo
yum install -y wget
cd /etc/yum.repos.d/
wget http://mirrors.163.com/.help/CentOS7-Base-163.repo
wget https://fedorapeople.org/groups/virt/virtio-win/virtio-win.repo
wget http://mirrors.aliyun.com/repo/Centos-7.repo -O Centos-7-aliyun.repo
# 添加qemu-kvm-rhev源,代替qemu-kvm,是为了修复无法开机创建快照的bug。
cat > qemu-kvm-rhev.repo <<EOF
[qemu-kvm-rhev]
name=oVirt rebuilds of qemu-kvm-rhev
baseurl=http://resources.ovirt.org/pub/ovirt-3.5/rpm/el7Server/
mirrorlist=http://resources.ovirt.org/pub/yum-repo/mirrorlist-ovirt-3.5-el7Server
enabled=1
skip_if_unavailable=1
gpgcheck=0
EOF
#
cd ~
#
# install EPEL repo
yum -y install epel-release
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
#
yum clean all && yum makecache
#
# Install Python repo
wget --no-check-certificate https://github.com/pypa/pip/archive/9.0.1.tar.gz
tar zvxf 9.0.1.tar.gz
cd pip-9.0.1/
python setup.py install
cd ~
rm -rf /root/9.0.1.tar.gz
rm -rf /root/pip-9.0.1
#
#pip install web.py -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
#
#
# Install ENV
yum install -y gcc gcc-c++ make automake cmake libtool bison flex perl git mercurial vim tcpdump net-tools lrzsz tree screen lsof telnet
yum install -y readline-devel bzip2-devel zlib-devel libxml2-devel libxslt-devel openssl-devel kernel-devel pcre-devel boost-devel python-devel python-setuptools libpcap-devel acpid htop
#
# Install KVM
# 这里用qemu-kvm-rhev代替qemu-kvm是为了修复qemu1.5在centos7上开机状态无法创建快照的bug,详见kvm配置、应用、报错节
yum install -y qemu-kvm-rhev qemu-kvm-tools qemu-img qemu-kvm-tools
ln -s /usr/libexec/qemu-kvm /usr/sbin/
#
yum install -y kvm python-virtinst libvirt bridge-utils virt-manager virtio-win virt-viewer virt-v2v libguestfs-tools libvirt-python libvirt-client virt-install
#
# 安装"X Window System" 图形界面管理并解决中文乱码
yum groupinstall -y "X Window System"
yum install -y dejavu-lgc-sans-fonts
yum groupinstall -y "Fonts"
#
# #################################################################
# Install VNC Server
# x11vnc 需要显示输出
yum install -y gnome-classic-session gnome-terminal nautilus-open-terminal control-center liberation-mono-fonts x11vnc

unlink /etc/systemd/system/default.target 
ln -sf /lib/systemd/system/graphical.target /etc/systemd/system/default.target

#
# 步骤 2 - 配置访问密码
#
x11vnc -storepasswd $vncpasswd /etc/x11vnc.pass 
# x11vnc -storepasswd [passwd] /etc/x11vnc.pass

# 步骤 3 - 创建服务
#
cat > /lib/systemd/system/x11vnc.service << EOF
[Unit]
Description=Start x11vnc at startup.
After=multi-user.target

[Service]
Type=simple
ExecStart=/usr/bin/x11vnc -auth guess -forever -loop -noxdamage -repeat -rfbauth /etc/x11vnc.pass -rfbport 5899 -shared

[Install]
WantedBy=multi-user.target
EOF
#
echo "Configure Services"
systemctl enable x11vnc.service
systemctl daemon-reload
#
# 步骤 4 - 配配置防火墙端口,配置和启动服务
# 防火墙放行端口,防火墙已关闭的忽略
echo "Configure firewall"
systemctl start firewalld
firewall-cmd --set-default-zone=public
firewall-cmd --zone=public --add-interface=br0 --permanent
firewall-cmd --zone=public --add-interface=br1 --permanent
firewall-cmd --zone=public --add-interface=eth0 --permanent
firewall-cmd --zone=public --add-interface=eth1 --permanent
firewall-cmd --zone=public --add-interface=eth2 --permanent
#
# 统计端口个数,以便下一步做循环
numss=`echo $firewallport | awk -F',' '{print NF}'`
# 循环打印出端口,赋值给portss,然后再加入防火墙。
for ((i=1;i<=$numss;i++)) do portss=`echo $firewallport |awk -F "," {'print $'${i}''}`;
      firewall-cmd --zone=public --add-port=$portss/tcp --permanent
done
#
firewall-cmd --reload && systemctl enable firewalld
#
# 如果没有使用firewalld而是使用了iptables,就修改以下部分。
# /sbin/iptables -I INPUT -p tcp --dport 5899 -j ACCEPT
# /etc/init.d/iptables save
# service iptables restart
#
#
##############################################################################################
#
#
# Install finish
yum update -y
#
# 开启内存共享(更节约内存)
systemctl start ksm
systemctl start ksmtuned
systemctl enable ksm
systemctl enable ksmtuned
#
# 删除默认的虚拟桥接卡
systemctl enable libvirtd
virsh net-destroy default
virsh net-undefine default 
systemctl restart libvirtd
systemctl enable sshd
#
#
[ $? -eq 0 ] && echo -e "Install Success" "\033[36mDefault VNC Port:5899 Password:$vncpasswd \033[0m " "Please Reboot System"
#
#

Centos 7安装KVM

检测

egrep --color '(vmx|svm)' /proc/cpuinfo
#如果含有vmx或者svm字样,则表示硬件支持虚拟化,vmx代表Intel,svm代表AMD
#在虚拟机中运行的Linux或是已经经过虚拟化运行的Linux不支持第二次虚拟化

#装载模块,在某些高度精简和定制的系统中(如:群晖)执行以下命令可能没有什么反应,但是不影响使用的。
modprobe kvm
modprobe kvm_intel
lsmod | grep kvm

安装 KVM

根据管理软件的不同可以分为两种,一种是原生管理软件qemu-kvm,另一种是Redhat开源项目Libvirt,virt-manager;第一种是完全命令行来管理;第二种是用 python编写的虚拟机管理图形界面,管理方式很像VM。

KVM的原生管理软件qemu-kvm

yum install qemu-kvm qemu-kvm-tools -y
ln -s /usr/libexec/qemu-kvm /usr/sbin/

qemu-kvm的标准选项

qemu-kvm的标准选项主要涉及指定主机类型、CPU模式、NUMA、软驱设备、光驱设备及硬件设备等等。

-name name:设定虚拟机名称;
-M machine:指定要模拟的主机类型,如Standard PC、ISA-only PC或Intel-Mac等
-m megs:设定虚拟机的RAM大小;
-cpu model:设定CPU模型,如coreduo、qemu64等
-smp n[,cores=cores][,threads=threads][,sockets=sockets][,maxcpus=maxcpus]:设定模拟的SMP
架构中CPU的个数等、每个CPU的核心数及CPU的socket数目等;PC机上最多可以模拟255颗CPU;maxcpu
s用于指定热插入的CPU个数上限;
-numa opts:指定模拟多节点的numa设备;
-fda file:
-fdb file:使用指定文件(file)作为软盘镜像,file为/dev/fd0表示使用物理软驱;
-hda file
-hdb file
-hdc file
-hdd file:使用指定file作为硬盘镜像;
-cdrom file:使用指定file作为CD-ROM镜像,需要注意的是-cdrom和-hdc不能同时使用;将file指定
为/dev/cdrom可以直接使用物理光驱;
-drive option[,option[,option[,...]]]:定义一个硬盘设备;可用子选项有很多。
    file=/path/to/somefile:硬件映像文件路径;
    if=interface:指定硬盘设备所连接的接口类型,即控制器类型,如ide、scsi、sd、mtd、floppy、pflash及virtio等;
    index=index:设定同一种控制器类型中不同设备的索引号,即标识号;
    media=media:定义介质类型为硬盘(disk)还是光盘(cdrom);
    snapshot=snapshot:指定当前硬盘设备是否支持快照功能:on或off;
    cache=cache:定义如何使用物理机缓存来访问块数据,其可用值有none、writeback、unsafe和w
ritethrough四个;
    format=format:指定映像文件的格式,具体格式可参见qemu-img命令;
-boot [order=drives][,once=drives][,menu=on|off]:定义启动设备的引导次序,每种设备使用一
个字符表示;不同的架构所支持的设备及其表示字符不尽相同,在x86 PC架构上,a、b表示软驱、c表
示第一块硬盘,d表示第一个光驱设备,n-p表示网络适配器;默认为硬盘设备;
-boot order=dc,once=d

网络选项

-net nic[,vlan=n][,macaddr=mac][,model=type][,name=name][,addr=addr][,vectors=v]:创建一
个新的网卡设备并连接至vlan n中;macaddr用于为其指定MAC地址,name用于指定一个在监控时显示
的网上设备名称;emu可以模拟多个类型的网卡设备
-net tap[,vlan=n][,name=name][,fd=h][,ifname=name][,script=file][,downscript=dfile]:通过
物理机的TAP网络接口连接至vlan n中,使用script=file指定的脚本(默认为/etc/qemu-ifup)来配置
当前网络接口,并使用downscript=file指定的脚本(默认为/etc/qemu-ifdown)来撤消接口配置;使用
script=no和downscript=no可分别用来禁止执行脚本;
-net user[,option][,option][,...]:在用户模式配置网络栈,其不依赖于管理权限;有效选项有:
    vlan=n:连接至vlan n,默认n=0;
    name=name:指定接口的显示名称,常用于监控模式中;
    net=addr[/mask]:设定GuestOS可见的IP网络,掩码可选,默认为10.0.2.0/8;
    host=addr:指定GuestOS中看到的物理机的IP地址,默认为指定网络中的第二个,即x.x.x.2;
    dhcpstart=addr:指定DHCP服务地址池中16个地址的起始IP,默认为第16个至第31个,即x.x.x.1
6-x.x.x.31;
    dns=addr:指定GuestOS可见的dns服务器地址;默认为GuestOS网络中的第三个地址,即x.x.x.3;
    tftp=dir:激活内置的tftp服务器,并使用指定的dir作为tftp服务器的默认根目录;
    bootfile=file:BOOTP文件名称,用于实现网络引导GuestOS;如:qemu -hda linux.img -boot
n -net user,tftp=/tftpserver/pub,bootfile=/pxelinux.0

通过qemu-kvm安装系统

创建磁盘映像文件

qcow2格式性能低一点,但是支持快照等高级操作,空间用多少分配多少;ram格式性能高一点,不支持高级操作,分配多少空间就立刻使用多少空间。

qemu-img create -f qcow2 -o size=50G,preallocation="metadata" /kvm/images/centos6.qcow2
ll -h /kvm/images/

配置桥设备

新建桥接网卡配置文件:vim /etc/sysconfig/network-scripts/ifcfg-br0

TYPE="Bridge"
BOOTPROTO="static"
NAME="br0"
DEVICE="br0"
ONBOOT="yes"
IPADDR="176.16.16.106"
GATEWAY="172.16.16.1"
NETMASK="255.255.255.0"
DNS1="8.8.8.8"
DNS2="8.8.4.4"

注意:NM_CONTROLLED的值要为no,禁用NetworkManager服务管理此配置
修改要桥接的网卡配置文件:·vim /etc/sysconfig/network-scripts/ifcfg-eth0

TYPE="Ethernet"
HWADDR="18:76:da:36:ad:74"
BOOTPROTO="none"
NAME="eth0"
BRIDGE="br0"    #这一行是新加的
DEVICE="eth0"
ONBOOT="yes"

重启网络服务:service network restart这时系统中能识别了。
在kvm中还是无法看到,还需要systemctl restart libvirtd之后才能加载使用。
新增加桥接卡也是一样的,复制现有的配置文件,改名,修改序号,mac,ip等再重启网络服务和libvirt接口服务

关于桥接网卡的具体设置,见:桥接网卡

加入网卡设备,则需要使系统启动后桥接网络到br0上,我们通过脚本实现启动和停止系统时桥接网络和删除桥接的自动执行操作

开启桥接脚本:mkdir /kvm/script && vim /kvm/script/qemu-ifup

#!/bin/bash

switch=br0
  
if [ -n "$1" ]; then
    ip link set $1 up
    sleep 1
    brctl addif $switch $1
    exit 0
else
    echo "Error: No Interface."
    exit 1
fi

关闭桥接脚本:vim /kvm/script/qemu-ifdown

#!/bin/bash

switch=br0
  
if [ -n "$1" ];then
    brctl delif $switch $1
    ip link set $1 down
    exit 0
else
    echo "Error: No Interface."
    exit 1
fi

赋予执行权限:chmod -R +x /kvm/script/

安装虚拟机

yum install tigervnc -y
qemu-kvm -name "centos6.8" \
-m 512 -smp 2 \
-drive file=/kvm/images/centos6.qcow2,media=disk,format=qcow2 \
-drive file=CentOS-6.8-x86_64-bin-DVD1.iso,media=cdrom \
-net nic -net tap,ifname=vnet0,script=/kvm/script/qemu-ifup,downscript=/kvm/script/qemu-ifdown \
-boot order=dc,once=d

#然后应该会看到下面这个提示,VNC映射到了本机(宿主机)的5900端口
VNC server running on `::1:5900'

#启动VNC
vncviewer :5900

现在就可以安装系统了,我们看一下脚本有没有生效
ifconfig vnet0


Ubuntu 18

https://www.sysgeek.cn/install-configure-kvm-ubuntu-18-04/


Ubuntu 16、Deepin 15安装KVM

检测

egrep --color '(vmx|svm)' /proc/cpuinfo
#如果含有vmx或者svm字样,则表示硬件支持虚拟化,vmx代表Intel,svm代表AMD
#在虚拟机中运行的Linux或是已经经过虚拟化运行的Linux不支持第二次虚拟化

#装载模块,在某些高度精简和定制的系统中(如:群晖)执行以下命令可能没有什么反应,但是不影响使用的。
modprobe kvm
modprobe kvm_intel
lsmod | grep kvm

安装

# 用root用户执行以下命令
apt-get install -y qemu kvm uml-utilities virt-manager bridge-utils libguestfs-tools
# 注意Deepin安装uml-utilities、bridge-utils后关机会非常慢,卡在logo界面大约需要15分钟才能正常关机。

# linux系统默认是自动numu平衡策略,如果要开启Linux系统的自动平衡,使用如下命令
echo 1 > /proc/sys/kernel/numa_balancing

# 修改配置文件
vim /etc/network/interfaces
(如果有其他配置,也不要在/etc/network/interfaces.d下新建桥接配置,kvm无法识别的)

#在原有的以下这一段
auto lo
iface lo inet loopback
#下边加入新的,enp3s0为ifconfig看到的网卡
auto enp3s0
iface enp3s0 inet manual

auto br0
iface br0 inet static
    address 192.168.0.205
    netmask 255.255.255.0
    gateway 192.168.0.254
    dns-nameservers 8.8.8.8
    dns-nameservers 8.8.4.4
    bridge_ports enp3s0

# 修改DNS,上面配置过了,这里可选
vim /etc/resolv.conf
nameserver 8.8.8.8
nameserver 8.8.4.4

# 停用NetworkManager网络管理工具
systemctl stop NetworkManager
systemctl disable NetworkManager

完成后重启系统(必须),然后就可以看到正常工作了。

**注意:**如果是Deepin,重启后在“设置”中看到的网络信息还是原来的(不用理会,也不要修改);同时ping域名会无法ping通,不影响使用。其他都正常。


Mac安装kvm

参考:https://www.cnblogs.com/EasonJim/p/10410256.html

brew install virt-manager virt-viewer qemu libvirt
brew services start libvirt

# 遇到了问题,没能安装qemu-kvm,无法链接本地虚拟机。

基于Libvirt实现虚拟机管理

Libvirt是一个通用的API,可以提供给KVM,EXSI,Xen等调用。

安装

安装包介绍

libvirt-client   # libvirt的客户端,最重要的功能之一就是在宿主机关机时可以通知虚拟机也关机  
gpxe-roms-qemu   # 虚拟机 iPXE 的启动固件,支持虚拟机从网络启动
libvirt-python   # libvirt 为 python 提供的 API
python-virtinst  # 一套 Python 的虚拟机安装工具
qemu-kvm         # KVM 在用户空间运行的程序
libvirt          # 用于管理虚拟机,它提供了一套虚拟机操作 API
virt-manager     # 基于 libvirt 的图像化虚拟机管理软件 
virt-viewer      # 显示虚拟机的控制台 Console
virt-top         # 类似于 top 命令,查看虚拟机的资源使用情况
virt-what        # 在虚拟机内部执行,查看虚拟机运行的虚拟化平台
qemu-img         # 用于操作虚拟机硬盘镜像的创建、查看和格式转化

根据需要进行安装

yum install -y kvm python-virtinst libvirt bridge-utils virt-manager gemu-kvm-tools virt-viewer virt-v2v libguestfs-tools

#启动服务
service libvirtd start

#使用libvirt创建网桥无需再手动修改配置文件,一条命令即可解决
virsh iface-bridge eth0 br0

命令行管理

virt-install是一个命令行工具,它能够为KVM、Xen或其它支持libvrit API的hypervisor创建虚拟机并完成GuestOS安装;此外,它能够基于串行控制台、VNC或SDL支持文本或图形安装界面。

#一般选项:指定虚拟机的名称、内存大小、VCPU个数及特性等

-n NAME, --name=NAME:虚拟机名称,需全局惟一;
-r MEMORY, --ram=MEMORY:虚拟机内在大小,单位为MB;
--vcpus=VCPUS[,maxvcpus=MAX][,sockets=#][,cores=#][,threads=#]:VCPU个数及相关配置;
--cpu=CPU:CPU模式及特性,如coreduo等;可以使用qemu-kvm -cpu ?来获取支持的CPU模式;
安装方法:指定安装方法、GuestOS类型等;
-c CDROM, --cdrom=CDROM:光盘安装介质;
-l LOCATION, --location=LOCATION:安装源URL,支持FTP、HTTP及NFS等,如ftp://172.16.0.1/pub;
--pxe:基于PXE完成安装;
--livecd: 把光盘当作LiveCD;
--os-type=DISTRO_TYPE:操作系统类型,如linux、unix或windows等;
--os-variant=DISTRO_VARIANT:某类型操作系统的变体,如rhel5、fedora8等;
-x EXTRA, --extra-args=EXTRA:根据--location指定的方式安装GuestOS时,用于传递给内核的额外
选项,例如指定kickstart文件的位置,--extra-args "ks=http://172.16.0.1/class.cfg"
--boot=BOOTOPTS:指定安装过程完成后的配置选项,如指定引导设备次序、使用指定的而非安装的ke
rnel/initrd来引导系统启动等 ;例如:
--boot  cdrom,hd,network:指定引导次序;
--boot kernel=KERNEL,initrd=INITRD,kernel_args=”console=/dev/ttyS0”:指定启动系统的内核及initrd文件;
#存储配置:指定存储类型、位置及属性等;
--disk=DISKOPTS:指定存储设备及其属性;格式为--disk /some/storage/path,opt1=val1,opt2=val2等;
常用的选项有:
	device:设备类型,如cdrom、disk或floppy等,默认为disk;
	bus:磁盘总结类型,其值可以为ide、scsi、usb、virtio或xen;
	perms:访问权限,如rw、ro或sh(共享的可读写),默认为rw;
	size:新建磁盘映像的大小,单位为GB;
	cache:缓存模型,其值有none、writethrouth(缓存读)及writeback(缓存读写);
	format:磁盘映像格式,如raw、qcow2、vmdk等;
	sparse:磁盘映像使用稀疏格式,即不立即分配指定大小的空间;
	--nodisks:不使用本地磁盘,在LiveCD模式中常用;
#网络配置:指定网络接口的网络类型及接口属性如MAC地址、驱动模式等;
-w NETWORK, --network=NETWORK,opt1=val1,opt2=val2:将虚拟机连入宿主机的网络中,其中NETWORK可以为:
	bridge=BRIDGE:连接至名为“BRIDEG”的桥设备;
	network=NAME:连接至名为“NAME”的网络;
其它常用的选项还有:
	model:GuestOS中看到的网络设备型号,如e1000、rtl8139或virtio等;
	mac:固定的MAC地址;省略此选项时将使用随机地址
--nonetworks:虚拟机不使用网络功能;
#其它:
--autostart:指定虚拟机是否在物理启动后自动启动;
--print-xml:如果虚拟机不需要安装过程(--import、--boot),则显示生成的XML而不是创建此虚拟
机;默认情况下,此选项仍会创建磁盘映像;
--force:禁止命令进入交互式模式,如果有需要回答yes或no选项,则自动回答为yes;
--dry-run:执行创建虚拟机的整个过程,但不真正创建虚拟机、改变主机上的设备配置信息及将其创
建的需求通知给libvirt;
-d, --debug:显示debug信息;

如果只有光盘,没有ISO文件,那么可以后台制作iso文件,如果下载了ISO文件,可以跳过这一步。
nohup cp /dev/cdrom /data/iso/name.iso &

安装iso文件

virt-install --name=centos6 --ram 1024 --vcpus=1 --disk path=/data/kvm/centos6.img,size=20,bus=virtio --accelerate --cdrom /data/iso/name.iso --vnc --vncport=5910 --vnclisten=0.0.0.0 --network bridge=be0,model=virtio --no-acpi --noautoconsole

或者(参数缩写)

virt-install -n "centos6" \
--vcpus=2 -r 512 -c /data/iso/name.iso \
--disk path=/kvm/images/centos6.8.qcow2,bus=virtio,size=50,sparse \
--network bridge=br0,model=virtio --force

virt-manager图形界面

如果iso文件已复制到kvm指定的镜像目录里,则直接启动安装就行。若在其他地方,当然也可以采用网络安装方式。
这里把宿主机的光驱挂到web服务器上。

mount /dev/cdrom /media/cdrom/
ln -s /media/cdrom/ /var/www/html/centos6
service httpd restart

#启动
virt-manager

参考:
http://xstarcd.github.io/wiki/Cloud/Ubuntu_vmbuilder_kvm.html


文章作者: Leo
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 LeoLan的小站
虚拟化 网卡 脚本 sysconfig kvm linux 虚拟化
喜欢就支持一下吧