安装KVM虚拟化

1、系统基础环境:

[root@linux-node1 ~]# ip addr | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'|sed -n "3p"
10.10.10.188
[root@linux-node1 ~]# uname -r
3.10.0-693.el7.x86_64
[root@linux-node1 ~]# cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)
[root@linux-node1 ~]# tail -2 /etc/hosts
10.10.10.188 linux-node1.example.com #Firewalld and selinux
systemctl stop firewalld
systemctl disable firewalld
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
setenforce 0 #Date
yum -y install ntp
\cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
echo "#time sync by zsq at $(date +%F)" >> /var/spool/cron/root
echo "*/10 * * * * /usr/sbin/ntpdate time.nist.gov &>/dev/null" >>/var/spool/cron/root #hostname
sed -i 's/localhost.localdomain/linux-node1.example.com/' /etc/hostname
hostnamectl set-hostname linux-node1.example.com

KVM需要硬件支持, 所以需要开启虚拟化支持

1.硬件设备直接在BIOS设置开启CPU虚拟化
2.个人电脑同样进入BIOS开启虚拟化支持
3.VM需要找到对应虚拟机开启对应的VT-EPT虚拟化技术

命令检查是否启用虚拟化、没有任何提示则表示没有启用

 egrep '(vmx|svm)' /proc/cpuinfo

2、安装KVM虚拟化工具

yum install qemu-kvm qemu-kvm-tools \
libvirt virt-manager virt-install \
openssh-askpass –y

//KVM是linux内核的一个模块,模块不需要安装只需要加载,通过用户态程序来管理即可
[root@linux-node1 ~]# lsmod|grep kvm
kvm_intel 170086 0 
kvm 566340 1 kvm_intel

qeum 虚拟化软件,可以虚拟不同的CPU,以及模拟网卡、声卡、PCI设备等

libvirt 用于管理KVM的工具

virt-install 命令行安装虚拟机工具

virt-manager 图形化管理虚拟机工具

openssh-askpass 远程连接KVM主机

3、启动libvirt管理KVM工具

[root@linux-node1 ~]# systemctl enable libvirtd
[root@linux-node1 ~]# systemctl start libvirtd
 #注意: 启动后会新增一块virbr0网络、ifconfig查看

4、KVM会给虚拟机分配NAT模式网络,但是在生产情况,强烈推荐使用网桥模式

配置KVM虚拟机使用的桥接网络, 添加br0网卡
[root@linux-node1 ~]# brctl addbr br0 将eth0加入网桥,使用桥接模式,给br设置ip,添加路由网关,关闭防火墙
brctl addif br0 eth0 && \
ip addr del dev eth0 10.10.10.188/24 && \
ifconfig br0 10.10.10.188/24 up && \
route add default gw 10.10.10.254 [root@linux-node1 ~]# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.000c292ce007 no eth0
virbr0 8000.525400192ae5 yes virbr0-nic 

创建KVM虚拟机

1.在创建虚拟机之前, 我们需要添加一块磁盘来存放我们的虚拟机, VM->关机->设置->添加磁盘

直接使用整块磁盘
1
2
3
4
5
6
7
8
9
10
11
12
[root@linux-node1 ~]# mkdir -p /data
[root@linux-node1 ~]# mkfs.xfs /dev/sdb
meta-data=/dev/sdb               isize=512    agcount=4, agsize=655360 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=2621440, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[root@linux-node1 ~]# mount /dev/sdb /data
#强烈建议加入开机自启动

 2.使用virsh-install创建命令模式创建虚拟机

[root@linux-node1 data]# pwd
/data
[root@linux-node1 data]# ls
CentOS-7-x86_64-DVD-1708.iso 挂载系统光盘, 建立ISO镜像文件
[root@linux-node1 ~]# dd if=/dev/cdrom of=/data/CentOS-7-x86_64-DVD-1708.iso 创建虚拟机磁盘
[root@linux-node1 ~]# qemu-img create -f qcow2 /data/centos-7-x86_64 10G #-f指定磁盘格式、磁盘名称加.qcow2查看的时候会更方便 创建虚拟机实例
virt-install --name CentOS-7-x64-node1 \
--virt-type kvm \
--ram 1024 \
--cdrom=/data/CentOS-7-x86_64-DVD-1708.iso \
--disk path=/data/centos-7-x86_64 \
--network bridge=br0 \
--graphics vnc,listen=0.0.0.0 \
--noautoconsole //参数概述
--virt-type:指定虚拟机类型(kvm、qemu、xen)
--name:指定虚拟机名称
--raw:指定虚拟机使用内存大小
--cpu:指定cpu的核数(默认为1)
--cdrom:指定虚拟机安装的ISO镜像
--disk:指定虚拟机数据存储磁盘qcow2
--network:指定虚拟机网络类型, 默认nat,常用bridge
--graphics:指定虚拟机可连接方式, 比如VNC
--noautoconsole:不连接虚拟机图形界面控制台
 

3.使用vnc客户端连接KVM虚拟机,进行操作系统安装、默认是5900

4.安装CentOS7在启动前修改内核让网卡为eth0

按tab键、在后面增加net.ifnames=0 biosdevname 然后空格回车、剩下就是跟安装操作系统步骤一样

5.安装系统步骤忽略, 但一定要记得配置好对应的地址

安装完成后、需修改网卡ONBOOT=yes、默认是没有启动的

[root@linux-node1 data]# virsh list --all  #--all是查看所有
Id Name State
----------------------------------------------------
- CentOS-7-x64-node1 shut off [root@linux-node1 data]# virsh start CentOS-7-x64-node1 #启动节点
Domain CentOS-7-x64-node1 started
 

刚才创建的虚拟机在我们linux系统宿主机上体现的是一个进程、它是通过/usr/libexec/qemu-kvm -name启动起来的

如果我们kill这个进程、虚拟机就会停止

virsh命令是装libvirt的时候装上的、libvirt开源的管理虚拟机的工具

停止libvirtd不影响虚拟机的运行、但是不能通过virsh去管理

[root@linux-node1 ~]# systemctl stop libvirtd
[root@linux-node1 ~]# virsh list --all
error: failed to connect to the hypervisor
error: Failed to connect socket to '/var/run/libvirt/libvirt-sock': No such file or directory

管理KVM虚拟机

生成kvm虚拟机:virt-install
查看在运行的虚拟机:virsh list
查看所有虚拟机:virsh list –all
查看kvm虚拟机配置文件:virsh dumpxml name
启动kvm虚拟机:virsh start name
正常关机:virsh shutdown name
非正常关机(相当于物理机直接拔掉电源):virsh destroy name
删除:virsh undefine name(彻底删除,找不回来了,如果想找回来,需要备份/etc/libvirt/qemu的xml文件)
根据配置文件定义虚拟机:virsh define file-name.xml
挂起,终止:virsh suspend name
恢复挂起状态:virsh resumed name
虚拟机随着系统启动:virsh autostart Name
关闭虚拟机随系统启动:virsh autostart —disable Name
编辑KVM虚拟机的xml配置文件:virsh edit name
 

KVM虚拟机扩容

1.1编辑kvm的xml文件,更改虚拟机CPU配置

  • 配置虚拟机的cpu,两种方式(启动的时候指定核数,更改xml)
  • 第一种方法:为了实现cpu的热添加,就需要更改cpu的最大值,当然热添加的个数不能超过最大值
[root@linux-node1 qemu]# virsh edit CentOS-7-x64-node1
<vcpu placement='auto' current="1">4</vcpu> #当前为1,自动扩容,最大为4
  • 重启虚拟机
[root@linux-node1 qemu]# virsh shutdown CentOS-7-x64-node1
Domain CentOS-7-x64-node1 is being shutdown 正常关闭后再启动
[root@linux-node1 qemu]# virsh start CentOS-7-x64-node1
Domain CentOS-7-x64-node1 started
  • 登录虚拟机上,查看cpu信息,确认cpu的个数,下面开始进行cpu热添加

  • cpu的热添加(cpu只支持热添加,不支持热减少)
[root@linux-node1 qemu]# virsh setvcpus CentOS-7-x64-node1 2 --live
  • 再到虚拟机中查看cpu信息

  • kvm版本较高,并不需要echo “1”到/sys/devices/system/cpu/cpu1/online 进行激活,自动可以激活。
[root@linux-node1 qemu]#  cat /sys/devices/system/cpu/cpu1/online
1
  • 第二种方法:安装的时候指定
virt-install –vcpus 5 –vcpus 5,maxcpus=10,cpuset=1-4,6,8 –vcpus sockets=2,cores=4,thread=2

1.2编辑kvm的xml文件,更改虚拟机内存配置

内存也支持热添加、但前提是你的宿主机和虚拟机是同一个操作系统版本

内存的设置拥有一个“气球(balloon)机制”,可以增大减少,但是也要设置一个最大值,默认并没有设置最大值,也可以在安装时候指定

[root@linux-node1 qemu]# virsh edit CentOS-7-x64-node1

<memory unit='KiB'>2048576</memory> #最大内存为2G
   <currentMemory unit='KiB'>1048576</currentMemory> #当前内存为1G

编辑完配置文件需要重新启动生效

查看当前虚拟机内存大小

[root@linux-node1 qemu]# virsh qemu-monitor-command CentOS-7-x64-node1 --hmp --cmd info balloon
balloon: actual=1024
[root@linux-node1 qemu]#  virsh qemu-monitor-command CentOS-7-x64-node1 --hmp --cmd balloon 512 #把内存限制为512

[root@linux-node1 qemu]# virsh qemu-monitor-command CentOS-7-x64-node1 --hmp --cmd info balloon  #再次查看
balloon: actual=512
[root@linux-node1 qemu]#  virsh qemu-monitor-command CentOS-7-x64-node1 --hmp --cmd balloon 1224 #增加内存为1224

[root@linux-node1 qemu]# virsh qemu-monitor-command CentOS-7-x64-node1 --hmp --cmd info balloon #再次查看
balloon: actual=1224

 1.3磁盘扩容

KVM虚拟机中有两种磁盘格式:

raw格式: 直接占用物理磁盘, 写入快, 性能优, 但占用空间
Qcow2格式: 使用多少占多少磁盘, 支持压缩、快照、镜像
注意:raw不支持快照, Qcow2支持快照, 但两者文件类型是可以相互间转换

无论磁盘是raw qcow2格式, 扩展思路如下

  • 新添加一块磁盘加入至需要扩容的虚拟主机
  • 使用lvm逻辑卷管理方式进行扩展

1.查看当前KVM虚拟机所使用的虚拟磁盘

[root@linux-node1 data]# virsh domblklist CentOS-7-x64-node1
Target Source
------------------------------------------------
vda /data/centos-7-x86_64
hda -

2.创建一块qcow2虚拟磁盘

[root@linux-node1 ~]# qemu-img create -f qcow2 /data/centos-7-x86_64-disk2.qcow2 10G

3.在线添加虚拟磁盘

[root@linux-node1 ~]# virsh attach-disk CentOS-7-x64-node1 /data/centos-7-x86_64-disk2.qcow2 vdb --cache=none --subdriver=qcow2
Disk attached successfully
[root@linux-node1 ~]# virsh domblklist CentOS-7-x64-node1 #查看新增磁盘状态 Target Source
------------------------------------------------
vda /data/centos-7-x86_64
vdb /data/centos-7-x86_64-disk2.qcow2
hda -
 
  • 第二种扩容方式
[root@linux-node1 ~]# virsh edit CentOS-7-x64-node1
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2' cache='none'/>
<source file='/data/centos-7-x86_64-disk2.qcow2'/>
<target dev='vdb' bus='virtio'/>
</disk>

4.通过vnc连接KVM虚拟机进行磁盘扩容

  • 查看当前磁盘大小
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 8.0G 896M 7.2G 11% /
devtmpfs 886M 0 886M 0% /dev
tmpfs 897M 0 897M 0% /dev/shm
tmpfs 897M 8.5M 888M 1% /run
tmpfs 897M 0 897M 0% /sys/fs/cgroup
/dev/vda1 1014M 143M 872M 15% /boot
tmpfs 82M 0 82M 0% /run/user/0
 
  • 扩容步骤如下
[root@localhost ~]# pvcreate /dev/vdb
[root@localhost ~]# vgextend centos /dev/vdb
[root@localhost ~]# lvextend -l +100%FREE /dev/centos/root
[root@localhost ~]# xfs_growfs /dev/centos/root
  • 再次查看
[root@localhost ~]# df -h  #centos-root多了10G
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 18G 897M 18G 5% /
devtmpfs 886M 0 886M 0% /dev
tmpfs 897M 0 897M 0% /dev/shm
tmpfs 897M 8.5M 888M 1% /run
tmpfs 897M 0 897M 0% /sys/fs/cgroup
/dev/vda1 1014M 143M 872M 15% /boot
tmpfs 82M 0 82M 0% /run/user/0
 

KVM虚拟机快照

1.查看磁盘格式、如果是raw格式需要转换成qcow2

[root@linux-node1 ~]# qemu-img info /data/centos-7-x86_64
image: /data/centos-7-x86_64
file format: qcow2
virtual size: 10G (10737418240 bytes)
disk size: 1.2G
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: false
 

2.对虚拟机当前进行快照拍摄

[root@linux-node1 ~]# virsh snapshot-create CentOS-7-x64-node1
Domain snapshot 1531036016 created

3.查看虚拟机快照

[root@linux-node1 ~]# virsh snapshot-list CentOS-7-x64-node1
Name Creation Time State
------------------------------------------------------------
1531036016 2018-07-08 15:46:56 +0800 running
#检查当前虚拟机最新快照版本
[root@linux-node1 ~]# virsh snapshot-current CentOS-7-x64-node1|less
#快照xml文件存放路径
[root@linux-node1 ~]# ls /var/lib/libvirt/qemu/snapshot/CentOS-7-x64-node1
1531036016.xml

4.恢复快照

[root@linux-node1 ~]# virsh snapshot-revert CentOS-7-x64-node1 1531036016
#确认恢复版本正确
[root@linux-node1 ~]# virsh snapshot-current CentOS-7-x64-node1|grep "1531036016"
<name>1531036016</name>
<creationTime>1531036016</creationTime>

5.删除快照

[root@linux-node1 ~]# qemu-img info /data/centos-7-x86_64  #查看
image: /data/centos-7-x86_64
file format: qcow2
virtual size: 10G (10737418240 bytes)
disk size: 1.6G
cluster_size: 65536
Snapshot list:
ID TAG VM SIZE DATE VM CLOCK
1 1531036016 382M 2018-07-08 15:46:57 05:12:14.974
Format specific information:
compat: 1.1
lazy refcounts: false
[root@linux-node1 ~]# virsh snapshot-delete CentOS-7-x64-node1 1531036016 #删除最近的版本
Domain snapshot 1531036016 deleted
 

学习Kvm(四)的更多相关文章

  1. kvm虚拟化学习笔记(四)之kvm虚拟机日常管理与配置

    KVM虚拟化学习笔记系列文章列表----------------------------------------kvm虚拟化学习笔记(一)之kvm虚拟化环境安装http://koumm.blog.51 ...

  2. 从零开始学习jQuery (四) 使用jQuery操作元素的属性与样式

    本系列文章导航 从零开始学习jQuery (四) 使用jQuery操作元素的属性与样式 一.摘要 本篇文章讲解如何使用jQuery获取和操作元素的属性和CSS样式. 其中DOM属性和元素属性的区分值得 ...

  3. 前端学习 第四弹: HTML(一)

    前端学习 第四弹: HTML(一) 元素分类:块元素 内联元素 块级元素在浏览器显示时,通常会以新行来开始(和结束). 例子:<h1>, <p>, <ul>, &l ...

  4. C#可扩展编程之MEF学习笔记(四):见证奇迹的时刻

    前面三篇讲了MEF的基础和基本到导入导出方法,下面就是见证MEF真正魅力所在的时刻.如果没有看过前面的文章,请到我的博客首页查看. 前面我们都是在一个项目中写了一个类来测试的,但实际开发中,我们往往要 ...

  5. Android Animation学习(四) ApiDemos解析:多属性动画

    Android Animation学习(四) ApiDemos解析:多属性动画 如果想同时改变多个属性,根据前面所学的,比较显而易见的一种思路是构造多个对象Animator , ( Animator可 ...

  6. 五、Android学习第四天补充——Android的常用控件(转)

    (转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 五.Android学习第四天补充——Android的常用控件 熟悉常用的A ...

  7. 四、Android学习第四天——JAVA基础回顾(转)

    (转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 四.Android学习第四天——JAVA基础回顾 这才学习Android的 ...

  8. MVC学习(四)几种分页的实现(3)

    在这篇MVC学习(四)几种分页的实现(2)博文中,根据URL中传入的两个参数(页码数,首页.上一页.下一页.末页的标记符)来获得对应的分页数据, 只是传入的参数太多,调用起来不太方便(标记符不能够写错 ...

  9. MyBatis学习 之 四、MyBatis配置文件

    目录(?)[-] 四MyBatis主配置文件 properties属性 settings设置 typeAliases类型别名 typeHandlers类型句柄 ObjectFactory对象工厂 pl ...

  10. 【转】MyBatis学习总结(四)——解决字段名与实体类属性名不相同的冲突

    [转]MyBatis学习总结(四)——解决字段名与实体类属性名不相同的冲突 在平时的开发中,我们表中的字段名和表对应实体类的属性名称不一定都是完全相同的,下面来演示一下这种情况下的如何解决字段名与实体 ...

随机推荐

  1. Collection接口和Map接口的 size 方法和 isEmpty方法

    一.Collection接口的 size 方法和 isEmpty方法 int size(); 返回列表中元素的数目,如果这个列表包含超过Integer.MAX_VALUE,则返回Integer.MAX ...

  2. tunneling socket could not be established, cause=connect ECONNREFUSED 127.0.0.1:56281 npm ERR! network This is most likely not a problem with npm itself npm ERR! network and is related to network

    tunneling socket could not be established, cause=connect ECONNREFUSED 127.0.0.1:56281npm ERR! networ ...

  3. Linux系统LVM逻辑卷创建过程以及自动化脚本

    转至:https://cloud.tencent.com/developer/article/1068328 Linux系统LVM逻辑卷创建过程以及自动化脚本 2018-03-21阅读 6300   ...

  4. 转载-公司项目部署交付环境预检查shell脚本

    大型项目环境预检查脚本,根据自己实际情况修改脚本中变量,给大家一个思路,转载请注明出处~ 转至:https://www.cnblogs.com/gaohongyu/p/13738526.html #! ...

  5. 判断访问类型是pc端还是移动端

    /**      * 判断访问类型是电脑还是手机      */     $(function(){         var mobile_flag = isMobile(); // true为PC端 ...

  6. Python:批量创建py文件

    import os filePrefix='Test' fileSuffix='.py' fileNum=7 #文件个数 for i in range(0,fileNum): filename=fil ...

  7. python实用脚本-定时导出数据库中的数据并且发送数据到邮箱

    1.发送邮件脚本 #coding=utf-8 import smtplib from email.header import Header from email.mime.text import MI ...

  8. SQL Server用SPLIT函数分割字符串

      declare @str varchar(100),@sql varchar(1000)set @str='1,2,3,4,5,6,7,8,9,10'set @sql='select Value= ...

  9. 云计算与云存储:使用云服务器搭建一个情侣纪念Web服务器

    做完了实验一,做完感觉这门还是蛮好玩的,而且第一实验就很有趣,搭建了一个可以在公网访问的纪念网站给女朋友秀了一下.写好实验报告后简单搬运,应该能给感兴趣的朋友带来帮助. 创建阿里云主机 进入阿里云官方 ...

  10. Scipy和Numpy的插值对比

    技术背景 插值法在图像处理和信号处理.科学计算等领域中是非常常用的一项技术.不同的插值函数,可以根据给定的数据点构造出来一系列的分段函数.这一点有别于函数拟合,函数拟合一般是指用一个给定形式的连续函数 ...