KVM安装(二)
一、环境检查
1、检查系统是否支持:
方法一:
lscpu | grep Virtualization
方法二:
grep -E "vmx|svm" /proc/cpuinfo
#KVM是基于X86虚拟化扩展(Intel VT或者 AMD-V)技术的虚拟机软件,所以查看CPU是否支持VT技术,就可以判断是否支持KVM。有返回结果,如果结果中vmx(Intel)或svm(AMD)字样,就说明CPU是支持的。
2、查看是否加载kvm模板
lsmod | grep kvm
这表明已经加载,如果没有加载则执行以下命令加载kvm:
modprobe kvm
3、关闭selinux:
[root@k8s_3 ~]# setenforce 0
[root@k8s_3 ~]# vim /etc/sysconfig/selinux
SELINUX=disabled
二、安装kvm
1、安装kvm相关软件包:
yum install qemu-kvm qemu-kvm-tools qemu-img virt-manager libvirt libvirt-python libvirt-client virt-install virt-viewer bridge-utils libguestfs-tools -y
#qemu-kvm: KVM模块,主要kvm程序包
#virt-manager:虚拟机图形管理工具
# bridge-utils:虚拟机与外界通信的命令管理工具,创建和管理桥接设备的工具。
#virt-install:虚拟机安装工具
# libvirt: 虚拟管理模块,C语言工具包,提供libvirt服务
#python-virtinst:创建虚拟机所需要的命令行工具和程序库
#virt-top:虚拟机统计命令
#virt-viewer:GUI连接程序,连接到已配置好的虚拟机
#libvirt-client:虚拟客户机提供的C语言工具包
#virt-clone:虚机克隆工具
#virt-v2v:虚机格式迁移工具
yum -y install libcanberra-gtk2 qemu-kvm.x86_64 qemu-kvm-tools.x86_64 libvirt.x86_64 libvirt-cim.x86_64 libvirt-client.x86_64 libvirt-java.noarch libvirt-python.x86_64 libiscsi-1.7.0-5.el6.x86_64 dbus-devel virt-clone tunctl virt-manager libvirt libvirt-python python-virtinst
#libvirt是管理虚拟机的API库,不仅支持KVM虚拟机,也可以管理Xen等方案下的虚拟机。
2、重启libvirtd
[root@k8s_3 ~]# systemctl restart libvirtd
[root@k8s_3 ~]# systemctl enable libvirtd
3、安装完成后查看状态如下:
[root@k8s_3 ~]# virsh -c qemu:///system list
[root@k8s_3 ~]# virsh --version
三、安装Centos虚拟机
1、创建guest所需的磁盘
qemu-img主要用来创建guest所需的磁盘,create表示创建,-f qcow2(raw)表示创建一个格式为qcow2的磁盘,/opt/images/centos7.0.qcow2表示创建的磁盘路径及磁盘文件,20G表示该磁盘可用大小。
#qemu-img create -f qcow2 /opt/images/centos7.0.qcow2 20G //创建系统磁盘
#qemu-img info /opt/images/centos7.0.qcow2 //查看磁盘信息
2、virsh-install创建虚拟机
- 输入虚拟机名称
- 分配内存大小
- 处理器个数
- iso的位置或者是url
- 虚拟机类型为kvm
- 定义虚拟机磁盘映像位置
- 磁盘的大小
- 指定桥或者指定多个桥
- 额外的控制台和KS文件
- 链接到系统参数
参数说明:
一般选项:
- --virt-type:指定虚拟机类型(kvm、qemu、xen)
- -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模式;
- -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等;
- --disk:指定虚拟机数据存储磁盘qcow2
- --network:指定虚拟机网络类型, 默认nat,常用bridge
- --graphics:指定虚拟机可连接⽅方式, 比如VNC
- --noautoconsole:不连接虚拟机图形界面控制台
- --livecd: 把光盘当作LiveCD;
- --os-variant=DISTRO_VARIANT:某类型操作系统的变体,如rhel5、fedora8等,可以查看virt-install --os-variant list;
- -x EXTRA, --extra-args=EXTRA:根据--location指定的方式安装GuestOS时,用于传递给内核的额外选项,例如指定kickstart文件的位置;例如-x "console=ttyS0";
- --extra-args "ks=http://172.16.0.1/class.cfg"
- --boot=BOOTOPTS:指定安装过程完成后的配置选项,如指定引导设备次序、使用指定的而非安装的kernel/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模式中常用;
网络选项:
- -w NETWORK, --network=NETWORK,opt1=val1,opt2=val2:将虚拟机连入宿主机的网络中,其中NETWORK可以为:
bridge=BRIDGE:连接至名为“BRIDEG”的桥设备;
network=NAME:连接至名为“NAME”的网络;
虚拟化选项:
- -v, --hvm:当物理机同时支持完全虚拟化和半虚拟化时,指定使用完全虚拟化;
- -p, --paravirt:指定使用半虚拟化;
- --virt-type:使用的hypervisor,如kvm、qemu、xen等;所有可用值可以使用’virsh capabilities’命令获取;
- --graphics TYPE,opt1=val1,opt2=val2:指定图形显示相关的配置,此选项不会配置任何显示硬件(如显卡),而是仅指定虚拟机启动后对其进行访问的接口; 例如vnc
- TYPE:指定显示类型,可以为vnc、sdl、spice或none等,默认为vnc; port:
TYPE为vnc或spice时其监听的端口; listen:TYPE为vnc或spice时所监听的IP地址,默认为127.0.0.1,可以通过修改/etc/libvirt/qemu.conf定义新的默认值; password:TYPE为vnc或spice时,为远程访问监听的服务进指定认证密码;
- --noautoconsole:禁止自动连接至虚拟机的控制台;
3、vitualbox嵌套kvm启用嵌套虚拟化:
cat /sys/module/kvm_intel/parameters/nested //查看intel内核的嵌套虚拟化,Y表示开启,N表示未开启
cat /sys/module/kvm_amd/parameters/nested //查看AMD内核的嵌套虚拟化,Y表示开启,N表示未开启
若为N时,表示嵌套虚拟化被禁用:(创建以下文件)
vi /etc/modprobe.d/kvm-nested.conf
options kvm-intel nested=1
options kvm-intel enable_shadow_vmcs=1
options kvm-intel enable_apicv=1
options kvm-intel ept=1
移除kvm_intel模块,重新加载,移除时报错“modprobe: FATAL: Module kvm_intel is in use”,表示有kvm虚机是启动的,关机后再移除:
modprobe -r kvm_intel //移除kvm_intel
modprobe -a kvm_intel //加载kvm_intel
举例一:
qemu-img create -f qcow2 /opt/images/centos7.0.qcow2 20G //创建磁盘映像
virt-install \
--connect qemu:///system \
--virt-type kvm \
--vcpus=1 \
--name centos7.0 \
--ram 1024 \
--cdrom /opt/iso/CentOS-7-x86_64-DVD-2003.iso \
--disk path=/opt/images/centos7.0.qcow2,size=20,format=qcow2,bus=virtio \
--network bridge=br0 \
--os-type=linux \
--check path_in_use=off
//这样创建会自动启动virt-viewer,进入装机页面
举例二:(通过vnc安装)
qemu-img create -f qcow2 /opt/images/centos7.1.qcow2 20G //创建磁盘映像
virt-install \
--name=centos7.1 \
--virt-type=kvm \
--memory 1024,maxmemory=2048 \
--cdrom=/opt/iso/CentOS-7-x86_64-DVD-2003.iso \
--disk path=/opt/images/centos7.1.qcow2 \
--network bridge=br0 \
--graphics vnc,listen=0.0.0.0,port=5910,password=123456 \
--noautoconsole \
--autostart
举例三:(通过console安装)
qemu-img create -f qcow2 /opt/images/centos7.qcow2 20G
virt-install \
--name=centos7 \
--virt-type=kvm \
--memory 1024,maxmemory=2048 \
--vcpus=1 \
--location=/opt/iso/CentOS-7-x86_64-DVD-2003.iso \
--disk path=/opt/images/centos7.qcow2 \
--network bridge=br0 \
--graphics vnc,listen=0.0.0.0,port=5910,password=123456 \
--noautoconsole \
--extra-args='console=ttyS0' \
--autostart
举例四:(磁盘格式为virtio)(成功案例)
qemu-img create -f qcow2 /opt/images/centos7.qcow2 20G
virt-install \
--name=centos7 \
--virt-type=kvm \
--memory 2048,maxmemory=2048 \
--vcpus=1 \
--location=/opt/iso/CentOS-7-x86_64-Everything-1611_7.3.iso \
--disk path=/opt/images/centos7.qcow2,bus=virtio,size=20,format=qcow2 \
--network bridge=br0 \
--graphics vnc,listen=0.0.0.0,port=5910,password=123456 \
--noautoconsole \
--extra-args='console=ttyS0' \
--autostart
virsh console 2(virsh list查看虚机编号) //通过console进入安装页面
系统安装完成后回车,虚机会自动shut off状态。
virsh edit centos7 通过edit查看虚机xml文件,查看boot启动项为什么, <boot dev='hd'/>仅有hd时算正常。
如果有<boot dev='cdrom'/>需删除。
virsh start centos7 启动系统
启动虚拟机后,通过dhcp获取桥接网卡上的dhcp服务器的ip后ping不通dhcp服务器,但是能ping通宿主机,解决方案如下: