虚拟化--KVM
Posted 还行少年
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了虚拟化--KVM相关的知识,希望对你有一定的参考价值。
目录
一、虚拟化概述
1.虚拟化的特性
1.1 优点:
- 集中化管理,可以远程管理,维护
- 提高硬件利用率,虚拟化解决了物力资源利用率低,削峰填谷
- 动态调整机器/资源配置,虚拟化把系统的应用程序和服务硬件分离、提高了灵活性
- 高可靠性,可部署额外的功能和方案,可提高透明负载均衡、迁移、恢复复制等应用环境
1.2 缺点:
- 前期高额费用
- 降低硬件利用率,特定场景-例如极度吃资源的应用不一定适合虚拟化
- 更大的错误影响面,本地物理机down机会导致虚拟机均不可用,同时可能虚拟机中文件全部损坏
- 实施配置复杂、管理复杂
- 一定的限制性,虚拟化技术涉及各种限制,必须与支持/兼容虚拟化的服务器、应用程序及供应商结合使用
- 安全性,虚拟化技术自身的安全隐患
2.kvm简介
- Kernel-based Virtual Machine的简称,是一个开源的系统虚拟化模块,是RHEL 5.4推出的最新虚拟化技术,目前红帽只支持在64位的RHEL l5.4以上运行KVM,同时硬件需要支持VT技术,必须在64位bit环境中使用KVM。
- KVM的虚拟化需要硬件支持(如Intel VT技术或者AMD V技术)。是基于硬件的完全虚拟化。而Xen早期则是基于软件模拟的Para-Virtualization,新版本则是基于硬件支持的完全虚拟化。命令查看是否支持VT,cat /proc/cpuinfo | grep ‘vmx’
- KVM的前身是QEMU,08年被红帽收购并获得一项技术hypervisor,不过RedHat的KVM被认为是将成为未来Linux hypervisor的主流。
3.kvm作用
- 提高物理服务器的资源利用率
- 可以批量部署
- 实现实时快照技术
- 支持克隆技术
- 可以实现虚拟机的离线迁移和动态迁移
- 可以将资源动态调整
4.kvm虚拟化架构的三种模式
- 客户模式(guestOS):VM中的OS为GuestOS,客户机在操作系统中运行的模式,客户机分为内核模式和用户模式
- 用户模式:为用户提供虚拟机管理的用户空间工具以及代表用户执行I/O,Qemu工作在此模式下
l- inux内核模式:模拟CPU、 内存,实现客户模式切换,处理从客户模式的推出,KVM即运行在此模式下
5.kvm工作流程
- 用户模式的Qemu利用接口libkvm通过ioctl系统调用进入内核模式。KVM驱动为虚拟机创建虚拟CPU和虚拟内存
- 然后执行VMLAU :NCH指令进入客户模式,装载Guest OS并运行。Guest OS运行过程中如果发生异常,则暂停Guest OS的运行并保存当前状态同时退出到内核模式来处理这些异常
- 内核模式处理这些异常时如果不需要I/o则处理完成后重新进入客户模式。如果需要I/o则进入到用户模式,则由Qemu 来处理I/O, 处理完成后进入内核模式,再进入客户模式
6.虚拟化类型
- 全虚拟化:
将物理硬件资源全部通过软件的方式抽象化,最后进行调用使用的方法:使用hypervisor(VMM)软件,其原理是在底层硬件和服务器之间建立一个抽象层,而基于核心的虚拟机是面向Linux系统的开源产品hypervisor(VMM)可以捕捉CPU的指令,为指令访问硬件控制器和外设充当中介。 - 半虚拟化:
需要修改操作系统(以软件形式模拟物理硬件功能+物理硬件资源的加强型支持) - 直通:直接使用物理硬件资源(需要支持,还不完善)
二、实验
实验环境
centos7.6 8G 6核 300G
1.查看cpu是否支持虚拟化
2.创建本地yum源
[root@localhost ~]# vim /etc/fstab //永久挂载光盘
/dev/cdrom /mnt iso9660 defaults 0 0
[root@localhost ~]# mount -a //使配置文件生效
mount: /dev/sr0 写保护,将以只读方式挂载
[root@localhost ~]# df -h //查看是否挂载成功
文件系统 容量 已用 可用 已用% 挂载点
/dev/sda3 293G 5.2G 288G 2% /
devtmpfs 3.8G 0 3.8G 0% /dev
tmpfs 3.9G 0 3.9G 0% /dev/shm
tmpfs 3.9G 13M 3.8G 1% /run
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
/dev/sda1 1014M 174M 841M 18% /boot
tmpfs 781M 4.0K 781M 1% /run/user/42
tmpfs 781M 20K 781M 1% /run/user/0
/dev/sr0 4.3G 4.3G 0 100% /mnt
[root@localhost ~]# vim /etc/ssh/sshd_config //将dns反向解析关掉,让客户端连接服务器更快
UseDNS no //取消DNS注释,改为NO
[root@localhost ~]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# mkdir bak
[root@localhost yum.repos.d]# mv CentOS-* bak
[root@localhost yum.repos.d]# ls
bak epel.repo
[root@localhost yum.repos.d]# vim epel.repo //创建本地yum源
[local]
name=kvm
baseurl=file:///mnt
gpgcheck=0
enabled=1
[root@localhost yum.repos.d]# mv epel.repo local.repo
[root@localhost yum.repos.d]# yum clean all && yum repolist //清除缓存并加载新的yum源
已加载插件:fastestmirror, langpacks
正在清理软件源: local
Cleaning up list of fastest mirrors
Other repos take up 1.2 G of disk space (use --verbose for details)
已加载插件:fastestmirror, langpacks
Determining fastest mirrors
local | 3.6 kB 00:00:00
(1/2): local/group_gz | 166 kB 00:00:00
(2/2): local/primary_db | 3.1 MB 00:00:00
源标识 源名称 状态
local kvm 4,021
repolist: 4,021
[root@localhost yum.repos.d]#
3.下载kvm所需组件
[root@localhost yum.repos.d]# yum -y install qemu-kvm-tools.x86_64 qemu-kvm virt-install qemu-img bridge-utils libvirt virt-manager
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
软件包 10:qemu-kvm-tools-1.5.3-160.el7.x86_64 已安装并且是最新版本 //安装KVM调试工具,可不安装
软件包 10:qemu-kvm-1.5.3-160.el7.x86_64 已安装并且是最新版本 //安装KVM模块
软件包 virt-install-1.5.0-1.el7.noarch 已安装并且是最新版本 //构建虚拟机的命令行工具
软件包 10:qemu-img-1.5.3-160.el7.x86_64 已安装并且是最新版本 //qemu组件,创建磁盘、启动虚拟机等
软件包 bridge-utils-1.5-9.el7.x86_64 已安装并且是最新版本 //网络支持工具
软件包 libvirt-4.5.0-10.el7.x86_64 已安装并且是最新版本 //虚拟机管理工具
软件包 virt-manager-1.5.0-1.el7.noarch 已安装并且是最新版本 //图形界面管理虚拟机
[root@localhost yum.repos.d]# lsmod | grep kvm //查看kvm模块是否安装
kvm_amd 2177212 0
kvm 586948 1 kvm_amd
irqbypass 13503 1 kvm
[root@localhost yum.repos.d]#
4.设置开启启动界面的显示模式
[root@localhost ~]# ln -sf /lib/systemd/system/graphical.target /etc/systemd/system/default.target
5.设置KVM网络
KVM网络的两种模式:
①NAT:默认设置,数据包由NAT方式通过主机的接口进行传送,可以访问外网,但是无法从外部访问虚拟机网络
②网桥:这种模式允许虚拟机像一台独立的主机一样拥有网络,外部的机器可以直接访问到虚拟机内部,但需要网卡支持(一般有线网卡都支持)
5.1 使用bridge网桥模式部署
[root@localhost network-scripts]# cat ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
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=56ae07f6-d0ca-40c4-9450-452d3dfae832
DEVICE=ens33
ONBOOT=yes
#IPADDR=192.168.30.7
#NETMASK=255.255.255.0
#GATEWAY=192.168.30.2
#DNS1=114.114.114.114
BRIDGE=br0
[root@localhost network-scripts]# cat ifcfg-br0
TYPE=Bridge
BOOTPROTO=static
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=br0
DEVICE=br0
ONBOOT=yes
IPADDR=192.168.30.7
NETMASK=255.255.255.0
GATEWAY=192.168.30.2
5.2 重启网卡,查看
[root@localhost network-scripts]# systemctl restart network
[root@localhost network-scripts]# ip a
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:59:84:37 brd ff:ff:ff:ff:ff:ff
inet6 fe80::20c:29ff:fe59:8437/64 scope link
valid_lft forever preferred_lft forever
3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
link/ether 52:54:00:1f:75:63 brd ff:ff:ff:ff:ff:ff
inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
valid_lft forever preferred_lft forever
4: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN group default qlen 1000
link/ether 52:54:00:1f:75:63 brd ff:ff:ff:ff:ff:ff
5: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 00:0c:29:59:84:37 brd ff:ff:ff:ff:ff:ff
inet 192.168.30.7/24 brd 192.168.30.255 scope global br0
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe59:8437/64 scope link
valid_lft forever preferred_lft forever
6.KVM的部署与管理
6.1 创建kvm管理目录
[root@localhost ~]# mkdir -p /data_kvm/iso //创建KVM存储镜像的目录
[root@localhost ~]# mkdir -p /data_kvm/store //创建存储池的目录
6.2 上传镜像到镜像池里
[root@localhost ~]# cd /data_kvm/iso/
[root@localhost iso]# ls
CentOS-7-x86_64-DVD-1810-7.6.iso
[root@localhost iso]# ll
总用量 4481024
-rw-r--r-- 1 root root 4588568576 8月 18 22:13 CentOS-7-x86_64-DVD-1810-7.6.iso
[root@localhost iso]#
6.3 创建存储池
创建存储卷
6.4 创建镜像池
6.5 创建虚拟机
选择最小化安装即可
ping不通,因为kvm没有开启路由转发功能
root@localhost ~]# echo "1" > /proc/sys/net/ipv4/ip_forward //临时开启路由转发功能
正常访问
小结
虚拟化类型
全虚拟化:将物理硬件资源全部通过软件的方式抽象化,最后进行调用
半虚拟化:需要修改操作系统(以软件形式模拟物理硬件功能+物理硬件资源的加强型支持)
直通:直接使用物理硬件资源(需要支持,还不完善)
以上是关于虚拟化--KVM的主要内容,如果未能解决你的问题,请参考以下文章