前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >KVM部署篇

KVM部署篇

作者头像
老七Linux
发布2018-05-31 12:39:58
1.5K0
发布2018-05-31 12:39:58
举报
KVM 介绍

KVM是以色列初创公司Qumranet开发,2008年9月RedHat公司收购了Qumranet

  • KVM是Linux内核的一个模块,它把Linux内核变成了一个Hypervisor
  • KVM是完全开源的,RedHat基于KVM的虚拟化解决方案叫做RHEV
  • KVM在Linux操作系统里面以进程的形式出现,由标准的Linux调度程序进行调度,这使得KVM能够使用Linux内核的已有功能,只有一个KVM内核模块还不能实现虚拟化的全部功能,就好比操作系统只有内核还不能成为一个完整的操作系统一样
  • QEMU是一个开源的虚拟化软件,纯软件,可以虚拟化所以的硬件,性能不强
  • KVM基于QEMU开发了一个能够运行在用户空间的工具QEMU-KVM
  • 磁盘、网络设备等都是通过QEMU-KVM这个工具模拟出来的
  • KVM和QEMU-KVM通信是通过/dev/kvm实现的
  • libvirt是用来管理KVM虚拟机的API,其命令为virsh
KVM架构图
mark
mark
CentOS 7.3 安装KVM
mark
mark
  • 关闭 iptables 或者 firewalld
  • 关闭 selinux
  • 格式化新磁盘,挂载到 /kvm_data
代码语言:javascript
复制
[[email protected] ~]# fdisk -l

[[email protected] ~]# mkfs.ext4 /dev/sdb

[[email protected] ~]# blkid /dev/sdb
/dev/sdb: UUID="378895da-ded5-4312-8194-748125c795db" TYPE="ext4"

[[email protected] ~]# mount /dev/sdb /kvm_data/

[[email protected] ~]# vim /etc/fstab 
//增加如下:
/dev/sdb        /kvm_data       ext4    defaults        0 0
  • 下载一个centos7的镜像文件
  • 检查cpu参数是否支持虚拟化
代码语言:javascript
复制
grep -Ei 'vmx|svm' /proc/cpuinfo
安装kvm
代码语言:javascript
复制
yum install -y  virt-*  libvirt  bridge-utils qemu-img
配置网卡

增加一块虚拟网卡,目的就是为了打通宿主机和虚拟机的通信。

代码语言:javascript
复制
[[email protected] ~]# cd /etc/sysconfig/network-scripts/

[[email protected] network-scripts]# cp ifcfg-ens33 br0

[[email protected] network-scripts]# vim br0 

TYPE=Bridge
BOOTPROTO=static
NAME=br0
DEVICE=br0
ONBOOT=yes
IPADDR=192.168.161.161
NETMASK=255.255.255.0
GATEWAY=192.168.161.2
DNS1=119.29.29.29

[[email protected] network-scripts]# vim ifcfg-ens33 

TYPE=Ethernet
BOOTPROTO=static
DEVICE=ens33
ONBOOT=yes
BRIDGE=br0

[[email protected] ~]# ifconfig 
br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.161.161  netmask 255.255.255.0  broadcast 192.168.161.255
        inet6 fe80::d80e:8ff:fe32:4775  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:26:e9:ae  txqueuelen 1000  (Ethernet)
        RX packets 46  bytes 4473 (4.3 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 46  bytes 5831 (5.6 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        ether 00:0c:29:26:e9:ae  txqueuelen 1000  (Ethernet)
        RX packets 153404  bytes 210172913 (200.4 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 35293  bytes 4746555 (4.5 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
启动libvirtd
代码语言:javascript
复制
[[email protected]hdya01 ~]# systemctl start libvirtd
[[email protected] ~]# ps axu |grep !$
ps axu |grep libvirtd
root      9127  5.1  0.4 615520 18384 ?        Ssl  14:28   0:00 /usr/sbin/libvirtd
root      9260  0.0  0.0 112680   976 pts/1    S+   14:29   0:00 grep --color=auto libvirtd
查看桥接状态
代码语言:javascript
复制
[[email protected] ~]# brctl show
bridge name	bridge id		STP enabled	interfaces
br0		8000.000c2926e9ae	no		ens33
virbr0		8000.52540058db51	yes		virbr0-nic
创建虚拟机并安装CentOS 7

我这边测试是使用搭建的XFTP客户端直接上传的。这样快些。也就5分钟的样子。

命令行安装centos7
代码语言:javascript
复制
virt-install --name=zhdya01 --memory=512,maxmemory=1024 --vcpus=1,maxvcpus=2 --os-type=linux --os-variant=rhel7 --location=/tmp/CentOS-7.3-x86_64-DVD-1611.iso --disk path=/kvm_data/zhdya01.img,size=10 --bridge=br0 --graphics=none --console=pty,target_type=serial  --extra-args="console=tty0 console=ttyS0"
代码语言:javascript
复制
virt-install :使用命令安装
--name=zhdya01 :名字为zhdya01
--memory=512,maxmemory=1024 :最小内存为512M 最大为1024M
--vcpus=1,maxvcpus=2 :最大最小CPU
--os-type=linux :系统类型
--os-variant=rhel7 :版本
--location=/tmp/CentOS-7.3-x86_64-DVD-1611.iso :镜像位置(注意你的可能和我的不一致)
--disk path=/kvm_data/zhdya01.img,size=10 :安装路径
--bridge=br0 :桥接网卡
--graphics=none :是否为图形界面(图形界面建议使用vnc软件连接)
--console=pty,target_type=serial  :终端的属性
--extra-args="console=tty0 console=ttyS0"

经过一段时间的硬件检查,然后到了如下这个操作界面:

mark
mark

输入对应菜单的编号回车 即可进入设置。等我们设置完每一项,在每一项的前面对应的方括号内都会变成 [X] 注意磁盘设置的时候是选择LVM还是标准分区。

等待全部设置完毕,按 b 开始安装:

mark
mark

等待安装的差不多之后就会自动重启(当然宿主机也会重新启动!)。

虚拟机管理
代码语言:javascript
复制
[[email protected] network-scripts]# virsh list      //查看虚拟机列表,只能看到运行的虚拟机
 Id    名称                         状态
----------------------------------------------------

[[email protected] network-scripts]# virsh list --all        //查看虚拟机列表,包括未运行的虚拟机
 Id    名称                         状态
----------------------------------------------------
 -     zhdya01                        关闭

[[email protected] network-scripts]# virsh start zhdya01     //启动zhdya01这个虚拟主机
v域 zhdya01 已开始

[[email protected] network-scripts]# virsh list      
 Id    名称                         状态
----------------------------------------------------
 1     zhdya01                        running

[[email protected] network-scripts]# virsh console zhdya01       //进入主机的控制端
连接到域 zhdya01

一般第一次进入虚拟主机,需要重新获得一个新的IP地址:

代码语言:javascript
复制
[[email protected] ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    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: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 52:54:00:02:cf:d7 brd ff:ff:ff:ff:ff:ff
    
[[email protected] ~]# dhclient eth0

[[email protected] ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    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: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 52:54:00:02:cf:d7 brd ff:ff:ff:ff:ff:ff
    inet 192.168.161.129/24 brd 192.168.161.255 scope global dynamic eth0

这样我就获得了一个和宿主机一个网段的IP地址(当然网络也是畅通的)

代码语言:javascript
复制
[[email protected] ~]# ping www.okay686.cn
PING www.okay686.cn (122.190.3.199) 56(84) bytes of data.
64 bytes from 122.190.3.199 (122.190.3.199): icmp_seq=1 ttl=128 time=32.7 ms
64 bytes from 122.190.3.199 (122.190.3.199): icmp_seq=2 ttl=128 time=40.0 ms

//安装一个net-tools 待会测试用
[[email protected] ~]# yum install -y net-tools
已加载插件:fastestmirror
base                                                     | 3.6 kB     00:00     
extras                                                   | 3.4 kB     00:00     
updates                                                  | 3.4 kB     00:00     
(1/4): base/7/x86_64/group_gz                              | 156 kB   00:01     
(2/4): extras/7/x86_64/primary_db                          | 166 kB   00:02     
(3/4): base/7/x86_64/primary_db                            | 5.7 MB   00:15  

更多操作经常使用的指令如下:

代码语言:javascript
复制
virsh shutdown zhdya01  //关闭虚拟机

virsh start zhdya01     //开启虚拟机

virsh destroy zhdya01   //类似stop,这个是强制停止

virsh undefine zhdya01  //彻底销毁虚拟机,会删除虚拟机配置文件,virsh list --all就看不到了

ls /etc/libvirt/qemu/  //可以查看虚拟机配置文件

virsh autostart zhdya01    //宿主机开机该虚拟机也开机

virsh autostart --disable zhdya01  //解除开机启动

virsh suspend zhdya01  //挂起

virsh resume zhdya01   //恢复
克隆虚拟机

克隆虚拟机举个例子就和你在Vmware上面的操作差不多,是一个原理。使用场景:当我们在一台虚拟机搭建了台LNMP服务,后期一台虚拟主机可能扛不住那么大的使用压力,我们可以再次创建一台新的虚拟机来分担。这样我们只需要克隆一台修改下配置即可,大大缩短了时间,提高了工作效率!

首先需要把克隆的机器断电

代码语言:javascript
复制
[[email protected] ~]# virsh shutdown zhdya01

[[email protected] ~]# virt-clone --original zhdya01 --name zhdya02 --file /kvm_data/zhdya02
正在分配 'zhdya02'                                                                                                             |  10 GB  00:01:15     

成功克隆 'zhdya02'。

--original指定克隆源虚拟机
--name指定克隆后的虚拟机名字
--file指定目标虚拟机的虚拟磁盘文件

如果zhdya01虚拟机开机状态,则提示先关闭或者暂停虚拟机

针对刚刚克隆的机器 我们去测试下 刚刚安装的 net-tools 命令是否存在

代码语言:javascript
复制
[root@zhdya01 ~]# virsh start zhdya02
域 zhdya02 已开始

[root@zhdya01 ~]# virsh console zhdya02
连接到域 zhdya02


[root@localhost ~]# ifconfig        //可以使用,但是没有IP地址
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        ether 52:54:00:44:3b:f6  txqueuelen 1000  (Ethernet)

[root@localhost ~]# dhclient eth0

[root@localhost ~]# ifconfig 
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.161.130  netmask 255.255.255.0  broadcast 192.168.161.255

这样就玩成了一个虚拟主机的克隆,且也可以成功获取一个和宿主机一样的IP地址。

但是随着工作的需要,未来我们可能需要使用咱们的宿主机(类似于跳板机...)然后搞个ansible 是不是就很方便的去管理了呢? 当然咱们的虚拟主机也可以使用 ssh 的方式去连接,没有必要使用 virsh console 这个语句了。

代码语言:javascript
复制
[[email protected] ~]# ssh-copy-id -i ./.ssh/id_rsa.pub [email protected]192.168.161.130     //这样我们就成功的在虚拟主机上面配置了宿主机的公钥。

[[email protected] ~]# ssh 192.168.161.130
Last login: Sun Feb  4 17:01:00 2018
[[email protected] ~]# ip addr     //这样就成功的从宿主机登录到了虚拟主机。

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 52:54:00:44:3b:f6 brd ff:ff:ff:ff:ff:ff
    inet 192.168.161.130/24 brd 192.168.161.255 scope global dynamic eth0

未来的工作当中,当然我们也是使用这样方式来管理虚拟主机的。

快照管理

快照的功能,不多说了,很方便,公司目前几乎所有的服务器均在阿里云,有时候我们的备份方式之一就是使用快照,简单_粗暴_效率!

代码语言:javascript
复制
[[email protected] ~]# virsh snapshot-create zhdya01     //创建一个zhdya02的快照
已生成域快照 1517735766

[[email protected] ~]# virsh snapshot-list zhdya01       //查看快照列表
 名称               生成时间              状态
------------------------------------------------------------
 1517735766           2018-02-04 17:16:06 +0800 running

[[email protected] ~]# qemu-img info /kvm_data/zhdya01.img   
image: /kvm_data/zhdya01.img
file format: qcow2
virtual size: 10G (10737418240 bytes)
disk size: 1.3G
cluster_size: 65536
Format specific information:
    compat: 1.1
    lazy refcounts: true

file format: qcow2 //快照文件的类型。

看到了,如上的文件类型,我就需要说下这个:raw格式的虚拟磁盘不支持做快照,qcow2支持。

代码语言:javascript
复制
virsh snapshot-current zhdya01  //查看当前快照版本

[[email protected] ~]# ls /var/lib/libvirt/qemu/snapshot/    //查看所有快照配置文件(创建一次,就会在zhdya目录里面生成一个快照的配置文件)
zhdya01  zhdya02

virsh snapshot-revert zhdya01 1517735766    //恢复指定快照

[[email protected] ~]# virsh snapshot-delete zhdya01 1517736361      //删除快照
已删除域快照 1517736361 
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018/02/10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • KVM 介绍
  • KVM架构图
    • CentOS 7.3 安装KVM
    • 安装kvm
    • 配置网卡
    • 启动libvirtd
      • 查看桥接状态
      • 创建虚拟机并安装CentOS 7
      • 命令行安装centos7
      • 虚拟机管理
      • 克隆虚拟机
      • 快照管理
      相关产品与服务
      专用宿主机
      专用宿主机(CVM Dedicated Host,CDH)提供用户独享的物理服务器资源,满足您资源独享、资源物理隔离、安全、合规需求。专用宿主机搭载了腾讯云虚拟化系统,购买之后,您可在其上灵活创建、管理多个自定义规格的云服务器实例,自主规划物理资源的使用。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档