使用KVM虚拟化
一. 基础知识
1. 虚拟化简介
虚拟化
一个系统里面虚拟出无数个系统或无限种系统,虚拟出来的系统对本身物理系统没有任何影响
生产环境
一个物理机装一个系统
资源浪费 性能发挥不到极致 发挥到极致,还是浪费
虚拟化解决资源浪费
要预留资源额度给物理机本身一定的空间
什么情况下不使用虚拟化
对资源要求高的服务
数据库(磁盘io要求高)
计算服务(视频转码对cpu要求高,完全耗尽cpu资源)
什么时候使用虚拟化
对资源使用不多 不频繁的业务 (nginx,负载均衡 ,web服务,缓存)
2. 虚拟化技术演变过程
2.1 软件模拟
软件模拟的永远没有硬件好
理论上可以模拟任何硬件,甚至不存在的,性能低效,一般在测试环境使用.
采用这种技术的典型产品有Bochs、 QEMU等。
2.2 虚拟化层翻译
cpu和内存不模拟了,直接使用真实cpu内存, 主板磁盘还是软件模拟方式
实现了软件全虚拟化:
软件全虚拟化:通过虚拟化引擎vmm实现了虚拟机和宿主机的指令隔离,缺点在于有瓶颈:虚拟化层:单点故障和压力高
半虚拟化:改造虚拟机系统内核加虚拟化层翻译
硬件支持的全虚拟化: 硬件支持的虚拟化层翻译==》生产必用方案(KVM)
2.3 半虚拟化
半虚拟化:改造虚拟机系统内核加虚拟化层翻译
2.4 硬件支持的全虚拟化
硬件支持的虚拟化层翻译==》生产必用方案(KVM)
cpu自动识别是来自哪里的执行VT-x技术
KVM(生产解决方案)
2.5 容器虚拟化docker
技术解决方案和前面的全虚拟化不一样..
KVM:装了一个完整版本的操作系统 1G
docker:借助宿主机的资源,自己只是一个小型操作系统,5M-500M
2.6 KVM相关
QEMU与KVM
一台kvm虚拟机=KVM内核模块+Qemu模拟的硬件 . 而OpenStack只是一个管理虚拟机的web平台,但是创建虚拟机不是他的事,是有kvm实现的
Libvirt 与 KVM
二. KVM简介
三. KVM部署
安装图形桌面, 如果本来就是图形的,忽略此步.
[root@localhost ~]# yum upgrade -y
[root@localhost ~]# yum groupinstall -y "GNOME Desktop"
[root@centos75 ~]# yum install -y bash-completion
[root@centos75 ~]# uname -r
3.10.0-862.el7.x86_64
[root@centos75 ~]# cat /etc/redhat-release
CentOS Linux release 7.5.1804 (Core)
[root@centos75 ~]# getenforce
Enforcing
[root@centos75 ~]# setenforce 0
[root@centos75 ~]# getenforce
Permissive
[root@centos75 ~]# sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config
[root@centos75 ~]# getenforce
Permissive
[root@centos75 ~]# systemctl stop firewalld.service
[root@centos75 ~]# systemctl disable firewalld.service
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@centos75 ~]# systemctl status firewalld.service
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
Active: inactive (dead)
Docs: man:firewalld(1)
Mar 19 19:17:21 localhost.localdomain systemd[1]: Starting firewalld - dynamic firewall daemon...
Mar 19 19:17:23 localhost.localdomain systemd[1]: Started firewalld - dynamic firewall daemon.
Mar 19 20:02:52 centos75 systemd[1]: Stopping firewalld - dynamic firewall daemon...
Mar 19 20:02:53 centos75 systemd[1]: Stopped firewalld - dynamic firewall daemon.
[root@centos75 ~]# grep -Eo '(vmx|svm)' /proc/cpuinfo
vmx
vmx
[root@centos75 ~]# lsmod |grep kvm #确认kvm是否安装成功
kvm_intel 174841 0
kvm 578518 1 kvm_intel
irqbypass 13503 1 kvm
[root@centos75 yum.repos.d]# yum -y install qemu-kvm qemu-kvm-tools virt-manager libvirt virt-install
说明:qemu-kvm ----模拟计算机的工具,为KVM虚拟机提供IO设备
libvirt ----管理虚拟机
virt-install ----命令行的虚拟机创建安装工具
bridge-utils ----网桥工具
[root@KVM ~]# rpm -qa|grep -E 'qemu|libvirt|virt'
python-virtinst-0.600.0-29.el6.noarch # 一套Python的虚拟机安装工具
gpxe-roms-qemu-0.9.7-6.14.el6.noarch # 虚拟机iPXE的启动固件,支持虚拟机从网络启动
virt-manager-0.9.0-29.el6.x86_64 # 基于Libvirt的图像化虚拟机管理软件,需要图形界面操作系统
qemu-img-0.12.1.2-2.479.el6.x86_64 # 用于操作虚拟机硬盘镜像的创建、查看和格式转化
libvirt-python-0.10.2-54.el6.x86_64 # libvirt为Python提供的API
qemu-kvm-0.12.1.2-2.479.el6.x86_64 # KVM在用户空间运行的程序
qemu-kvm-tools-0.12.1.2-2.479.el6.x86_64
libvirt-0.10.2-54.el6.x86_64 # 用于管理虚拟机,它提供了一套虚拟机操作API
libvirt-client-0.10.2-54.el6.x86_64 # Libvirt的客户端,最重要的功能之一就是就在宿主机关机时可以通知虚拟机也关机,使虚拟机系统正常关机,而不是被强制关机,造成数据丢失
virt-top-1.0.4-3.15.el6.x86_64 # 类似于top命令,查看虚拟机的资源使用情况
virt-what-1.11-1.2.el6.x86_64 # 在虚拟机内部执行,查看虚拟机运行的虚拟化平台
virt-viewer-0.5.6-8.el6.x86_64 # 显示虚拟机的控制台console
1.1 libvirt开启
systemctl status libvirtd.service
systemctl start libvirtd.service
[root@centos75 ~]# systemctl status libvirtd.service
● libvirtd.service - Virtualization daemon
Loaded: loaded (/usr/lib/systemd/system/libvirtd.service; enabled; vendor preset: enabled)
Active: inactive (dead)
Docs: man:libvirtd(8)
https://libvirt.org
[root@centos75 ~]# systemctl start libvirtd.service
[root@centos75 ~]# systemctl status libvirtd.service
● libvirtd.service - Virtualization daemon
Loaded: loaded (/usr/lib/systemd/system/libvirtd.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2019-03-19 20:52:08 CST; 1s ago
Docs: man:libvirtd(8)
https://libvirt.org
Main PID: 16751 (libvirtd)
Tasks: 19 (limit: 32768)
CGroup: /system.slice/libvirtd.service
├─16751 /usr/sbin/libvirtd
├─16876 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro -...
└─16877 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro -...
Mar 19 20:52:08 centos75 systemd[1]: Started Virtualization daemon.
Mar 19 20:52:08 centos75 dnsmasq[16876]: started, version 2.76 cachesize 150
Mar 19 20:52:08 centos75 dnsmasq[16876]: compile time options: IPv6 GNU-getopt DBus no-i18n IDN DHC...tify
Mar 19 20:52:08 centos75 dnsmasq-dhcp[16876]: DHCP, IP range 192.168.122.2 -- 192.168.122.254, lease... 1h
Mar 19 20:52:08 centos75 dnsmasq-dhcp[16876]: DHCP, sockets bound exclusively to interface virbr0
Mar 19 20:52:08 centos75 dnsmasq[16876]: reading /etc/resolv.conf
Mar 19 20:52:08 centos75 dnsmasq[16876]: using nameserver 192.168.0.1#53
Mar 19 20:52:08 centos75 dnsmasq[16876]: read /etc/hosts - 2 addresses
Mar 19 20:52:08 centos75 dnsmasq[16876]: read /var/lib/libvirt/dnsmasq/default.addnhosts - 0 addresses
Mar 19 20:52:08 centos75 dnsmasq-dhcp[16876]: read /var/lib/libvirt/dnsmasq/default.hostsfile
Hint: Some lines were ellipsized, use -l to show in full.
[root@centos75 ~]#
dnsmasq 小型dns服务器给虚拟化创建的虚拟机提供dns服务
[root@centos75 ~]# ps -ef |grep dnsmasq
nobody 16876 1 0 20:52 ? 00:00:00 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/de
root 16877 16876 0 20:52 ? 00:00:00 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/de
root 16923 1414 0 20:56 pts/1 00:00:00 grep --color=auto dnsmasq
上传系统镜像
[root@centos75 kvm_data]# mkdir -p /application/tools
[root@centos75 kvm_data]# cd /application/tools
[root@centos75 tools]# ll
total 171008
-rw-r--r--. 1 root root 175112192 Aug 14 2018 CentOS-7-x86_64-DVD-1804.iso
创建磁盘
[root@centos75 ~]# mkdir -p /application/kvm_data
[root@centos75 ~]# qemu-img create -f qcow2 /application/kvm_data/moban.qcow2 20G ###创建了一个20g的磁盘moban.qcow2
Formatting '/application/kvm_data/moban.qcow2', fmt=qcow2 size=21474836480 encryption=off cluster_size=65536 lazy_refcounts=off
[root@centos75 ~]# cd /application/kvm_data/
[root@centos75 kvm_data]# qemu-img info moban.qcow2 ### 磁盘的详细信息
image: moban.qcow2
file format: qcow2
virtual size: 20G (21474836480 bytes)
disk size: 196K
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: false
安装虚拟机
[root@localhost kvm_data]# virt-install --virt-type=kvm --name=c1804-moban --vcpus=1 -r 1024 -c /application/tools/CentOS-7-x86_64-DVD-1804.iso --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole --os-type=linux --os-variant=rhel7 --disk path=/application/kvm_data/moban.qcow2,size=20,format=qcow2
Starting install...
Domain installation still in progress. You can reconnect to
the console to complete the installation process.
VNC或者