命令记不住

登陆

KVM 快速安装和源码编译

KVM快速安装和源码编译

一、快速安装KVM环境

1.虚拟化前提条件

1.公司业务使用为 ESXI,需要开启对应硬件虚拟化技术
2.其他使用
KVM 需要硬件支持, 所以需要开启虚拟化支持
1.硬件设备直接在 BIOS 设置开启 CPU 虚拟化
2.个人电脑同样进入 BIOS 开启虚拟化支持
3.VM 需要找到对应虚拟机开启对应的 VT-EPT 虚拟化技术

//没有任何内容则表示服务器没有启用虚拟化
[root@kvm-node1 ~]# egrep '(vmx|svm)' /proc/cpuinfo

2.YUM安装软件服务

Linux 内核只要 KVM 最核心的程序,所以 KVM 的管理工具需要额外去安装

# qeum   虚拟化软件,可以虚拟不同的CPU,以及模拟网卡、声卡、PCI设备等
# libvirt    用于管理KVM的工具
# virt-install  命令行安装虚拟机工具
# virt-manager   图形化管理虚拟机工具
# openssh-askpass    远程连接KVM主机
[root@kvm-node1 ~]# yum install qemu-kvm qemu-kvm-tools \
libvirt virt-manager virt-install  \
openssh-askpass –y

//KVM是linux内核的一个模块,模块不需要安装只需要加载,通过用户态程序来管理即可
[root@kvm-node1 ~]# lsmod|grep kvm
kvm_intel             148081  0
kvm                   461126  1 kvm_intel

Linux 内核:

[root@Web_node01 ~]#ls /boot/vmlinuz-3.10.0-
vmlinuz-3.10.0-693.2.2.el7.x86_64   vmlinuz-3.10.0-693.el7.x86_64       vmlinuz-3.10.0-862.14.4.el7.x86_64  

3.启动KVM管理工具libvirt

[root@kvm-node1 ~]# systemctl enable libvirtd.service
[root@kvm-node1 ~]# systemctl start libvirtd.service
#注意: 启动后会新增一块virbr0网络

KVM 会给虚拟机分配 NAT 模式网络,但是在生产情况,强烈推荐使用网桥模式

//通过virsh iface-bridge命令自动创建永久网桥
[root@kvm-node1 ~]# virsh iface-bridge eth0 br0 && \
nmcli connection reload && \
systemctl restart NetworkManager

[root@kvm-node1 ~]# brctl show
bridge name     bridge id               STP enabled     interfaces
br0             8000.52540043720d       yes             eth0

4.安装KVM客户机

1.第一个示例raw
//挂载系统光盘, 建立ISO镜像文件
[root@kvm-node1 ~]# dd if=/dev/cdrom of=/data/centos7u4_x86_64.iso

//创建虚拟机磁盘
[root@kvm-node1 ~]# qemu-img create -f raw /opt/centos2.raw 10G

//创建虚拟机实例
[root@Web_node01 ~]#virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name centos7 --memory 1024 --vcpus 1 --disk /opt/centos2.raw,format=raw,size=10 --cdrom /opt/CentOS-7-x86_64-DVD-1708.iso --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole

# vnc:10.0.0.11:5900
--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-1708.iso 
--network network=default   使用默认NAT的网络,常用bridge
--graphics vnc,listen=0.0.0.0   指定虚拟机可连接方式, 比如VNC
--noautoconsole  不连接虚拟机图形界面控制台

# raw:10G  不支持做快照,性能好
# qcow2:   支持快照
2.第二个示例qcow2
//挂载系统光盘, 建立ISO镜像文件
[root@kvm-node1 ~]# dd if=/dev/cdrom of=/data/centos7u4_x86_64.iso

//创建虚拟机磁盘
[root@kvm-node1 ~]# qemu-img create -f qcow2 /data/centos7u4-node1.qcow2 10G

//创建虚拟机实例
virt-install --name centos7u4-node1 \
--virt-type kvm \
--ram 1024 \
--cdrom=/data/centos7u4_x86_64.iso \
--disk path=/data/centos7u4-node1.c \
--network bridge=br0 \
--graphics vnc,listen=0.0.0.0 \
--noautoconsole
 
//参数概述
--virt-type:指定虚拟机类型(kvm、qemu、xen)
--name:指定虚拟机名称
--raw:指定虚拟机使用内存大小
--cpu:指定cpu的核数(默认为1)
--cdrom:指定虚拟机安装的ISO镜像
--disk:指定虚拟机数据存储磁盘qcow2
--network:指定虚拟机网络类型, 默认nat,常用bridge
--graphics:指定虚拟机可连接方式, 比如VNC
--noautoconsole:不连接虚拟机图形界面控制台


//自动化创建虚拟机,并配置pxe启动方式
virt-install --name centos_VM_70.163 \
--virt-type kvm \
--ram 1024 \
--pxe --disk size=10 \
--network bridge=br1  \
--graphics vnc,listen=0.0.0.0 \
--noautoconsole

云主机没有 SWAP 分区的原因为性能太低,本身磁盘就是虚拟化出来的,所以直接不建立 SWAP 分区。
1.安装系统的时候直接建立在根分区上。
2.不启用内核奔溃备份,内存占用较多

KVM 虚拟机的配置文件 xlm 所在目录

[root@kvm01 ~]# ls /etc/libvirt/qemu/
centos7.xml  networks/  

写死 vnc 端口号

[root@kvm01 ~]# virsh  edit centos7.4
自动获取:<graphics type='vnc' port='-1' autoport='yes' listen='0.0.0.0'>
写死:<graphics type='vnc' port='5902' autoport='no' listen='0.0.0.0'>
命令指定VNC端口:

[root@kvm01 ~]# virt-install  --help | grep gra
  --version             show program's version number and exit
  --graphics GRAPHICS   Configure guest display settings. Ex:
                        --graphics vnc
                        --graphics spice,port=5901,tlsport=5902
                        --graphics none
                        --graphics vnc,password=foobar,port=5910,keymap=ja

二、源码编译KVM环境

1.准备环境

1.安装宿主机

准备基础环境,勾选Development Tools
其他参考Centos系统优化 https://www.opsxdev.com/articles/2021/02/18/1613579963150

2.下载源码

3种下载源
1.kvm.git
2.linux.git
3.kernel.org

[root@kvm-main]# wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.8.1.tar.xz
[root@kvm-main]# git clone git://git.qemu.org/qemu.git

3.配置源码

[root@kvm-main kvmhost]# yum install ncurses-devel  openssl-devel elfutils-libelf-devel ninja-build -y
[root@kvm-main linux-4.8.1]# make menuconfig
运行make menuconfig 图形化选择KVM相关的配置
[root@kvm-main linux-4.8.1]# cp -rp /boot/config-3.10.0-862.el7.x86_64 .
[root@kvm-main linux-4.8.1]# mv config-3.10.0-862.el7.x86_64 .config
更新补充.config文件
[root@kvm-main linux-4.8.1]# make olddefconfig

2.编译KVM

Linux内核编译的3个步骤,编译kernel,编译bzImage,编译module

1.编译kernel

[root@kvm-main linux-4.8.1]# make vmlinux -j 20
。。。
。。。
LINK    vmlinux
LD      vmlinux.o
MODPOST vmlinux.o
GEN     .version
CHK     include/generated/compile.h
UPD     include/generated/compile.h
CC      init/version.o
LD      init/built-in.o
KSYM    .tmp_kallsyms1.o
KSYM    .tmp_kallsyms2.o
LD      vmlinux
SORTEX  vmlinux
SYSMAP  System.map
[root@kvm-main linux-4.8.1]# 

2.编译bzImage

[root@kvm-main linux-4.8.1]# make bzImage
LD      arch/x86/boot/setup.elf
OBJCOPY arch/x86/boot/setup.bin
OBJCOPY arch/x86/boot/vmlinux.bin
HOSTCC  arch/x86/boot/tools/build
BUILD   arch/x86/boot/bzImage
Setup is 16956 bytes (padded to 17408 bytes).
System is 6273 kB
CRC a81a7b58
Kernel: arch/x86/boot/bzImage is ready  (#1)
[root@kvm-main linux-4.8.1]

3.编译内核模块

[root@kvm-main linux-4.8.1]# make modules -j 20
IHEX    firmware/edgeport/down3.bin
IHEX2FW firmware/emi26/bitstream.fw
IHEX2FW firmware/emi26/loader.fw
IHEX2FW firmware/emi26/firmware.fw
IHEX2FW firmware/emi62/loader.fw
IHEX2FW firmware/emi62/bitstream.fw
IHEX2FW firmware/emi62/spdif.fw
IHEX2FW firmware/emi62/midi.fw
H16TOFW firmware/edgeport/boot.fw
H16TOFW firmware/edgeport/boot2.fw
H16TOFW firmware/edgeport/down.fw
H16TOFW firmware/edgeport/down2.fw
IHEX2FW firmware/whiteheat_loader.fw
IHEX2FW firmware/whiteheat.fw
IHEX2FW firmware/keyspan_pda/keyspan_pda.fw
IHEX2FW firmware/keyspan_pda/xircom_pgs.fw
[root@kvm-main linux-4.8.1]#

KVM安装的2个步骤,安装module,安装kernel与initramfs

1.安装module

[root@kvm-main linux-4.8.1]# make install && make modules_install 
[root@kvm-main linux-4.8.1]# make modules_innstall
INSTALL sound/usb/misc/snd-ua101.ko
INSTALL sound/usb/snd-usb-audio.ko
INSTALL sound/usb/snd-usbmidi-lib.ko
INSTALL sound/usb/usx2y/snd-usb-us122l.ko
INSTALL sound/usb/usx2y/snd-usb-usx2y.ko
INSTALL virt/lib/irqbypass.ko
DEPMOD  4.8.1
[root@kvm-main linux-4.8.1]#
# 检查
[root@kvm-main linux-4.8.1]# ll /lib/modules/3.10.0-862.el7.x86_64/kernel/
[root@kvm-main linux-4.8.1]# ll /lib/modules/3.10.0-862.el7.x86_64/kernel/arch/x86/kvm/

2.安装kernel和initramfs

[root@kvm-main linux-4.8.1]# make install
sh ./arch/x86/boot/install.sh 4.8.1 arch/x86/boot/bzImage \
  System.map "/boot"
[root@kvm-main linux-4.8.1]# ll /boot/ -t
# 查看grub启动内核选择项
[root@kvm-main linux-4.8.1]# cat /boot/grub2/grub.cfg
menuentry 'CentOS Linux (4.8.1) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-862.el7.x86_64-advanced-09a5160c-9d7f-4367-805e-5fef585719a9'

3.重启系统选择刚刚编译的内核kernel

linux_kernel

4.手工加载模块

[root@kvm-main kvmhost]# lsmod | grep  kvm
[root@kvm-main kvmhost]# modprobe kvm
[root@kvm-main kvmhost]# modprobe kvm_amd
[root@kvm-main kvmhost]# lsmod  |  grep  kvm
kvm_amd                73728  0 
kvm                   585728  1 kvm_amd
irqbypass              16384  1 kvm

[root@kvm-main kvmhost]# ls -l /dev/kvm
crw-rw-rw-+ 1 root kvm 10, 232 Oct  6 19:30 /dev/kvm

3.编译安装QEMU

1.下载QEMU源代码

[root@kvm-main kvmhost]# git clone git://git.qemu.org/qemu.git

2.配置和编译QEMU

在进行configure之前需要注意:
1. 安装python3.6及以上版本
2. 安装GCC v7.5 or Clang v6.0及以上
[root@kvm-main qemu]# ./configure --target-list=x86_64-softmmu  --python=/usr/bin/python3 --cc=/usr/local/gcc-8.2.0/bin/gcc --cxx=/usr/local/gcc-8.2.0/bin/g++

remote: Enumerating objects: 29348, done.
remote: Total 29348 (delta 0), reused 0 (delta 0), pack-reused 29348
Receiving objects: 100% (29348/29348), 41.12 MiB | 2.33 MiB/s, done.
Resolving deltas: 100% (21151/21151), done.

最后编译生成x86_64-softmmu/qemu-system-x86_64文件就是KVM客户机的工具

3.安装QEMU

[root@kvm-main qemu]# make install
[root@kvm-main qemu]# ls /usr/local/share/qemu
[root@kvm-main qemu]# ls /usr/local/share/qemu/keymaps/

4.安装客户机

1.创建镜像文件

# 精简
[root@kvm-main kvmhost]# qemu-img create -f raw rhel7.img  20G
Formatting 'rhel7.img', fmt=raw size=21474836480 

# 置备
[root@kvm-main kvmhost]# qemu-img create -f raw  -o preallocation=full  rhel8.img  1G
Formatting 'rhel8.img', fmt=raw size=1073741824 preallocation='full'

[root@kvm-main kvmhost]# du -sh ./*
0       ./rhel7.img
1.0G    ./rhel8.img

2.安装客户机


3.启动客户机

[root@kvm-main ~]# qemu-system-x86_64 -m 8G -smp 4 /root/rhel7.img
推荐阅读