云计算指的是资源使用和交互的一种模式
虚拟化指的是技术,可以将物理计算机虚拟成多个逻辑计算机(如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