preface

在上篇博客中,我们讲了云的概念,分类,以及虚拟化技术。我们知道Openstack的虚拟化技术是基于KVM的,所以下面就开始说说如何部署和使用KVM。

下面的讲解包含以下知识点:

  1. 安装KVM
  2. 创建虚拟机与启动,停止虚拟机
  3. 修改虚拟机的配置
  4. KVM-虚拟机的网络桥接

环境准备

我这里的服务器角色是:

IP hostname
192.168.56.11 linux-node1.example.com
192.168.56.12 linux-node2.example.com
  1. 以上系统都是CentOs 7的系统,内核版本是3.10.0-123.el7.x86_64
  2. 所有hosts文件都能够互相解析对方的主机名
  3. 关闭selinux和防火墙。
  4. 我这里使用的是VMware,使用时必须开启cpu虚拟化功能。
  5. 网卡命名为eth0

动手操作,准备基础环境,两台机器同样操作

安装yum仓库
[root@linux-node1 ~]# rpm -ivh http://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm

关闭Network和防火墙,selinux
[root@linux-node1 ~]# systemctl disable firewalld
[root@linux-node1 ~]# systemctl disable NetworkManager
[root@linux-node1 ~]# grep -v ^# /etc/selinux/config
SELINUX=disabled
更新系统并且重启

花的时间比较长,耐心等待

[root@linux-node1 ~]# yum update -y && reboot

安装KVM

  1. qemu-kvm: kvm用户态的管理工具,和ipvsadm一样的。
  2. libvirt:用来管理kvm虚拟机的
  3. virt-install: 用来安装虚拟机用的。
[root@linux-node1 ~]# yum -y install qemu-kvm libvirt virt-install
[root@linux-node1 ~]# systemctl enable libvirtd
[root@linux-node1 ~]# systemctl start libvirtd

安装好以后,我们创建一个硬盘,这里解释下参数:

  • -f raw 表示使用raw格式,指定把硬盘放在哪里。
  • 10G 表示这个硬盘有多大的空间。

    qcow2是用多少就占用多大的空间,raw是一开始就占用了10G的空间即使你没有使用
[root@linux-node1 ~]# qemu-img create -f raw /opt/CentOs-7-x86.64.raw 10G
Formatting '/opt/CentOs-7-x86.64.raw', fmt=raw size=10737418240
[root@linux-node1 ~]# qemu-img create -f qcow2 /opt/CentOs-7-x86.64.qcow2 10G # 这里仅供参考,不需要执行这步

然后再创建一个虚拟机,参数解释下:

  • -virt-type kvm 虚拟机类型为KVM
  • --name 为虚拟机娶一个名字
  • --ram 分配内存大小
  • --cdrom 使用哪个光盘镜像
  • -disk path=。。。 使用刚才创建的row硬盘, 如果是--disk,那么就是这样写 --disk /opt/CentOs-7-x86.64.qcow2,format=qcow2
  • -network network=default 使用默认的网络
  • --graphics vnc,listen=0.0.0.0 使用vnc,默认第一台虚拟机监听在5601,第二台监听在5602,依此类推。
[root@linux-node1 ~]# virt-install --virt-type kvm --name CentOs-7-x86_64 --ram 1024 --cdrom=/root/CentOS-7.0-1406-x86_64-DVD.iso  --disk path=opt/CentOs-7-x86.64.raw --network  network=default --graphics vnc,listen=0.0.0.0 --noautoconsole

此时,我们回车下去后,就开始创建虚拟机了,我们用vnc进行连接192.168.56.11就可以了,如果有开启了两台虚拟机,那么vnc客户端输入IP回车后,默认是进入第一个创建的虚拟机图形界面,要想进入第二台虚拟机图形界面,那么就输入IP:1进入第二个创建好的虚拟机,依次类推。 进入图形界面下安装系统就不再赘述。

如果像我一样出现这样的报错:

[root@linux-node1 ~]# virt-install --virt-type kvm --name CentOs-7-x86.64  --ram 1024 --cdrom=/root/CentOS-7-x86_64-Everything-1511.iso   --disk path=/opt/CentOs7-x86.64.raw --network  network=default --graphics vnc,listen=0.0.0.0 --noautoconsole

开始安装......
ERROR internal error: process exited while connecting to monitor: 2017-01-27T06:41:52.514390Z qemu-kvm: -drive file=/root/CentOS-7-x86_64-Everything-1511.iso,format=raw,if=none,id=drive-ide0-0-0,readonly=on: could not open disk image /root/CentOS-7-x86_64-Everything-1511.iso: Could not open '/root/CentOS-7-x86_64-Everything-1511.iso': Permission denied # 权限被拒绝
域安装好像没有成功。
如果是这样,可以运行下列命令重启您的域:
virsh --connect qemu:///system start CentOs-7-x86.64
否则,请重新开始安装。 [root@linux-node1 ~]# systemctl status libvirtd
........
1月 27 14:46:48 linux-node1.example.com libvirtd[2516]: 无法连接到监控程序插槽: 没有那个进程
1月 27 14:46:48 linux-node1.example.com libvirtd[2516]: internal error: process exited while connecting to monitor: 2017-01-...

那么就这样处理,把用户和组设置为root,还有动态属主:

[root@linux-node1 ~]# grep ^[a-Z] /etc/libvirt/qemu.conf
user = "root"
group = "root"
dynamic_ownership = 0 [root@linux-node1 ~]# ll /root/
总用量 12111876
-rw-------. 1 root root 1062 1月 27 09:20 anaconda-ks.cfg
-rwxrwxrwx 1 qemu qemu 4632608768 1月 27 10:22 CentOS-6.6-x86_64-bin-DVD1.iso
-rwxrwxrwx 1 qemu qemu 7769948160 1月 27 11:59 CentOS-7-x86_64-Everything-1511.iso # 为保险起见,同时赋予777的权限

此时再次敲下刚才创建虚拟机的命令,就发现没有任何问题了。。。

安装完成后,我们可以使用下面这个命令来查看虚拟机的状态:

[root@linux-node1 ~]# virsh list --all
Id Name State
----------------------------------------------------
- CentOs-7-x86_64 shut off

virsh是用来控制虚拟机的命令,下面可以使用这个命令来启动虚拟机

[root@linux-node1 ~]# virsh start CentOs-7-x86_64
Domain CentOs-7-x86_64 started

下面说说虚拟机的IP,我们查看下宿主机的网卡virbr0,这个virbr0是虚拟机通过它来连接外网的,且虚拟机和这个virbr0是处在同一个网段内。

[root@linux-node1 ~]# ifconfig
....
virbr0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.122.1 netmask 255.255.255.0 broadcast 192.168.122.255 #
ether 52:54:00:ba:bd:e7 txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 vnet0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet6 fe80::fc54:ff:fefb:5cb5 prefixlen 64 scopeid 0x20<link>
ether fe:54:00:fb:5c:b5 txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 31 bytes 1844 (1.8 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

我们进入到虚拟机界面下,使用ip a|grep 'inet '就可以看到虚拟机和virbr0处在同一网段。

关于libvirt

说道virsh这个命令,其实是由libvirt-client安装的。

libvirt是一个用户空间的管理工具,可以管理Xen,kvm,VMware等等虚拟化软件。

它们之间的关系如下图下所示:



需要注意的是,我们把libvirtd停止后,虚拟机也还是正常运行的,只是无法查看虚拟机的状态。

虚拟机的配置文件与修改虚拟机的配置

每一个虚拟机都有一个配置文件,那么下面就说说如何修改虚拟机配置

[root@linux-node1 qemu]# pwd
/etc/libvirt/qemu
[root@linux-node1 qemu]# ll -rt
total 4
drwx------. 3 root root 40 Dec 17 03:21 networks
-rw------- 1 root root 3840 Dec 17 04:06 CentOs-7-x86_64.xml #每个虚拟机配置都是以虚拟机名字命名

如果我们需要修改虚拟机配置,那么使用下面的命令

[root@linux-node1 qemu]# virsh edit CentOs-7-x86_64    # CentOs-7-x86_64  为名字

在宿主机是CentOs7和虚拟机也是CentOs7的情况下,虚拟机是可以热添加CPU的,所谓热添加就是说能够在虚拟机开机运行状态下添加CPU,下面说说如何添加:

[root@linux-node1 qemu]# virsh edit CentOs-7-x86_64    # 打开配置文件
<vcpu placement='static'>1</vcpu> # 找到这行,把这行改成下面一行
<vcpu placement='auto' current='1'>4</vcpu> # 改成这行,current表示当前是1颗cpu核心,4表示需要4颗cpu,不是CPU核心

保存后退出,然后启用刚才添加的CPU

[root@linux-node1 qemu]# virsh setvcpus CentOs-7-x86_64 2 --live    #2表示2颗CPU

在Openstack下生成的虚拟机,每一个虚拟机对应的XML格式配置文件是不允许手动改的,只能通过代码改动。

d动态修改内存的信息
[root@linux-node1 qemu]# virsh qemu-monitor-command CentOs-7-x86_64 --hmp --cmd info balloon   # 查看内存信息
balloon: actual=1024
[root@linux-node1 qemu]# virsh qemu-monitor-command CentOs-7-x86_64 --hmp --cmd balloon 512 # 修改内存的大小 [root@linux-node1 qemu]# virsh qemu-monitor-command CentOs-7-x86_64 --hmp --cmd info balloon # 修改后内存的信息。
balloon: actual=512

如果要修改大于XML(这一行<memory unit='KiB'>1048576</memory>)配置的内存,那么通过virsh qemu-monitor-command命令修改完以后需要重启虚拟机

KVM-虚拟机的网络桥接

我们把虚拟机的网络桥接到宿主机上的网段,这样就可以通过xshell连接虚拟机了。首先要做的就是添加一个br0接口,然后在把br0接口桥接到eth0上。步骤如下

[root@linux-node1 qemu]# brctl show
bridge name bridge id STP enabled interfaces
virbr0 8000.525400babde7 yes virbr0-nic
vnet0
[root@linux-node1 qemu]# brctl addbr br0
[root@linux-node1 qemu]# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.000000000000 no
virbr0 8000.525400babde7 yes virbr0-nic
vnet0
[root@linux-node1 qemu]# brctl addif br0 eth0 # 执行到这一步的时候xshell网络会断掉的。 [root@linux-node1 qemu]# brctl show # 可以查看下当前的连接
[root@linux-node1 qemu]# ip addr del dev eth0 192.168.56.11/24 #在vmware 下面使用console继续操作。删除eth0的ip,让这个IP放在br0上使用
[root@linux-node1 qemu]# ifconfig br0 192.168.56.11/24 # 在br0添加这个IP
[root@linux-node1 qemu]# route add default gw 192.168.56.2 # 添加网关,这回xshell可以连接上linux-node1了

接下来我们继续修改虚拟机的配置文件,更改其网络类型。

[root@linux-node1 ~]# virsh edit CentOs-7-x86_64
<interface type='network'>
<source network='default'/>
#找到上面2行,修改成下面2行
<interface type='bridge'>
<source bridge='br0'/> # 注意这里的source 后面接的是bridge

修改完成后确认无误,重启虚拟机

[root@linux-node1 ~]# virsh shutdown CentOs-7-x86_64
[root@linux-node1 ~]# virsh start CentOs-7-x86_64

然后我们查看虚拟机的IP,就可以看到是56.0的网段了。我们手动修改IP为192.168.56.111。

2 云计算系列之KVM的安装与使用的更多相关文章

  1. 8 云计算系列之Horizon的安装与虚拟机创建流程

    preface 在上一章节中,我们可以在无web管理界面上创建并启动虚拟机,虽然可以这么做,但是敲命令太繁琐,所以此时我们可以安装openstack web管理界面,通过web界面的图形化操作open ...

  2. 9 云计算系列之Cinder的安装与NFS作为cinder后端存储

    preface 在前面我们知道了如何搭建Openstack的keystone,glance,nova,neutron,horizon这几个服务,然而在这几个服务中唯独缺少存储服务,那么下面我们就学习块 ...

  3. 云计算虚拟机技术-KVM安装

    云计算虚拟机技术-KVM安装 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 身为运维的小伙伴估计大家都清楚KVM,因为在CentOS里面KVM还算很折腾的一个软件,早期CentOS ...

  4. 6 云计算系列之Nova安装与配置

    preface 上面安装好了glance,下面就开始部署nova计算服务了. nova组件介绍 首先介绍下nova各个组件. api 用来接收和响应外部的请求唯一途径,支持Openstack api, ...

  5. openstack之路:KVM/Libvirt 安装

    openstac是一个开源的计算机平台,利用虚拟化和底层存储服务提供云计算服务.openstack的基本是虚拟化技术.虚拟化技术采用的KVM.我们首先进行KVM软件的安装. 电脑配置: 内存:8G 硬 ...

  6. 云计算概述和KVM虚拟化

    前言: 近些年一直听着 虚拟化.云计算.公有云.私有云.混合云这些个概念,一直想着....这些概念要用什么技术实现? 一.云计算的概念 1.传统IDC机房面都会临什么问题? 任何新事物都是由需求催生的 ...

  7. kvm虚拟化学习笔记(三)之windows kvm虚拟机安装

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

  8. 一文告诉你Linux如何配置KVM虚拟化--安装篇

    KVM全称"Kernel-based Virtual Machine",即基于内核的虚拟机,在linux内启用kvm需要硬件,内核和软件(qemu)支持,这篇文章教你如何配置并安装 ...

  9. linux中kvm的安装及快照管理

    一.kvm的安装及状态查看 1.安装软件 yum -y install kvm virt-manager libvirt2.启动libvirtd 报错,升级device-mapper-libs yum ...

随机推荐

  1. IOS 开发小技巧总结

    一.添加自定义字体 1.把字体文件拖到工程中. 2.plist 文件中添加字段:<Array>Fonts provided by application</Array> 把字体 ...

  2. React-Native坑:Invariant Violation:Application 项目名 has not been registered.

    前言 在学习一门新技术的你也许有跟我一样的困惑,照着书上或者视频上的敲了.但是就是有各种问题没有出来自己想要的结果.我会将自己在这个过程中遇到的坑都记录下来,不一定全覆盖,但希望这些文章可以解决你的问 ...

  3. ReactiveCocoa 冷热订阅(cold subscribe, hot subscribe)

    ReactiveCocoa支持两种订阅方式,一种是冷订阅,一种是热订阅. 热订阅的特点: 1.不管有没有消息订阅着,发送者总会把消息发出去. 2.不管订阅者是什么时候订阅的,发送者总是会把相同的消息发 ...

  4. iOS字体加载三种方式

    静态加载 动态加载 动态下载苹果提供的多种字体 其他 打印出当前所有可用的字体 检查某字体是否已经下载 这是一篇很简短的文章,介绍了 iOS 自定义字体加载的三种方式. 静态加载 这个可以说是最简单最 ...

  5. Unity、c#中的拓展方法讲解

    很早以前看过这个东西,但是没有真正的用到过,希望之后会用到上面的方法, 大概的意思是这样的c#中尤其在用Unity的时候,已有的框架提供给我们一些固定的方法,但是有时我们想对这些方法进行修改, 这时我 ...

  6. Linux常见查看硬件信息指令

    CPUlscpu 查看的是CPU的统计信息./proc/cpuinfo 查看每个cpu信息,如每个CPU的型号,主频等. 内存free -m 概要查看内存情况cat /proc/meminfo 查看内 ...

  7. x01.TestViewContent: 插件测试

    开发神器 SharpDevelop 的插件系统,很有学习的必要. 1.首先在 github 上下载源代码,确保编译运行无误. 2.在 AddIns/Misc 下添加 SharpDevelop 插件项目 ...

  8. Crimm Imageshop 2.3。

    下载地址:http://files.cnblogs.com/Imageshop/ImageShop.rar 一款体积小,能绿色执行,又功能丰富的图像处理软件. Imageshop2.3为单EXE文件, ...

  9. CWMP开源代码研究5——CWMP程序设计思想

    声明:本文涉及的开源程序代码学习和研究,严禁用于商业目的. 如有任何问题,欢迎和我交流.(企鹅号:408797506) 本文介绍自己用过的ACS,其中包括开源版(提供下载包)和商业版(仅提供安装包下载 ...

  10. [LeetCode] Nth Highest Salary 第N高薪水

    Write a SQL query to get the nth highest salary from the Employee table. +----+--------+ | Id | Sala ...