文章目录
- KVM的简介
- 二、安装及环境的部署
- kvm部署
-
- 配置网桥
- kvm安装
- kvm web管理界面-WebVirtMgr安装
- 设置Nginx
- KVM WEB界面管理
- 注意:这个目录和镜像的权限都要是777,没改就没法克隆 再看看WEB界面   
- 在这里插入图片描述 
- WEB界面无法访问时
- 命令行管理KVM
- KVM热迁移
- 挂载U盘给上虚拟机使用-暂时不行
- 网络扩展------虚拟化网络管理
KVM的简介
KVM简介
KVM(用于基于内核的虚拟机)是用于 x86 硬件上的 Linux 的完整虚拟化解决方案,包含虚拟化扩展(Intel VT 或 AMD-V)。它由一个可加载的内核模块 kvm.ko 和一个处理器特定模块 kvm-intel.ko 或 kvm-amd.ko 组成,该模块提供核心虚拟化基础设施。
与VMwareESX/ESXi、微软Hyper-V和Xen等虚拟化产品不同,KVM的思想是在Linux内核的基础上添加虚拟机管理模块,重用Linux内核中已经完善的进程调度、内存管理、IO管理等代码,使之成为一个可以支持运行虚拟机的Hypervisor。因此,KVM并不是一个完整的模拟器,而只是一个提供了虚拟化功能的内核插件,具体的模拟器工作需要借助QEMU来完成。
使用 KVM,可以运行多个运行未修改的 Linux 或 Windows 映像的虚拟机。每个虚拟机都有私有的虚拟化硬件:网卡、磁盘、图形适配器等。
KVM 是开源软件。从 2.6.20 开始,KVM 的内核组件包含在主线 Linux 中。从 1.3 开始,KVM 的用户空间组件包含在主线 QEMU 中。
1.KVM是开源软件,全称是kernel-based virtual machine(基于内核的虚拟机)。
2.是x86架构且硬件支持虚拟化技术的Linux全虚拟化解决方案。
3.它包含一个为处理器提供底层虚拟化,可加载的核心模块kvm.ko。
4.kvm还需要一个经过修改的QEMU软件,作为虚拟机上层控制和界面。
5.kvm能在不改变Linux或Windows镜像的情况下同时运行多个虚拟机(即多个虚拟机使用同一镜像),并为每个虚拟机配置个性化硬件环境(网卡、磁盘、图形适配器等),同时kvm还能够使用KSM技术帮助宿主服务器节约内存。
2 关于virtual machine manager的介绍
红帽的virtual machine manager是一个虚拟机管理员,可以让用户管理多个虚拟机。
基于内核的虚拟机libvirt和virtual machine manager。
virtual machine manager可以让用户:
1.创建、编辑、引导或停止虚拟机
2.查看并控制每个虚拟机的控制台
3.查看每个虚拟机的性能以及使用率
4.查看每个正在运行中的虚拟机以及主控制端的即时性能及使用率信息
5.不论是在本机或远程,皆可使用kvm、Xen、QEMU
常用的虚拟化架构对比:
二、安装及环境的部署
1.安装时系统要求
Host system requirements
• One core or thread for each virtualized CPU and one for the host.
• 2 GB of RAM, plus additional RAM for virtual machines.
• 6 GB disk space for the host, plus the required disk space for the virtual machine(s).
KVM hypervisor requirements # lscpu
Virtualization: VT-x
# egrep 'svm|vmx' /proc/cpuinfo
Intel CPU: VT-x
AMD CPU: AMD -V
BIOS Enable Virtualization
2、嵌套虚拟化
先用虚拟机,然后再在虚拟机里使用虚拟化,这就是嵌套虚拟化。
VMware 嵌套虚拟化
产品:Workstation、player、ESXi
支持:ESXi、Hyper-V、KVM、Xen
3.安装KVM虚拟化软件
在VM虚拟机配置时 处理器这边要选上虚拟化
开启虚拟机,开始安装过程。
centOS 7最小化安装
kvm部署
部署前请确保你的CPU虚拟化功能已开启。分为两种情况:
虚拟机要关机设置CPU虚拟化
物理机要在BIOS里开启CPU虚拟化
安装KVM前,还需要具备相应的条件:
验证CPU是否支持KVM;如果结果中有vmx(Intel)或svm(AMD)字样,就说明CPU的支持的
# egrep -o 'vmx|svm' /proc/cpuinfo
vmx
vmx
vmx
vmx
# lsmod | grep kvm
关闭防火墙与selinux
# systemctl stop firewalld
# systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
# setenforce 0
# sed -ri 's/^(SELINUX=).*/\1disabled/g' /etc/selinux/config
配置网络源
\\最小化安装可能网络还没启用,先用nmtui启用网络
# nmcli device status
# nmtui
# curl -o /etc/yum.repos.d/CentOS7-Base-163.repo http://mirrors.163.com/.help/CentOS7-Base-163.repo
# sed -i 's/\$releasever/7/g' /etc/yum.repos.d/CentOS7-Base-163.repo
# sed -i 's/^enabled=.*/enabled=1/g' /etc/yum.repos.d/CentOS7-Base-163.repo
# yum -y install epel-release vim wget net-tools unzip zip gcc gcc-c++ lrzsz
配置网桥
因为虚拟机中网络,我们一般都是和公司的其他服务器是同一个网段,所以我们需要把 KVM服务器的网卡配置成桥接模式。这样的话KVM的虚拟机就可以通过该桥接网卡和公司内部 其他服务器处于同一网段
这里网卡是ens33,所以用br0来桥接ens33网卡
//新建br0
# vim /etc/sysconfig/network-scripts/ifcfg-br0
TYPE=Bridge
DEVICE=br0
NM_CONTROLLED=no
BOOTPROTO=static
NAME=br0
ONBOOT=yes
IPADDR=192.168.118.128
NETMASK=255.255.255.0
GATEWAY=192.168.118.2
DNS1=8.8.8.8
# vim /etc/sysconfig/network-scripts/ifcfg-ens33
\\注释掉IPv4和IPv6、UUID等
TYPE=Ethernet
##PROXY_METHOD=none
##BROWSER_ONLY=no
BOOTPROTO=static
##DEFROUTE=yes
##IPV4_FAILURE_FATAL=no
##IPV6INIT=yes
##IPV6_AUTOCONF=yes
##IPV6_DEFROUTE=yes
##IPV6_FAILURE_FATAL=no
##IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
##UUID=c32fb339-09d4-4f69-b6f4-cb78dd1c819e
DEVICE=ens33
ONBOOT=yes
\\新增
BRIDGE=br0
NM_CONTROLLED=no
# systemctl restart network
# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UP group default qlen 1000
link/ether 00:0c:29:ab:f5:e4 brd ff:ff:ff:ff:ff:ff
inet6 fe80::20c:29ff:feab:f5e4/64 scope link
valid_lft forever preferred_lft forever
3: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 00:0c:29:ab:f5:e4 brd ff:ff:ff:ff:ff:ff
inet 192.168.118.128/24 brd 192.168.118.255 scope global br0
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:feab:f5e4/64 scope link
valid_lft forever preferred_lft forever
查看网桥信息
# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.000c29abf5e4 no ens33
virbr0 8000.5254000e4000 yes virbr0-nic
# brctl --help
Usage: brctl [commands]
commands:
addbr <bridge> #增加网桥
delbr <bridge> #删除网桥
addif <bridge> <device> #连接网口与网桥
delif <bridge> <device> 删除网口与网桥的链接
show [ <bridge> ]
如有多个网卡,可以按以上步骤配置。
kvm安装
# yum -y install qemu-kvm qemu-kvm-tools qemu-img libvirt libvirt-python libvirt-client virt-manager virt-install virt-viewer bridge-utils libguestfs-tools
//安装过程省略......
其中:
libvirt #虚拟机管理
virt #虚拟机安装克隆
qemu-kvm #管理虚拟机磁盘
启动服务
# systemctl start libvirtd
# systemctl enable libvirtd
验证安装结果
# lsmod | grep kvm
kvm_intel 188740 0
kvm 637289 1 kvm_intel
irqbypass 13503 1 kvm
测试并验证安装结果
# virsh --version
4.5.0
# virt-install --version
1.5.0
# ln -s /usr/libexec/qemu-kvm /usr/bin/qemu-kvm //映射文件到bin下
# ll /usr/bin/qemu-kvm
lrwxrwxrwx 1 root root 21 5月 31 15:09 /usr/bin/qemu-kvm -> /usr/libexec/qemu-kvm
kvm web管理界面-WebVirtMgr安装
kvm 的 web 管理界面是由 webvirtmgr 程序提供的。
安装python需求并设置Django环境
安装依赖包
# yum -y install git python-pip libvirt-python libxml2-python python-websockify supervisor nginx python-devel
//升级pip
# pip install --upgrade pip
从github上下载webvirtmgr代码
注意,Git 经常会有不好连接的情况,可以把地址前的 git 更换成 https 试下
# cd /usr/local/src/
# git clone git://github.com/retspen/webvirtmgr.git
正克隆到 'webvirtmgr'...
fatal: unable to connect to github.com:
github.com[0: 20.205.243.166]: errno=????
# git clone https://github.com/retspen/webvirtmgr.git
正克隆到 'webvirtmgr'...
remote: Enumerating objects: 5614, done.
remote: Total 5614 (delta 0), reused 0 (delta 0), pack-reused 5614
接收对象中: 100% (5614/5614), 2.97 MiB | 520.00 KiB/s, done.
处理 delta 中: 100% (3606/3606), done.
安装webvirtmgr
# cd webvirtmgr/
# pip install -r requirements.txt
。。。。
Successfully installed django-1.5.5 gunicorn-19.5.0 lockfile-0.12.2
You are using pip version 8.1.2, however version 22.1.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
检查sqlite3是否安装
# python
Python 2.7.5 (default, Nov 16 2020, 22:23:17)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-44)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sqlite3
>>> exit()
初始化帐号信息
# python manage.py syncdb
WARNING:root:No local_settings file found.
Creating tables ...
Creating table auth_permission
Creating table auth_group_permissions
Creating table auth_group
Creating table auth_user_groups
Creating table auth_user_user_permissions
Creating table auth_user
Creating table django_content_type
Creating table django_session
Creating table django_site
Creating table servers_compute
Creating table instance_instance
Creating table create_flavor
You just installed Django's auth system, which means you don't have any superusers defined.
Would you like to create one now? (yes/no): yes //问你是否创建超级管理员帐号
Username (leave blank to use 'root'): //指定超级管理员用户名,默认为root
Email address: 3683885@qq.com //设置超级管理员邮箱
Password: //设置超级管理员密码
Password (again):
Superuser created successfully.
Installing custom SQL ...
Installing indexes ...
Installed 6 object(s) from 1 fixture(s)
官网上还有一步??先不设置
$ . manage.py collectstatic
设置Nginx
警告:通常 WebVirtMgr 只能从 localhost 的 8000 端口访问。此步骤将使 WebVirtMgr 对端口 80 上的每个人都可用。Web 界面也不受保护(没有 https),这意味着您和服务器之间的每个人(同一wifi、您的本地路由器、您的提供商、服务器提供商、主干网等)可以以明文形式查看您的登录凭据!
相反,您也可以完全跳过此步骤 + 卸载 nginx。只需通过 SSH 将端口 8000 重定向到本地计算机即可。这更安全,因为 WebVirtMgr 不再对公众开放,您只能通过加密连接访问它。
拷贝web网页至指定目录
# mkdir /var/www
# cp -r /usr/local/src/webvirtmgr/ /var/www
# chown -R nginx:nginx /var/www/webvirtmgr/
生成密钥
# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:mQheT6e4vc/QPifjnhgxKsNCnl/j2DiZHC/nyakMcTg root@localhost.localdomain
The key's randomart image is:
+---[RSA 2048]----+
| |
| |
| . . . . |
| o o = = |
| E o o S |
| o *. + + |
| =.+== + . |
| =*Xo+ B+.. |
| **B o+B= |
+----[SHA256]-----+
由于这里webvirtmgr和kvm服务部署在同一台机器,所以这里本地信任。如果kvm部署在其他机器,那么这个是它的ip
# ssh-copy-id 192.168.118.128
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
The authenticity of host '192.168.118.128 (192.168.118.128)' can't be established.
ECDSA key fingerprint is SHA256:dc2pPFqmpCMJLPEWQe23RN/YafBWsDQXcDcd2JJ+4xs.
ECDSA key fingerprint is MD5:05:77:0b:d1:a0:fa:32:25:3c:c2:fa:8c:a8:bd:33:1b.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@192.168.118.128's password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh '192.168.118.128'"
and check to make sure that only the key(s) you wanted were added.
端口转发
例子:
$ ssh user@server:port -L localhost:8000:localhost:8000 -L localhost:6080:localhost:6080
# ssh 192.168.118.128 -L localhost:8000:localhost:8000 -L localhost:6080:localhost:6080
Last login: Tue May 31 11:04:35 2022 from 192.168.118.1
# ss -antl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 5 192.168.122.1:53 *:*
LISTEN 0 128 *:22 *:*
LISTEN 0 100 127.0.0.1:25 *:*
LISTEN 0 128 127.0.0.1:6080 *:*
LISTEN 0 128 127.0.0.1:8000 *:*
LISTEN 0 128 [::]:22 [::]:*
LISTEN 0 100 [::1]:25 [::