CentOS 7 KVM 虚拟化部署

2018-04-18 1,179 0

云计算指的是资源使用和交互的一种模式
虚拟化指的是技术,可以将物理计算机虚拟成多个逻辑计算机(如VMware)他们彼此独立,互不影响,但是云计算又需要使用虚拟化技术。

1. 操作环境

系统: Centos 7
母机IP:192.168.77.11 (KVM-S1)
KVM IP:192.168.77.111
防火墙状态: 关闭
selinux状态: 关闭
NetworkManager: 关闭

2. 检测是否支持虚拟化

grep -E -o 'vmx|svm' /proc/cpuinfo 

vmx
vmx
vmx
vmx

3. 安装kvm基础包和管理工具

# yum -y install qemu-kvm python-virtinst libvirt libvirt-python virt-manager libguestfs-tools bridge-utils virt-install
yum install qemu-kvm qemu-kvm-tools libvirt virt-install bridge-utils -y

kvm相关安装包及其作用:

  • qemu-kvm 主要的KVM程序包
  • python-virtinst 创建虚拟机所需要的命令行工具和程序库
  • virt-manager GUI虚拟机管理工具
  • virt-top 虚拟机统计命令
  • virt-viewer GUI连接程序,连接到已配置好的虚拟机
  • libvirt C语言工具包,提供libvirt服务
  • libvirt-client 为虚拟客户机提供的C语言工具包
  • virt-install 基于libvirt服务的虚拟机创建命令
  • bridge-utils 创建和管理桥接设备的工具

确保模块已加载

[root@KVM-S7 ~]# lsmod | grep kvm
kvm_intel             170086  4 
kvm                   566340  1 kvm_intel
irqbypass              13503  3 kvm

4. 启动kvm服务

systemctl start libvirtd 
systemctl enable libvirtd

5. 上传系统镜像

sundays-MacBook-Pro:Downloads sunday$ scp web-s1-Minimal-1708.iso root@192.168.77.11:/opt
root@192.168.77.11's password: 
web-s1-Minimal-1708.iso                                                                                    33%  266MB  12.3MB/s   00:42 ETA

或虚拟机光驱挂载系统镜像

dd if=/dev/cdrom of=/opt/web-s1-DVD-1708.iso
8830976+0 records in
8830976+0 records out
4521459712 bytes (4.5 GB) copied, 54.0024 s, 83.7 MB/s

6. 配置桥接网络

Bridge桥接原理
Bridge方式即虚拟网桥的网络连接方式,是客户机和子网里面的机器能够互相通信。可以使虚拟机成为网络中具有独立IP的主机。
桥接网络(也叫物理设备共享)被用作把一个物理设备复制到一台虚拟机。网桥多用作高级设置,特别是主机多个网络接口的情况。

┌─────────────────────────┐      ┌─────────────────┐
│          HOST           │      │Virtual Machine 1│
│ ┌──────┐      ┌───────┐ │      │    ┌──────┐     │
│ │ br0  │──┬───│ vnet0 │─│─ ─ ─ │    │ eth0 │     │
│ └──────┘  │   └───────┘ │      │    └──────┘     │
│     │     │             │      └─────────────────┘
│     │     │   ┌───────┐ │      ┌─────────────────┐
│ ┌──────┐  └───│ vnet1 │─│─     │Virtual Machine 2│
│ │ eth0 │      └───────┘ │ │    │    ┌──────┐     │
│ └──────┘                │  ─ ─ │    │ eth0 │     │
│ ┌──────┐                │      │    └──────┘     │
│ │ eth1 │                │      └─────────────────┘
│ └──────┘                │
└─────────────────────────┘

如上图,网桥的基本原理就是创建一个桥接接口br0,在物理网卡和虚拟网络接口之间传递数据。

配置桥接网卡br0

vim /etc/sysconfig/network-scripts/ifcfg-br0 

TYPE=Bridge
BOOTPROTO=static
DEVICE=br0
IPADDR=192.168.77.11
NETMASK=255.255.255.0
GATEWAY=192.168.77.1
DNS1=119.29.29.29
ONBOOT=yes

配置物理网卡eth0

vim /etc/sysconfig/network-scripts/ifcfg-eth0

TYPE=Ethernet
BOOTPROTO=none
NAME=eth0
DEVICE=eth0
ONBOOT=yes
BRIDGE=br0

开启IP转发

echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p

重启网络

systemctl restart network

查看桥接网络

brctl show

bridge name bridge id       STP enabled interfaces
br0     8000.000c29f023de   no      eth0
virbr0      8000.5254005d0ab0   yes     virbr0-nic

ping www.sina.com.cn
PING spool.grid.sinaedge.com (183.232.24.222) 56(84) bytes of data.
64 bytes from 183.232.24.222 (183.232.24.222): icmp_seq=1 ttl=56 time=9.23 ms
64 bytes from 183.232.24.222 (183.232.24.222): icmp_seq=2 ttl=56 time=9.83 ms

7. 创建虚拟机

virt-install --virt-type=kvm --name=web-s1 --vcpus=2 --memory=4096 \
--location=/opt/web-s1-Minimal-1708.iso --disk path=/kvm/vm/web-s1.qcow2, \
size=40,format=qcow2 --network bridge=br0  --graphics vnc,listen=0.0.0.0 \
--noautoconsole

常用参数说明

–name指定虚拟机名称
–memory分配内存大小。
–vcpus分配CPU核心数,最大与实体机CPU核心数相同
–disk指定虚拟机镜像,size指定分配大小单位为G。
–network网络类型,此处用的是默认,一般用的应该是bridge桥接。
–accelerate加速
–cdrom指定安装镜像iso
–vnc启用VNC远程管理,一般安装系统都要启用。
–vncport指定VNC监控端口,默认端口为5900,端口不能重复。
–vnclisten指定VNC绑定IP,默认绑定127.0.0.1,这里改为0.0.0.0。
–os-type=linux,windows
–os-variant=rhel6

--name      指定虚拟机名称
--ram       虚拟机内存大小,以 MB 为单位
--vcpus     分配CPU核心数,最大与实体机CPU核心数相同
–-vnc       启用VNC远程管理,一般安装系统都要启用。
–-vncport   指定VNC监控端口,默认端口为5900,端口不能重复。
–-vnclisten  指定VNC绑定IP,默认绑定127.0.0.1,这里改为0.0.0.0。
--network   虚拟机网络配置
  # 其中子选项,bridge=br0 指定桥接网卡的名称。

–os-type=linux,windows
–os-variant=rhel7.2

--disk 指定虚拟机的磁盘存储位置
  # size,初始磁盘大小,以 GB 为单位。

--location 指定安装介质路径,如光盘镜像的文件路径。
--graphics 图形化显示配置
  # 全新安装虚拟机过程中可能会有很多交互操作,比如设置语言,初始化 root 密码等等。
  # graphics 选项的作用就是配置图形化的交互方式,可以使用 vnc(一种远程桌面软件)进行链接。
  # 我们这列使用命令行的方式安装,所以这里要设置为 none,但要通过 --extra-args 选项指定终端信息,
  # 这样才能将安装过程中的交互信息输出到当前控制台。
--extra-args 根据不同的安装方式设置不同的额外选项

创建第二台虚拟机,添加下vnc端口就可以了

virt-install --virt-type=kvm --name=web-s1 --vcpus=2 --memory=4096 \
--location=/opt/web-s1-Minimal-1708.iso --disk path=/kvm/vm/web-s1.qcow2, \
size=40,format=qcow2 --network bridge=br0  --graphics vnc,listen=0.0.0.0,\
port=5901 --noautoconsole

8. vnc viewer连接

https://www.realvnc.com/en/connect/download/viewer/
使用vnc连接IP 192.168.77.11

安装系统

系统安装会自动关闭的,我们需要启动下
重新启动虚拟机,再次vnc连接192.168.77.11,进入KVM子虚拟机中配置网络

virsh list --all
virsh start web-s1

虚拟机配置IP
激活网卡即可dhcp获取到IP

ifup eth0  #注需ONBOOT=yes

也可配置静态ip

cat /etc/sysconfig/network-scripts/ifcfg-eth0 
TYPE=Ethernet
#PROXY_METHOD=none
#BROWSER_ONLY=no
BOOTPROTO=static
IPADDR=192.168.77.111
NETMASK=255.255.255.0
GATEWAY=192.168.77.1
DNS1=192.168.77.1
DNS2=119.29.29.29
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=no
#IPV6_AUTOCONF=yes
#IPV6_DEFROUTE=yes
#IPV6_FAILURE_FATAL=no
#IPV6_ADDR_GEN_MODE=stable-privacy
NAME=eth0
#UUID=f0c7f001-4c31-4c3e-b6de-19419f62d20e
DEVICE=eth0
ONBOOT=yes
systemctl restart network
ping www.baidu.com

9. KVM管理命令

virt-install                #建立kvm虚拟机
virsh list                  #查看正在运行的KVM虚拟机
virsh list --all            #查看所有KVM虚拟机
virsh start name            #启动虚拟机
virsh shutdown name             #虚拟机关机
virsh autostart name #          #随物理机启动而启动(开机启动)
virsh autostart --disable name      #取消标记为自动开始(取消开机启动)
virsh destroy name          #强制关闭KVM(强制断电)
virsh suspend name          #挂起KVM虚拟机
virsh resume name           #恢复挂起的KVM虚拟机
virsh dumpxml name              #查看KVM虚拟机配置文件
virsh edit name             #编辑KVM虚拟机的xml配置文件
virsh define file-name.xml          #根据配置文件定义虚拟机
virsh undefine name             #彻底删除KVM虚拟机,不可逆,如果想找回来,需要备份/etc/libvirt/qemu的xml文件
virsh snapshot-create name          #创建快照 注:raw磁盘格式无法进行快照,需要修改为qcow2
virsh snapshot-delete name          #删除快照
virsh snapshot-dumpxml name         #导出XML
virsh snapshot-list name            #查看快照

10. 克隆虚拟机

暂停原始虚拟机

virsh shutdown web-s1
virt-clone -o web-s1 -n web-s2 -f /kvm/vm/web-s2.qcow2 -m 00:00:00:00:00:01
virt-clone -o web-s1 -n web-s3 --file /kvm/vm/web-s3.qcow2 --nonsparse

virt-clone 参数介绍

--version 查看版本。
-h,--help 查看帮助信息。
--connect=URI 连接到虚拟机管理程序 libvirt 的URI。
-o 原始虚拟机名称 原始虚拟机名称,必须为关闭或者暂停状态。
-n 新虚拟机名称 --name 新虚拟机名称。
--auto-clone 从原来的虚拟机配置自动生成克隆名称和存储路径。
-u NEW_UUID, --uuid=NEW_UUID 克隆虚拟机的新的UUID,默认值是一个随机生成的UUID。
-m NEW_MAC, --mac=NEW_MAC 设置一个新的mac地址,默认为随机生成 MAC。
-f NEW_DISKFILE, --file=NEW_DISKFILE 为新客户机使用新的磁盘镜像文件地址。
--force-copy=TARGET 强制复制设备。
--nonsparse 不使用稀疏文件复制磁盘映像。

11. 通过镜像创建虚拟机

创建虚拟机镜像文件

# 复制第一次安装的干净系统镜像,作为基础镜像文件,
# 后面创建虚拟机使用这个基础镜像
cp /kvm/vm/web-s1.qcow2 /kvm/system/centos7-base.qcow2

# 使用基础镜像文件,创建新的虚拟机镜像
cp /kvm/system/centos7-base.qcow2 /kvm/vm/web-s4.qcow2

创建虚拟机配置文件

# 复制第一次安装的干净系统镜像,作为基础配置文件。
virsh dumpxml web-s1 > /kvm/vm/centos7-base.xml

# 使用基础虚拟机镜像配置文件,创建新的虚拟机配置文件
cp /kvm/vm/centos7-base.xml /etc/libvirt/qemu/web-s4.xml

# 编辑新虚拟机配置文件
vi /etc/libvirt/qemu/web-s4.xml

主要是修改虚拟机文件名,UUID,镜像地址和网卡地址,其中 UUID 在 Linux 下可以使用 uuidgen 命令生成

<domain type='kvm'>
  <name>web-s4</name>
  <uuid>66544fd4-a1dd-4afc-9113-e5990d33a3b6</uuid>
  <devices>
    <disk type='file' device='disk'>
      <source file='/kvm/vm/web-s4.qcow2'/>
    </disk>
    <interface type='bridge'>
      <mac address='52:54:00:3b:30:0e'/>
    </interface>    
    </devices>
</domain>
virsh define /etc/libvirt/qemu/web-s4
# Domain web-s4 defined from /etc/libvirt/qemu/web-s4

12. KVM虚拟机调整

CPU设置

虚拟机关机修改配置文件,修改完再启动
[root@KVM-S7 ~]# virsh shutdown web-s1
[root@KVM-S7 ~]# virsh edit web-s1
将<vcpu placement='static'>2</vcpu>
修改成
<vcpu placement='auto' current="2">4</vcpu>

[root@KVM-S7 ~]# virsh start web-s1

将静态模式调整为动态,当前双核cpu,最多四核cpu
实时升级到四核

[root@KVM-S7 ~]# virsh setvcpus web-s1 4 --live
[root@KVM-S7 ~]# virsh dominfo web-s1
cpu的热添加(cpu只支持热添加,不支持热减少)
kvm版本较高,并不需要echo "1"到/sys/devices/system/cpu/cpu1/online 进行激活,自动可以激活。

[root@KVM-S7 ~]# cat /sys/devices/system/cpu/cpu1/online
1

kvm子虚拟机使用lscpu查看

[root@localhost ~]# lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                4
On-line CPU(s) list:   0,1,2,3

内存设置
如果超过给虚拟机分配的最大内存,需要重启虚拟机。
缩小内存

[root@KVM-S7 ~]# virsh qemu-monitor-command web-s1 --hmp --cmd balloon 1024
[root@KVM-S7 ~]# virsh qemu-monitor-command web-s1 --hmp --cmd info balloon
balloon: actual=1024

硬盘设置
根分区扩展10G
方式一

[root@KVM-S7 vm]# virsh shutdown web-s1
[root@KVM-S7 vm]# qemu-img resize web-s1.qcow2 +10G
Image resized.

[root@KVM-S7 ~]# qemu-img info web-s1.qcow2
image: web-s1.qcow2
file format: qcow2
virtual size: 4.0G (4294967296 bytes)
disk size: 1.3G
cluster_size: 65536
Format specific information:
    compat: 1.1
    lazy refcounts: true

[root@KVM-S7 ~]# virsh start web-s1

kvm虚拟机操作

[root@localhost ~]# fdisk -l

Disk /dev/vda: 42 GB, 42949672960 bytes, 83886080 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0e0095

   Device Boot      Start         End      Blocks   Id  System
/dev/vda1   *        2048     2099199     1048576   83  Linux
/dev/vda2        20992000   62914550     20961280   8e  Linux LVM

[root@localhost ~]# fdisk /dev/vda
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Command (m for help): n
Partition type:
   p   primary (2 primary, 0 extended, 2 free)
   e   extended
Select (default p): p
Partition number (3,4, default 3): 3
First sector (62914560-83886070, default 62914560): 
Using default value 62914560
Last sector, +sectors or +size{K,M,G} (62914560-83886070, default 83886070): 
Using default value 8388607
Partition 3 of type Linux and of size 10 GiB is set

Command (m for help): p

Disk /dev/vda: 4294 MB, 4294967296 bytes, 8388608 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0e0095

   Device Boot      Start         End      Blocks   Id  System
/dev/vda1   *        2048     2099199     1048576   83  Linux
/dev/vda2        20992000    62914550    20961280   8e  Linux LVM
/dev/vda3        62914560    83886070    10485760   83  Linux

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table. The new table will be used at
the next reboot

lvm扩容

[root@localhost ~]# pvcreate /dev/vda3
  Physical volume "/dev/vda3" successfully created.
[root@localhost ~]# pvs
  PV         VG     Fmt  Attr PSize  PFree
  /dev/vda2  centos lvm2 a--  <20.00g    0 
  /dev/vda3         lvm2 ---   10.00g 10.00g
[root@localhost ~]# vgdisplay 
  --- Volume group ---
  VG Name               centos
  System ID             
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  3
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                2
  Open LV               2
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               <20.00 GiB
  PE Size               4.00 MiB
  Total PE              511
  Alloc PE / Size       511 / <20.00 GiB
  Free  PE / Size       0 / 0   
  VG UUID               KFu3ne-pFHn-k7tZ-RCvO-mZBz-cOTp-QmkbGO

[root@localhost ~]# vgextend centos /dev/vda3
  Volume group "centos" successfully extended

[root@localhost ~]# pvs
  PV         VG     Fmt  Attr PSize    PFree   
  /dev/vda2  centos lvm2 a--    <20.00g       0 
  /dev/vda3  centos lvm2 a--     10.00g  10.00g

[root@localhost ~]# vgs
  VG     #PV #LV #SN Attr   VSize VFree   
  centos   2   2   0 wz--n- 20.99g 10.00g
[root@localhost ~]# lvextend -l +100%FREE /dev/centos/root 

  Size of logical volume centos/root changed from <10.70 GiB (434 extents) to 20.69 GiB (689 extents).
  Logical volume centos/root successfully resized.

[root@localhost ~]# xfs_growfs /dev/centos/root 

[root@localhost ~]# df -h
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root  20.7G  977M  10.8G  36% /
devtmpfs                 486M     0  486M   0% /dev
tmpfs                    497M     0  497M   0% /dev/shm
tmpfs                    497M  6.6M  490M   2% /run
tmpfs                    497M     0  497M   0% /sys/fs/cgroup
/dev/vda1               1014M  125M  890M  13% /boot
tmpfs                     23M     0   23M   0% /run/user/0
# ext 系统格式使用:
resize2fs /dev/centos/root
# xfs 系统格式使用下面命令
xfs_growfs /dev/centos/root

添加一块硬盘
方式二

[root@KVM-S7 vm]# qemu-img create -f qcow2 /kvm/vm/web-s1_1.qcow2 5G
Formatting '/kvm/vm/web-s1_1.qcow2', fmt=qcow2 size=5368709120 encryption=off cluster_size=65536 lazy_refcounts=off 
[root@KVM-S7 ~]# virsh shutdown web-s1
[root@KVM-S7 ~]# virsh edit web-s1

修改配置文件

<devices>
    <emulator>/usr/libexec/qemu-kvm</emulator>
    <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2'/>
      <source file='/kvm/vm/web-s1.qcow2'/>
      <target dev='vda' bus='virtio'/>
      <address type='pci' domain='00' bus='' slot='' function='0x0'/>
    </disk>
    <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2'/>
      <source file='/kvm/vm/web-s1_1.qcow2'/>
      <target dev='vdb' bus='virtio'/>
      <address type='pci' domain='00' bus='' slot='' function='0x0'/>
    </disk>
[root@KVM-S7 ~]# virsh define /etc/libvirt/qemu/web-s1.xml 
[root@KVM-S7 ~]# virsh start web-s1

kvm虚拟机操作

分区: fdisk /dev/vdb 
格式化:mkfs.ext4 /dev/vdb
挂载:vim /etc/fstab,添加一行:/dev/vdb  /mnt  ext4   defaults    0 0
mount -a 然后mnt就可以使用了
也可以做lvm

相关文章

发布评论