KVM
KVM
前言
Kernel-based Virtual Machine的简称,是一个开源的系统虚拟化模块,自Linux 2.6.20之后集成在Linux的各个主要发行版本中。它使用Linux自身的调度器进行管理,所以相对于Xen,其核心源码很少。KVM已成为学术界的主流VMM之一。
KVM的虚拟化需要硬件支持(如Intel VT技术或者AMD V技术)。是基于硬件的完全虚拟化。而Xen早期则是基于软件模拟的Para-Virtualization,新版本则是基于硬件支持的完全虚拟化。但Xen本身有自己的进程调度器,存储管理模块等,所以代码较为庞大。广为流传的商业系统虚拟化软件VMware ESX系列是基于软件模拟的Full-Virtualization。
搭建
先决条件
- Linux OS系统 (CentOS、Ubuntu等)
- CPU支持虚拟化 (可使用此命令查看
egrep -o 'vmx|svm' /proc/cpuinfo
)
关闭防火墙
systemctl stop firewalld && systemctl disable firewalld && setenforce 0
配置网络源
#配置yum源
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo
#配置epel源
wget -O /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo
sed -i 's|^#baseurl=https://download.example/pub|baseurl=https://mirrors.aliyun.com|' /etc/yum.repos.d/epel*
sed -i 's|^metalink|#metalink|' /etc/yum.repos.d/epel*
#安装基本工具包
yum -y install vim wget net-tools unzip zip gcc gcc-c++
检测是否支持虚拟化
egrep -o 'vmx|svm' /proc/cpuinfo
安装
yum -y install qemu-kvm qemu-kvm-tools qemu-img virt-manager libvirt libvirt-python libvirt-client virt-install virt-viewer bridge-utils libguestfs-tools
网卡配置
cp /etc/sysconfig/network-scripts/ifcfg-ens33 /etc/sysconfig/network-scripts/ifcfg-br0
#配置虚拟网卡br0
cat > /etc/sysconfig/network-scripts/ifcfg-br0 << EOF
TYPE=Bridge
DEVICE=br0
NM_CONTROLLED=no
BOOTPROTO=static
NAME=br0
ONBOOT=yes
IPADDR=192.168.161.129
NETMASK=255.255.255.0
GATEWAY=192.168.161.2
DNS1=114.114.114.114
DNS2=8.8.8.8
EOF
#配置已经=存在的网卡ens33
cat > /etc/sysconfig/network-scripts/ifcfg-ens33 << EOF
TYPE=Ethernet
BOOTPROTO=static
NAME=ens33
DEVICE=ens33
ONBOOT=yes
BRIDGE=br0
NM_CONTROLLED=no
EOF
#重启网卡
systemctl restart network
开机自启
systemctl enable --now libvirtd
#验证
lsmod|grep kvm
查看安装结果
virsh --version
virt-install --version
#做软连接
ln -s /usr/libexec/qemu-kvm /usr/bin/qemu-kvm
#查看网桥信息
brctl show
可视化面板搭建
webvirtmgr
基于docker primiano/docker-webvirtmgr - Docker Image | Docker Hub
# 拉取镜像
docker pull primiano/docker-webvirtmgr
# 创建所需用户
groupadd -g 1010 webvirtmgr
useradd -u 1010 -g webvirtmgr -s /sbin/nologin -d /data/yzwebvirtmgr webvirtmgr
chown -R webvirtmgr:webvirtmgr /data/yzwebvirtmgr
# 创建容器
docker run -d --name=yzwebvirtmgr --restart=always -p 8080:8080 -p 6080:6080 -v /data/yzwebvirtmgr:/data/vm primiano/docker-webvirtmgr
# 进入容器
docker exec -it yzwebvirtmgr bash
# VNC配置
sed -i 's/172.17.42.1/0.0.0.0/g' /webvirtmgr/vrtManager/create.py
# 访问
http://[ip]:8080
admin/1234
# 修改登录密码
cd /webvirtmgr
python manage.py changepassword admin
# 配置ssh
# 切换用户
su - webvirtmgr -s /bin/bash
# 生成密钥 一直回车
ssh-keygen
# 设置配置文件
touch ~/.ssh/config && echo -e "StrictHostKeyChecking=no\nUserKnownHostsFile=/dev/null" >> ~/.ssh/config
# 授权
chmod 0600 ~/.ssh/config
# 拷贝到kvm主机
ssh-copy-id root@[KVM主机IP]
kimchi
kimchi-project/kimchi: An HTML5 management interface for KVM guests (github.com)
webvirtcloud
retspen/webvirtcloud: WebVirtCloud is virtualization web interface for admins and users (github.com)
mplx/docker-webvirtcloud - Docker 镜像 |Docker 中心
virt-manager
Linux可视化系统下:
virt-manager/virt-manager: Desktop tool for managing virtual machines via libvirt (github.com)
cockpit
cockpit-project/cockpit: Cockpit is a web-based graphical interface for servers. (github.com)
使用
kvm连接方式
libvirtd TCP模式
编辑
/etc/libvirt/libvirtd.conf
listen_tls = 0
listen_tcp = 1
auth_tcp="none"
tcp_port = "16509"
编辑 /etc/sysconfig/libvirtd
去掉 LIBVIRTD_ARGS="--listen" 前面的注释
#执行服务重启命令
systemctl restart libvirtd
QCOW2
修改密码
virt-customize --add ImageFileName --root-password password:NewPASSWORD