设为首页 收藏本站
查看: 1069|回复: 0

[经验分享] 2 云计算系列之KVM的安装与使用

[复制链接]

尚未签到

发表于 2017-6-24 12:50:57 | 显示全部楼层 |阅读模式
preface
  在上篇博客中,我们讲了云的概念,分类,以及虚拟化技术。我们知道Openstack的虚拟化技术是基于KVM的,所以下面就开始说说如何部署和使用KVM。
  
下面的讲解包含以下知识点:


  • 安装KVM
  • 创建虚拟机与启动,停止虚拟机
  • 修改虚拟机的配置
  • KVM-虚拟机的网络桥接
  环境准备
  
我这里的服务器角色是:

IP
hostname
192.168.56.11
linux-node1.example.com
192.168.56.12
linux-node2.example.com

  • 以上系统都是CentOs 7的系统,内核版本是3.10.0-123.el7.x86_64
  • 所有hosts文件都能够互相解析对方的主机名
  • 关闭selinux和防火墙。
  • 我这里使用的是VMware,使用时必须开启cpu虚拟化功能。
  • 网卡命名为eth0
动手操作,准备基础环境,两台机器同样操作

安装yum仓库
  

[iyunv@linux-node1 ~]# rpm -ivh http://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm  

  

关闭Network和防火墙,selinux
  

[iyunv@linux-node1 ~]# systemctl disable firewalld  
[iyunv@linux-node1 ~]# systemctl disable NetworkManager
  
[iyunv@linux-node1 ~]# grep -v ^# /etc/selinux/config
  
SELINUX=disabled
  

  

更新系统并且重启
  花的时间比较长,耐心等待
  

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

安装KVM


  • qemu-kvm: kvm用户态的管理工具,和ipvsadm一样的。  


  • libvirt:用来管理kvm虚拟机的
  •   virt-install: 用来安装虚拟机用的。
      

    [iyunv@linux-node1 ~]# yum -y install qemu-kvm libvirt virt-install  
    [iyunv@linux-node1 ~]# systemctl enable libvirtd
      
    [iyunv@linux-node1 ~]# systemctl start libvirtd
      
    安装好以后,我们创建一个硬盘,这里解释下参数:



  • -f raw 表示使用raw格式,指定把硬盘放在哪里。
  •   10G 表示这个硬盘有多大的空间。
      
    qcow2是用多少就占用多大的空间,raw是一开始就占用了10G的空间即使你没有使用
      

    [iyunv@linux-node1 ~]# qemu-img create -f raw /opt/CentOs-7-x86.64.raw 10G
      
    Formatting '/opt/CentOs-7-x86.64.raw', fmt=raw>  
    [iyunv@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,依此类推。
      

    [iyunv@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进入第二个创建好的虚拟机,依次类推。 进入图形界面下安装系统就不再赘述。

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

[iyunv@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
  
否则,请重新开始安装。
  

  

  
[iyunv@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,还有动态属主:
  

[iyunv@linux-node1 ~]# grep ^[a-Z] /etc/libvirt/qemu.conf  
user = "root"
  
group = "root"
  
dynamic_ownership = 0
  

  
[iyunv@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的权限
  

  此时再次敲下刚才创建虚拟机的命令,就发现没有任何问题了。。。
  安装完成后,我们可以使用下面这个命令来查看虚拟机的状态:
  

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

  

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

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

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

[iyunv@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等等虚拟化软件。
  
它们之间的关系如下图下所示:
  
DSC0000.jpg
  
需要注意的是,我们把libvirtd停止后,虚拟机也还是正常运行的,只是无法查看虚拟机的状态。

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

[iyunv@linux-node1 qemu]# pwd  
/etc/libvirt/qemu
  
[iyunv@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    #每个虚拟机配置都是以虚拟机名字命名
  

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

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

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

[iyunv@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
  

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

  

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

d动态修改内存的信息
  

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

  
[iyunv@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上。步骤如下
  

[iyunv@linux-node1 qemu]# brctl show
  
bridge name bridge>  
virbr0      8000.525400babde7   yes     virbr0-nic
  vnet0
  
[iyunv@linux-node1 qemu]# brctl addbr br0
  
[iyunv@linux-node1 qemu]# brctl show

  
bridge name bridge>  
br0     8000.000000000000   no
  
virbr0      8000.525400babde7   yes     virbr0-nic
  vnet0
  
[iyunv@linux-node1 qemu]# brctl addif br0 eth0    # 执行到这一步的时候xshell网络会断掉的。
  

  
[iyunv@linux-node1 qemu]# brctl show  # 可以查看下当前的连接
  
[iyunv@linux-node1 qemu]#  ip addr del dev eth0 192.168.56.11/24  #在vmware 下面使用console继续操作。删除eth0的ip,让这个IP放在br0上使用
  
[iyunv@linux-node1 qemu]# ifconfig br0 192.168.56.11/24   # 在br0添加这个IP
  
[iyunv@linux-node1 qemu]# route add default gw 192.168.56.2  # 添加网关,这回xshell可以连接上linux-node1了
  

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

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

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

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

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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-387515-1-1.html 上篇帖子: 05.virsh命令的常用操作(kvm) 下篇帖子: kvm命令总结和虚机器备份迁移
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表