Skip to content

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 )

关闭防火墙

bash
systemctl stop firewalld && systemctl disable firewalld && setenforce 0

配置网络源

bash
#配置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++

检测是否支持虚拟化

bash
egrep -o 'vmx|svm' /proc/cpuinfo

安装

bash
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

网卡配置

bash
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

开机自启

bash
systemctl enable --now libvirtd

#验证
lsmod|grep kvm

查看安装结果

bash
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

bash
# 拉取镜像
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

bash
listen_tls = 0
listen_tcp = 1
auth_tcp="none"
tcp_port = "16509"

编辑 /etc/sysconfig/libvirtd 去掉 LIBVIRTD_ARGS="--listen" 前面的注释

bash
#执行服务重启命令
systemctl restart libvirtd

QCOW2

修改密码

bash
virt-customize --add ImageFileName --root-password password:NewPASSWORD