1.公司测试环境/开发环境
测试开发环境可以使用配置低点的物理机就可以
2.公司生产环境
一般小公司没有私有云或容器团队,运维人员可能就1-2个,然后公司也不舍得花钱买商业化的私有云。
那么在这种情况下搞一台或多台高配的物理机里面装多个虚拟机,可以设置基础的虚拟机模板或根据不同业务设置不同的虚拟机模板,完成初步的环境标准,便于以后自动化运维。
KVM(Kernel-based Virtual Machine)是一个linux的内核模块,现在已经是内核自带默认编译,不需要单独安装。主要负责控制cpu和内存跟内核的交互调度等工作,工作在内核态。
KVM需要CPU中虚拟化功能的支持,只可在具有虚拟化支持的CPU上运行,即具有VT功能的Intel CPU和具有AMD-V功能的AMD CPU。
KVM 虚拟化特性:
虚拟机镜像:
KVM 管理工具:

libvirt 提供一种虚拟机监控程序不可知的 API 来安全管理运行于主机上的客户操作系统。libvirt 本身不是一种工具, 它是一种可以建立工具来管理客户操作系统的 API。libvirt 本身构建于一种抽象的概念之上。它为受支持的虚拟机监控程序实现的常用功能提供通用的 API。libvirt 起初是专门为 Xen 设计的一种管理 API,后来被扩展为可支持多个虚拟机监控程序。

有两种主要运作模式:
* User mode模拟模式,亦即是用户模式。QEMU能启动那些为不
同中央处理器编译的Linux程序。而Wine及Dosemu是其主要目标。
* System mode模拟模式,亦即是系统模式。QEMU能模拟整个电脑系统,
包括中央处理器及其他周边设备。它使得为跨平台编写的程序进行测试及除错工作变得容易。
其亦能用来在一部主机上虚拟数部不同虚拟电脑。
[root@192-168-x-x img]# systemctl disable NetworkManager
[root@192-168-x-x img]# systemctl disable firewalld
[root@192-168-x-x img]# grep ^SELINUX /etc/selinux/config 
SELINUX=disabled
[root@192-168-x-x network-scripts]# more /etc/resolv.conf 
nameserver 114.114.114.114
nameserver 8.8.8.8
rpm -ivh http://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm
yum install net-tools vim screen mtr  nc nmap tree lrzsz open-ssl-devel gcc glibc gcc-c* make zip dos2unix  systat mysql lsof tcpdump ntpdate -y
虚拟化 Inter VT-x/EPT(内存虚拟化)或 AMD-V/RVI(V) 开启
grep -E ‘(vmx|svm)‘ /proc/cpuinfo
kvm是内核虚拟机,需要加载内核模块,libvirtd是用于管理kvm虚拟机
yum install -y qemu-kvm  qemu-kvm-tools  libvirt
systemctl  start libvirtd
systemctl  enable libvirtd
xml是libvirt 自动生成,xml里面的virtio是半虚拟化渠道,hvm是硬件虚拟机,还有一些其他的虚拟机配置信息
[root@192-168-x-x libvirt]# ls
libvirt-admin.conf  libvirt.conf  libvirtd.conf  lxc.conf  nwfilter  qemu  qemu.conf  qemu-lockd.conf  storage  virtlockd.conf  virtlogd.conf
[root@192-168-x-x libvirt]# pwd
/etc/libvirt
可以用ifconfig命令查看
#ifconfig
......
virbr0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255
        ether 52:54:00:5c:f1:a5  txqueuelen 0  (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
[xiewenming@192-168-x-x ~]$ ps aux |grep dnsmasq
nobody     2992  0.0  0.0  15544   152 ?        S    Mar14   0:36 /sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/usr/libexec/libvirt_leaseshelper
root       2993  0.0  0.0  15516     4 ?        S    Mar14   0:00 /sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/usr/libexec/libvirt_leaseshelper
xiewenm+  35304  0.0  0.0 112652   960 pts/3    S+   15:38   0:00 grep --color=auto dnsmasq
安装virt-install,virt-edit,virt-manager,tigervnc-server和tigervnc相关的包,分别用于 安装,编辑,管理,vnc服务来管理维护虚拟机
可以提供接口 virsh等 底层都是libvirt libvirtd服务停止 kvm正常,只是管理不了,virsh是用C写的
yum install -y virt-install libguestfs-tools-c  virt-manager tigervnc-server tigervnc
使用命令重启服务器或重启网络后配置丢失 (一般用于调试用)
brctl addbr br0
brctl addif br0 eth0 #(执行这一步会断网,可以把所有步骤写在一个脚本里)
ip addr del dev eth0 192.168.x.x/24 
ifconfig br1 192.168.x.x/24 up
route add default gw 192.168.x.1
桥接信息写到配置文件里面,下面以桥架网卡1为例
[root@192-168-x-x network-scripts]# more ifcfg-br1 
TYPE=Bridge
BOOTPROTO=none
DEVICE=br1
ONBOOT=yes
IPADDR0=192.168.x.x
PREFIX0=24
GATEWAY0=192.168.x.1
[root@192-168-x-x network-scripts]# more ifcfg-eth1 
DEVICE=eth1
TYPE=Ethernet
ONBOOT=yes
BRIDGE=br1
[root@192-168-x-x network-scripts]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.x.10    0.0.0.0         UG    0      0        0 br1
169.254.0.0     0.0.0.0         255.255.0.0     U     1004   0        0 br0
169.254.0.0     0.0.0.0         255.255.0.0     U     1005   0        0 br1
192.168.x.0     0.0.0.0         255.255.255.0   U     0      0        0 br1
192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0
yum groupinstall "X Window System"
yum install gnome-classic-session gnome-terminal nautilus-open-terminal control-center liberation-mono-fonts
unlink /etc/systemd/system/default.target
ln -sf /lib/systemd/system/graphical.target /etc/systemd/system/default.target
[root@192-168-x-x network-scripts]# vncpasswd 
Password:     #设置密码
[root@192-168-x-x network-scripts]# vncserver 
New ‘192-168-x-x.xxx.com:1 (root)‘ desktop is 192-168-x-x.xxx.com:1
Starting applications specified in /root/.vnc/xstartup
Log file is /root/.vnc/192-168-x-x.xxx.com:1.log
[root@192-168-x-x network-scripts]# netstat -an|grep 0.0.0.0:59
tcp        0      0 0.0.0.0:5901            0.0.0.0:*               LISTEN  

 
可以关机,重启,删除,增加删除配置,安装系统等等 ,也可以支持安装Windows系统虚拟机

virt-install创建虚拟机,不熟悉可以用virt-install --help查看帮助命令
virt-intall --virt-type kvm --name CentOS-7-x86_64 --ram 2048 --cdrom=/Data/CentOS-7-x86_64-DVD-1503-01.iso \
 --disk path=/Data/CentOS-7-x86-_64.raw --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole
用VNC客户端链接(60s内) 默认从5900开始,客户端安装截图略....我一般都通过vnc然后再用virt-manager进行管理虚拟机
brctl show #查看桥接网卡信息
virsh edit vname.xml #修改xml文件
virsh shutdown vname #关闭虚拟机
virsh start vname #启动虚拟机
virsh list --all #列出全部虚拟机
virsh dumpxml vname > vname.bak.xml #备份
qemu-img convert -f raw -O qcow2 vname test.qcow2 #镜像文件格式转换
qemu-img create -f raw node-192.168.3.30-centos-7.2.disk 50G #创建磁盘镜像命令
virsh undefine node1.xml (删除虚拟机域,生产环境不用此命令,非常危险)
virt-clone -o centos7_mini -n centos7_mini15 --auto-clone #克隆mini,新克隆的为mini15
-o #原始机名字,必须为关闭或暂停状态
-n #新客户机的名称
--auto-clone #从原始客户机配置中自动生成克隆名称和存储路径
--replace #不检查命名冲突,覆盖任何使用相同名称的客户机
-f #可以指定克隆后的主机镜像放在指定目录下
virsh autostart xxx #让子机随宿主机开机自动启动
virsh autostart --disable xxx #解除自动启动
virt-install #建立kvm虚拟机
virsh list #查看正在运行的KVM虚拟机
virsh start name #启动KVM虚拟机
virsh shutdown name #正常关闭KVM虚拟机
virsh destroy name #强制关闭KVM虚拟机(类似于直接断电)
virsh suspend name #挂起KVM虚拟机
virsh resume name #恢复挂起的KVM虚拟机
virsh dumpxml name #查看KVM虚拟机配置文件,可以把输出的内容定义到xml里,用来克隆迁移用。
virsh edit name #编辑KVM虚拟机的xml配置文件
virsh define /etc/libvirt/qemu/name.xml #定义注册虚拟机,需要先查看xml文件对应的镜像,img等路径是否存在或修改指定路径
virsh undefine name #彻底删除KVM虚拟机,不可逆,如果想找回来,需要备份/etc/libvirt/qemu的xml文件
virsh attach-disk centos7_mini15 /home/disk_data/centos7_mini15.img vdb #分离虚拟机硬盘
virsh detach-disk centos7_mini15 /home/disk_data/centos7_mini15.img vdb#为虚拟机添加硬盘
原文:https://www.cnblogs.com/seasonzone/p/13717756.html