CentOS 7.X部署KVM虚拟机

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CentOS 7.X部署KVM虚拟机相关的知识,希望对你有一定的参考价值。

1、简介

Kvm在2007年2月正式合并Linux2.6.20核心中,成为内核源代码的一部分。2008年9月4日,RedHat公司收购了Qumranet,开始在RHEL中用kvm取代Xen,第一包kvm的版本的是RHEL5.4。从RHEL6开始,kvm成为默认的虚拟化引擎。Kvm必须在具备IntelT或AMD-V功能的X86平台上运行。它也被移植到S/390、PowerPC与IA-64平台上。在Linux内核3.9版中,加入了对ARM架构的支持。

2、架构

KVM的架构非常简单,它其实就是一个内核的模块,用户空间通过QEMU模拟硬件提供给虚拟机使用,一台虚拟机就是一个普通的Linux进程,通过对这个进程管理,就可以完成对虚拟机的管理。

CentOS

3、QEMU与KVM

QEMU是一个开源项目,实际上是一台硬件模拟器,可以在其它平台上运行Linux程序,可以存储及还原虚拟机运行状态,还可以虚拟多种设备,包括网卡、多CPU、IDE设备、软驱、显卡、声卡、多种并口设备、多种串口设备、多种USB设备、PC喇叭、PS/2键盘鼠标(默认)和USB键盘鼠标、蓝牙设备。
QEMU的优点是因为纯软件模拟,所以可以在支持的平台模拟支持的设备。它的缺点也是因为纯软件模拟,所以非常慢。
KVM是一个内核模块,没有用户空间和管理工具,KVM的虚拟机可以借助QEMU的管理工具来管理。QEMU也可以借助KVM来加速,提升虚拟机的性能。

4、Libvirt与KVM

Libvirt的设计目标是通过相同的方式管理不同的虚拟化引擎,比如KVM、Xen、HyperV、VMware ESX等。但是目前实际上多数场景使用Libvirt的是KVM,而Xen、HyperV、VMware ESX都有各自的管理工具。
Libvirt可以实现对虚拟机的管理,比如虚拟机的创建、启动、关闭、暂停、恢复、迁移、销毁,以及虚拟机网卡、硬盘、CPU、内存等多种设备的热添加。

CentOS

5、部署

# 关闭相关服务
sed -i s#SELINUX=enforcing#SELINUX=disabled#g /etc/selinux/config
systemctl disable --now NetworkManager
systemctl disable --now firewalld

# 重启系统
reboot

# 安装阿里云源
rpm -ivh http://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm

# 安装常用命令
yum -y install net-tools vim lrzsz tree screen lsof tcpdump nc mtr nmap openssl-devel ntpdate sysstat

# 查看CPU虚拟化是否开启
egrep (vmx|svm) /proc/cpuinfo

# 安装kvm软件包
yum -y install qemu-kvm libvirt virt-install

# 启动libvirtd服务
systemctl enable --now libvirtd

# 检查是否安装成功、KVM模块是否载入成功、KVM是否安装成功
rpm -qa | egrep qemu-img|libvirt-[1-9]|virt-install
lsmod| grep kvm
virsh -c qemu:///system list

# 启动libvirtd后会自动创建一个桥接网卡virbr0
brctl show
ifocnfig virbr0

# 手动配置桥接网络
cat /etc/sysconfig/network-scripts/ifcfg-eth0 #修改ifcfg-eth0配置文件
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
BRIDGE=br0
cat /etc/sysconfig/network-scripts/ifcfg-br0 #修改ifcfg-br0配置文件
TYPE="Bridge"
BOOTPROTO="static"
DEVICE="br0"
ONBOOT="yes"
IPADDR=192.168.12.11
NETMASK=255.255.255.0
GATEWAY=192.168.12.2
systemctl restart network #重启网络服务
ifconfig #查看IP是否在br0之上
route -n #查看路由表
brctl show #查看br0桥接网络

6、安装virt-manager图形化管理工具

yum install gnome-classic-session gnome-terminal nautilus-open-terminal control-center liberation-mono-fonts -y      #安装图形化界面
yum install virt-manager tigervnc tigervnc-server libguestfs-tools -y #安装virt-manager图形化管理工具、vnc连接工具、磁盘管理工具

# 启动vncserver
vncserver
netstat -lntp|grep vnc

7、VNC客户端连接

CentOS

8、创建虚拟机

# 创建磁盘
qemu-img create -f raw /opt/CentOS-7.2-x86_64.raw 40G

# 创建系统
virt-install --name CentOS-7.2-x86_64 --virt-type kvm --ram 1024 --cdrom=/opt/CentOS-7.2-x86_64-DVD-1511.iso --disk path=/opt/CentOS-7.2-x86_64.raw --network=default --graphics vnc,listen=0.0.0.0 --noautoconsole
# 命令解释:
--name                # 虚拟机名称,需全局惟一
--ram                 # 虚拟机内在大小,单位为MB
--vcpu                # VCPU个数及相关配置
--virt-type            # 使用的hypervisor,如kvm、qemu、xen等;所有可用值可以使用virsh capabilities命令获取;
--cdrom                # 光盘安装介质
--disk /Data/kvm/img/test/CentOS7.6-template.qcow2,size=50,bus=virtio # 指定存储设备及其属性
--network bridge=br1        # 将虚拟机连入宿主机的网络中
--graphics vnc,listen=0.0.0.0   # 使vnc可以连接
--noautoconsole           # 禁止自动连接至虚拟机的控制台

netstat -lntp | grep qemu-kvm
tcp 0 0 0.0.0.0:5900 0.0.0.0:* LISTEN 3232/qemu-kvm

# 通过vnc连接5900端口进行操作系统安装

9、虚拟机的管理可以使用virt-manager,直接在vnc界面运行virt-manager命令即可

10、使用模版创建虚拟机

cp /Data/kvm/img/test/CentOS7.6-template.qcow2 /Data/kvm/img/test/node-192.168.5.90-test.qcow2
virt-install --name node-192.168.5.90-test --ram 4096 --vcpu=2 --virt-type kvm --disk /Data/kvm/img/test/node-192.168.5.90-test.qcow2,bus=virtio --network bridge=br1,model=virtio --import --noautoconsole

11、物理机连接kvm

virsh list --all
virsh console $vm

# 退出
crtl+]

12、常用命令

virsh --help                                     #查看命令帮忙
virsh list #显示正在运行的虚拟机
virsh list --all #显示所有的虚拟机
virsh start vm-node1 #启动vm-node1虚拟机
virsh shutdown vm-node1 #关闭vm-node1虚拟机
virsh destroy vm-node1 #虚拟机vm-node1强制断电
virsh suspend vm-node1 #挂起vm-node1虚拟机
virsh resume vm-node1 #恢复挂起的虚拟机
virsh undefine vm-node1 #删除虚拟机,慎用
virsh dominfo vm-node1 #查看虚拟机的配置信息
virsh domiflist #查看网卡配置信息
virsh domblklist vm-node1 #查看该虚拟机的磁盘位置
virsh edit vm-node1 #修改vm-node1的xml配置文件
virsh dumpxml vm-node1 #查看KVM虚拟机当前配置
virsh dumpxml vm-node1 > vm-node1.bak.xml #备份vm-node1虚拟机的xml文件,原文件默认路径/etc/libvirt/qemu/vm-node1.xml
virsh autostart vm-node1 #KVM物理机开机自启动虚拟机,配置后会在此目录生成配置文件/etc/libvirt/qemu/autostart/vm-node1.xml
virsh autostart --disable vm-node1 #取消开机自启动

13、为虚拟机增加网卡

一个完整的数据包从虚拟机到物理机的路径是:虚拟机-->QEMU虚拟机网卡-->虚拟化层-->内核网桥-->物理网卡
KVM默认情况下是由QEMU在Linux的用户空间模拟出来的并提供给虚拟机的。
全虚拟化:即客户机操作系统完全不需要修改就能运行于虚拟机中,客户机看不到真正的硬件设备,与设备的交互全是由纯软件虚拟的
半虚拟化:通过对客户机操作系统进行修改,使其意识到自己运行在虚拟机中。因此,全虚拟化和半虚拟化网卡的区别在于客户机是否需要修改才能运行在宿主机中。
半虚拟化使用virtio技术,virtio驱动因为改造了虚拟机的操作系统,让虚拟机可以直接和虚拟化层通信,从而大大提高了虚拟机性能。

virsh domiflist vm-node1
virsh attach-interface vm-node1 --type bridge --source br0 --model virtio #临时增加网卡的方法,关机后再开机新增网卡配置丢失
virsh edit vm-node1 #永久生效方法一:修改配置文件增加如下内容
<interface type=bridge> #永久生效方法二:使用virt-manager管理工具进行操作
<mac address=52:54:00:11:90:7c/>
<source bridge=br0/>
<target dev=vnet1/>
<model type=virtio/>
<alias name=net1/>
<address type=pci domain=0x0000 bus=0x00 slot=0x08 function=0x0/>
</interface>

virsh domiflist vm-node1 #查找虚拟机网卡的MAC地址
virsh detach-interface vm-node1 --type bridge --mac 52:54:00:84:23:3d --current #根据MAC地址删除网卡,即时生效,如果需要最终生效也要使用virsh edit 来修改配置文件
virsh domiflist vm-node1
Interface Type Source Model MAC

14、虚拟机增加硬盘

KVM虚拟机的磁盘镜像从存储方式上看,可以分为两种方式,第一种方式为存储于文件系统上,第二种方式为直接使用裸设备。裸设备的使用方式可以是直接使用裸盘,也可以是用LVM的方式。存于文件系统上的镜像有很多格式,如raw、cloop、cow、qcow、qcow2、vmdlk、vdi等,经常使用的是raw(上限15T)和qcow2。
raw:是简单的二进制镜像文件,一次性会把分配的磁盘空间占用。raw支持稀疏文件特性,稀疏文件特性就是文件系统会把分配的空字节文件记录在元数据中,而不会实际占用磁盘空间。
qcow2:第二代的QEMU写时复制格式,支持很多特性,如快照、在不支持稀疏特性的文件系统上也支持精简方式、AES加密、zlib压缩、后备方式。

qemu-img create -f raw /Data/vm-node1-10G.raw 10G #创建raw格式并且大小为10G的磁盘
qemu-img info /Data/vm-node1-10G.raw
virsh attach-disk vm-node1 /Data/vm-node1-10G.raw vdb --cache none #临时生效,关机再开机后失效

virsh dumpxml vm-node1 #通过dumpxml找到下段配置文件
virsh edit vm-node1 #使用edit命令,把找到的内容加到vda磁盘后面即可
<disk type=file device=disk>
<driver name=qemu type=raw cache=none/>
<source file=/Data/vm-node1-10G.raw/>
<backingStore/>
<target dev=vdb bus=virtio/>
<alias name=virtio-disk1/>
<address type=pci domain=0x0000 bus=0x00 slot=0x09 function=0x0/>
</disk>
fdisk -l #数据盘已挂载,可以进行分区、格式化、挂载等操作

# 磁盘镜像格式的转换方法
qemu-img create -f raw test.raw 5G
qemu-img convert -p -f raw -O qcow2 test.raw test.qcow2 #参数-p显示进度,-f是指原有的镜像格式,-O是输出的镜像格式,然后是输入文件和输出文件
qemu-img info test.qcow2

15、克隆虚拟机(virt-clone)

virsh shutdown CentOS-7.2-x86_64                                                      #必须要关机才能进行克隆
virsh list --all

# 克隆主机
virt-clone -o CentOS-7.2-x86_64 -n vm-node2 -f /opt/vm-node2.raw #参数含义:-o被克隆虚拟机的名字、-n克隆后虚拟机的名字、-f指定磁盘存储位置
virsh list --all #克隆后为关机状态

# 创建磁盘快照
# virsh snapshot-create-as --domain node-192.168.5.95-kubeadmin-master --name kubeadmin-sys-init --description 准备完成

# 查看磁盘快照
virsh snapshot-list node-192.168.5.95-kubeadmin-master

# 恢复磁盘快照
virsh snapshot-revert node-192.168.5.95-kubeadmin-master kubeadmin-sys-init

# 删除磁盘快照
virt snapshot-delete node-192.168.5.95-kubeadmin-master kubeadmin-sys-init

16、修改虚拟机名字

virsh shutdown CentOS-7.2-x86_64                                                         #需要先关机,然后对虚拟机进行改名
cp /etc/libvirt/qemu/vm-node2.xml /etc/libvirt/qemu/vm-test.xml #拷贝xml文件为要修改的名称,如:vm-test
grep <name> /etc/libvirt/qemu/vm-test.xml #修改vm-test.xml中的name字段为vm-test
<name>vm-test</name>
virsh undefine vm-node2 #删除之前的虚拟机


virsh define /etc/libvirt/qemu/vm-test.xml #定义新的虚拟机
virsh list --all #已完成改名操作

17、修改kvm虚拟机的cpu(需要先配置XML配置文件)

# 查看默认的CPU和内存大小
virsh edit node-192.168.5.90-test

<domain type=kvm>
<name>node-192.168.5.90-test</name>
<uuid>de4fe850-2fa7-49be-b785-77642bc95713</uuid>
<memory unit=KiB>4194304</memory>
<currentMemory unit=KiB>4194304</currentMemory>
<vcpu placement=static>2</vcpu>

# 修改配置
<domain type=kvm>
<name>node-192.168.5.90-test</name>
<uuid>de4fe850-2fa7-49be-b785-77642bc95713</uuid>
<memory unit=KiB>8192000</memory>
<currentMemory unit=KiB>4194304</currentMemory>
<vcpu placement=auto current="1">16</vcpu>

# 关闭虚拟机,再开机;注意不要重启,重启配置不生效。
virsh shutdown node-192.168.5.90-test
virsh start node-192.168.5.90-test

# 动态修改VCPU;VCPU只能热增加,不能减少
# 查看当前逻辑CPU数量
[root@192-168-5-90 ~]# cat /proc/cpuinfo| grep "processor"| wc -l
1
# 动态增加到4个
virsh setvcpus node-192.168.5.90-test 4 --live
# 再次查看CPU数量
[root@192-168-5-90 ~]# cat /proc/cpuinfo| grep "processor"| wc -l
4

# 动态修改内存(增减都可以)
# virsh qemu-monitor-command node-192.168.5.90-test --hmp --cmd info balloon # 查看当前内存大小
balloon: actual=4096
# virsh qemu-monitor-command node-192.168.5.90-test --hmp --cmd balloon 8190 # 设置当前内存为8G

# virsh qemu-monitor-command node-192.168.5.90-test --hmp --cmd info balloon # 查看当前内存大小
balloon: actual=8000
# virsh qemu-monitor-command node-192.168.5.90-test --hmp --cmd balloon 6000 # 设置当前内存为6G

# virsh qemu-monitor-command node-192.168.5.90-test --hmp --cmd info balloon # 查看当前内存大小
balloon: actual=6000

Ubuntu 和centos 有啥区别

Ubuntu依托于Debian,centos依附于RHEL;Ubuntu适用deb、snap 软件包;centos适用rpm、flatpak软件包;Ubuntu需要用apt 来更新,centos更新需要用到yum;centos升级步骤简单,ubuntu升级流程比较复杂且需要经常更新系统,centos安全性更高;,centos因为没具体的适用教程,因此用户量没有Ubuntu高。 参考技术A CentOS是Linux发行版本之一,来源于Red Hat enterprise
Linux,由于同样是出自开放源代码,所以很多对稳定性较高的服务器都以CentOS来替代Red Hat Enterprise
Linux使用。经过多年的不断发展和完善,目前CentOS有很多版本,主流使用的是CentOS6、CentOS7等。
Ubuntu是一个以桌面应用为主系统,Ubuntu基于Debian发行版和GNOME桌面环境。Ubuntu主要是为一般用户提供最新且稳定的操作系统。
CentOS和Ubuntu的区别,主要体现在这几个方面:
系统升级:CentOS升级不频繁,省事省心;Ubuntu升级比较频繁,经常需要更新系统。
稳定性:CentOS系统更加安全稳定;Ubuntu升级包可能会造成系统不稳定和不安全。
使用难度:CentOS新用户上手比较困难,Ubuntu拥有大量帮助文档和教程,对新手比较友好。
软件管理:CentOS使用.rmp包,以及使用yum进行软件管理;Ubuntu使用.deb包,以及使用apt-get进行软件管理。
综合情况来讲,CentOS和Ubuntu各有各的优缺点,每个人的使用场景不同,选择不同,根据自己的需求来决定。

以上是关于CentOS 7.X部署KVM虚拟机的主要内容,如果未能解决你的问题,请参考以下文章

CentOS7上安装KVM部署虚拟机

Centos7 部署KVM虚拟化平台

VMware平台部署KVM网络无法通信

VMware平台部署KVM网络无法通信

VMware里面centos7安装虚拟机KVM

使用Windows的KVM虚拟机与CentOS宿主机互通