centos7安装kvm--命令行模式安装虚拟机

KVM简介

KVM(名称来自英语:Kernel-basedVirtual Machine的缩写,即基于内核的虚拟机),是一种用于Linux内核中的虚拟化基础设施,可以将Linux内核转化为一个hypervisor。KVM在2007年2月被导入Linux 2.6.20核心中,以可加载核心模块的方式被移植到FreeBSD及illumos上。

KVM在具备Intel VT或AMD-V功能的x86平台上运行。它也被移植到S/390,PowerPC与IA-64平台上。在Linux内核3.9版中,加入ARM架构的支持。


1).KVM是开源软件,全称是kernel-based virtual machine(基于内核的虚拟机)。
2).是x86架构且硬件支持虚拟化技术(如 intel VT 或 AMD-V)的Linux全虚拟化解决方案。
3).它包含一个为处理器提供底层虚拟化 可加载的核心模块kvm.ko(kvm-intel.ko或kvm-AMD.ko)。
4).KVM还需要一个经过修改的QEMU软件(qemu-kvm),作为虚拟机上层控制和界面。
5).KVM能在不改变linux或windows镜像的情况下同时运行多个虚拟机,(它的意思是多个虚拟机使用同一镜像)并为每一个虚拟机配置个性化硬件环境(网卡、磁盘、图形适配器……)。
6).在主流的Linux内核,如2.6.20以上的内核均已包含了KVM核心。

kvm 是linux内核包含的东西,使用qemu作为上层管理(命令行)。
1).要求cpu 必须支持虚拟化。
2).性能:作为服务器很好,可是图形能力十分的差。即使放电影,图像也是像刷油漆一样,一层一层的。
3).cpu使用率控制很好。
4).控制上比较简洁,功能比较丰富:比如使用“无敌功能”所有更改指向内存,你的镜像永远保持干净。“母镜像”功能让你拥有n个独立快照点。还有很多参数。另外,kvm作为内核级的虚拟机,刚开始发展关注的公司比较多——但是还没有达到商业应用的水平。
KVM内存管理
KVM继承了Linux系统管理内存的诸多特性,比如,分配给虚拟使用的内存可以被交换至交换空间、能够使用大内存页以实现更好的性能,以及对NUMA的支持能够让虚拟机高效访问更大的内存空间等。
KVM基于Intel的EPT(ExtendedPage Table)或AMD的RVI(Rapid Virtualization Indexing)技术可以支持更新的内存虚拟功能,这可以降低CPU的占用率,并提供较好的吞吐量。
此外,KVM还借助于KSM(Kernel Same-pageMerging)这个内核特性实现了内存页面共享。KSM通过扫描每个虚拟机的内存查找各虚拟机间相同的内存页,并将这些内存页合并为一个被各相关虚拟机共享的单独页面。在某虚拟机试图修改此页面中的数据时,KSM会重新为其提供一个新的页面副本。实践中,运行于同一台物理主机上的具有相同GuestOS的虚拟机之间出现相同内存页面的概率是很高的,比如共享库、内核或其它内存对象等都有可能表现为相同的内存页,因此,KSM技术可以降低内存占用进而提高整体性能。


1,安装准备
关闭防火墙和selinux

[root@ c7-41 ~] systemctl stop firewalld
[root@ c7-41 ~] systemctl disable firewalld
[root@ c7-41 ~] setenforce 0
[root@ c7-41 ~] sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

centos7安装kvm--命令行模式安装虚拟机_第1张图片
查看硬件是否支持虚拟化

[root@ c7-41 ~] egrep '(vmx|svm)' /proc/cpuinfo

centos7安装kvm--命令行模式安装虚拟机_第2张图片
注意:要有 vmx 或 svm 的标识才行。vmx标识intel,svm代表AMD。

2.安装KVM
由于Linux内核已经将KVM收录了,在安装系统时已经加入了KVM,我们只需要在命令行模式下启用KVM即可:

[root@ c7-41 ~] modprobe kvm
[root@ c7-41 ~] lsmod |grep kvm
kvm_intel             188644  0 
kvm                   621480  1 kvm_intel
irqbypass              13503  1 kvm

KVM虚拟机创建和管理所依赖的组件介绍
KVM虚拟机的创建依赖qemu-kvm:
虽然kvm的技术已经相当成熟而且可以对很多东西进行隔离,但是在某些方面还是无法虚拟出真实的机器。比如对网卡的虚拟,那这个时候就需要另外的技术来做补充,而qemu-kvm则是这样一种技术。它补充了kvm技术的不足,而且在性能上对kvm进行了优化。
我们还可以使用virt-manager,virt-viewer来管理虚拟机;
我们在创建和管理KVM虚拟机时还需要libvirt这个重要的组件。
3,安装KVM所需组件

[root@ c7-41 ~] yum -y install virt-* libvirt bridge-utils qemu-img qemu-kvm
#启动libvirtd服务
[root@ c7-41 ~] systemctl start libvirtd
#查看是否安装正确
[root@ c7-41 ~] ifconfig 

centos7安装kvm--命令行模式安装虚拟机_第3张图片

[root@ c7-41 ~] brctl show #使用网桥管理命令查看
bridge name	bridge id		STP enabled	interfaces
virbr0		8000.525400509c9a	yes		virbr0-nic
#像VMware Workstation中需要创建物理桥接设备,可以使用virsh创建桥设备关联网卡到桥接设备上。
[root@ c7-41 ~] systemctl stop NetworkManager #将NetworkManager服务关闭
[root@ c7-41 ~] systemctl disable NetworkManager #关闭开机启动

4,创建桥接设备及关联网卡到桥接设备上

[root@ c7-41 ~] virsh iface-bridge ens33 br0
Created bridge br0 with attached device ens33
Bridge interface br0 started
[root@ c7-41 ~] ifconfig 

centos7安装kvm--命令行模式安装虚拟机_第4张图片

[root@ c7-41 ~] brctl show #使用网桥管理命令查看
bridge name	bridge id		STP enabled	interfaces
br0		8000.000c29dc4316	yes		ens33
virbr0		8000.525400509c9a	yes		virbr0-nic
#列表中多了br0,说明桥接成功

5,创建kvm项目目录,上传镜像

[root@ c7-41 ~] mkdir /kvm_data
[root@ c7-41 ~] cd /tmp/
#上传或者下载镜像
[root@ c7-41 tmp] ls
CentOS-7-x86_64-DVD-1908.iso

6,使用命令行安装这个CentOS7镜像文件

[root@ c7-41 tmp]  virt-install --name=gurobi --memory=512,maxmemory=1024 --vcpus=1,maxvcpus=2 --os-type=linux --os-variant=rhel7 --location=/tmp/CentOS-7-x86_64-DVD-1908.iso --disk path=/kvm_data/gurobi.img,size=10 --bridge=br0 --graphics=none --console=pty,target_type=serial --extra-args="console=tty0 console=ttyS0"

命令以及参数说明

–name 指定虚拟机的名称
–memory 指定分配给虚拟机的内存资源大小
maxmemory 指定可调节的最大内存资源大小,因为KVM支持热调整虚拟机的资源
–vcpus 指定分配给虚拟机的CPU核心数量
maxvcpus 指定可调节的最大CPU核心数量
–os-type 指定虚拟机安装的操作系统类型
–os-variant 指定系统的发行版本
–location 指定ISO镜像文件所在的路径,支持使用网络资源路径,也就是说可以使用URL
–disk path 指定虚拟硬盘所存放的路径及名称,size 则是指定该硬盘的可用大小,单位是G
–bridge 指定使用哪一个桥接网卡,也就是说使用桥接的网络模式
–graphics 指定是否开启图形
–console 定义终端的属性,target_type 则是定义终端的类型
–extra-args 定义终端额外的参数

virt-install参数说明

usage: virt-install --name NAME --memory MB STORAGE INSTALL [options]

从指定安装源创建新虚拟机。

optional arguments:
  -h, --help            show this help message and exit
  --version             show program's version number and exit
  --connect URI         通过 libvirt URI 连接到虚拟机管理程序

通用选项:
  -n NAME, --name NAME  客户机实例名称
  --memory MEMORY       Configure guest memory allocation. Ex:
                        --memory 1024 (in MiB)
                        --memory 512,maxmemory=1024
                        --memory 512,maxmemory=1024,hotplugmemorymax=2048,hotplugmemoryslots=2
  --vcpus VCPUS         配置客户机虚拟 CPU(vcpu) 数量。例如:
                        --vcpus 5
                        --vcpus 5,maxcpus=10,cpuset=1-4,6,8
                        --vcpus sockets=2,cores=4,threads=2
  --cpu CPU             CPU model and features. Ex:
                        --cpu coreduo,+x2apic
                        --cpu host-passthrough
                        --cpu host
  --metadata METADATA   配置客户机元数据。例如:
                        --metadata name=foo,title="My pretty title",uuid=...
                        --metadata description="My nice long description"

安装方法选项:
  --cdrom CDROM         光驱安装介质
  -l LOCATION, --location LOCATION
                        安装源 (例如:nfs:host:/path, http://host/path,
                        ftp://host/path)
  --pxe                 使用 PXE 协议从网络引导
  --import              在已有的磁盘镜像中构建客户机
  --livecd              将光驱介质视为 Live CD
  -x EXTRA_ARGS, --extra-args EXTRA_ARGS
                        将附加参数添加到由 --location
                        引导的内核中
  --initrd-inject INITRD_INJECT
                        添加指定文件到由 --location 指定的 initrd
                        根中
  --os-variant DISTRO_VARIANT
                        在客户机上安装的操作系统,例如:'fedor
                        a18'、'rhel6'、'winxp' 等。
  --boot BOOT           配置客户机引导设置。例如:
                        --boot hd,cdrom,menu=on
                        --boot init=/sbin/init (针对容器)
  --idmap IDMAP         为 LXC 容器启用用户名称空间。例如:
                        --idmap uid_start=0,uid_target=1000,uid_count=10

设备选项:
  --disk DISK           指定存储的各种选项。例如:
                        --disk size=10 (在默认位置创建 10GiB 镜像)
                        --disk /my/existing/disk,cache=none
                        --disk device=cdrom,bus=scsi
                        --disk=?
  -w NETWORK, --network NETWORK
                        配置客户机网络接口。例如:
                        --network bridge=mybr0
                        --network network=my_libvirt_virtual_net
                        --network network=mynet,model=virtio,mac=00:11...
                        --network none
                        --network help
  --graphics GRAPHICS   配置客户机显示设置。例如:
                        --graphics vnc
                        --graphics spice,port=5901,tlsport=5902
                        --graphics none
                        --graphics vnc,password=foobar,port=5910,keymap=ja
  --controller CONTROLLER
                        配置客户机控制器设备。例如:
                        --controller type=usb,model=ich9-ehci1
  --input INPUT         配置客户机输入设备。例如:
                        --input tablet
                        --input keyboard,bus=usb
  --serial SERIAL       配置客户机串口设备
  --parallel PARALLEL   配置客户机并口设备
  --channel CHANNEL     配置客户机通信通道
  --console CONSOLE     配置文本控制台连接主机与客户机
  --hostdev HOSTDEV     配置物理 USB/PCI 等主机设备与客户机共享
  --filesystem FILESYSTEM
                        传递主机目录到客户机。例如:
                        --filesystem /my/source/dir,/dir/in/guest
                        --filesystem template_name,/,type=template
  --sound [SOUND]       配置客户机声音设备仿真
  --watchdog WATCHDOG   配置客户机 watchdog 设备
  --video VIDEO         配置客户机视频硬件。
  --smartcard SMARTCARD
                        配置客户机智能卡设备。例如:
                        --smartcard mode=passthrough
  --redirdev REDIRDEV   配置客户机重定向设备。例如:
                        --redirdev usb,type=tcp,server=192.168.1.1:4000
  --memballoon MEMBALLOON
                        配置客户机 memballoon 设备。例如:
                        --memballoon model=virtio
  --tpm TPM             配置客户机 TPM 设备。例如:
                        --tpm /dev/tpm
  --rng RNG             Configure a guest RNG device. Ex:
                        --rng /dev/urandom
  --panic PANIC         配置客户机 panic 设备。例如:
                        --panic default
  --memdev MEMDEV       Configure a guest memory device. Ex:
                        --memdev dimm,target_size=1024

客户机配置选项:
  --security SECURITY   设置域安全驱动配置。
  --cputune CPUTUNE     Tune CPU parameters for the domain process.
  --numatune NUMATUNE   为域进程调整 NUMA 策略。
  --memtune MEMTUNE     为域进程调整内存策略。
  --blkiotune BLKIOTUNE
                        为域进程调整 blkio 策略。
  --memorybacking MEMORYBACKING
                        为域进程设置内存后备策略。例如:
                        --memorybacking hugepages=on
  --features FEATURES   设置域  XML。例如:
                        --features acpi=off
                        --features apic=on,eoi=on
  --clock CLOCK         设置域  XML。例如:
                        --clock offset=localtime,rtc_tickpolicy=catchup
  --pm PM               配置 VM 电源管理功能
  --events EVENTS       配置 VM 生命周期管理策略
  --resource RESOURCE   配置 VM 资源分区(cgroups)
  --sysinfo SYSINFO     Configure SMBIOS System Information. Ex:
                        --sysinfo emulate
                        --sysinfo host
                        --sysinfo bios_vendor=Vendor_Inc.,bios_version=1.2.3-abc,...
                        --sysinfo system_manufacturer=System_Corp.,system_product=Computer,...
                        --sysinfo baseBoard_manufacturer=Baseboard_Corp.,baseBoard_product=Motherboard,...
  --qemu-commandline QEMU_COMMANDLINE
                        Pass arguments directly to the qemu emulator. Ex:
                        --qemu-commandline='-display gtk,gl=on'
                        --qemu-commandline env=DISPLAY=:0.1

虚拟化平台选项:
  -v, --hvm             这个客户机应该是一个全虚拟化客户机
  -p, --paravirt        这个客户机应该是一个半虚拟化客户机
  --container           这个客户机应该是一个容器客户机
  --virt-type HV_TYPE   要使用的管理程序名称 (kvm, qemu, xen, ...)
  --arch ARCH           模拟 CPU 架构
  --machine MACHINE     机器类型为仿真类型

其它选项:
  --autostart           主机启动时自动启动域。
  --transient           Create a transient domain.
  --wait WAIT           请等待数分钟以便完成安装。
  --noautoconsole       不要自动尝试连接到客户端控制台
  --noreboot            安装完成后不启动客户机。
  --print-xml [XMLONLY]
                        打印生成的 XML 域,而不是创建客户机。
  --dry-run             运行安装程序,但不创建设备或定义客户
                        机。
  --check CHECK         启用或禁用验证检查。例如:
                        --check path_in_use=off
                        --check all=off
  -q, --quiet           抑制非错误输出
  -d, --debug           输入故障排除信息 

7,开始安装后,正常的情况下会进入到一下界面:
*设置语言,输入数字1,回车进入以下界面
centos7安装kvm--命令行模式安装虚拟机_第5张图片
这是通过命令行配置语言、时区、安装源、网络、密码等信息
centos7安装kvm--命令行模式安装虚拟机_第6张图片
选English数字数字16并回车即可
在这里插入图片描述
设置语言,英语(通用)
centos7安装kvm--命令行模式安装虚拟机_第7张图片
设置时区
centos7安装kvm--命令行模式安装虚拟机_第8张图片
亚洲上海
centos7安装kvm--命令行模式安装虚拟机_第9张图片
centos7安装kvm--命令行模式安装虚拟机_第10张图片
安装位置
centos7安装kvm--命令行模式安装虚拟机_第11张图片
centos7安装kvm--命令行模式安装虚拟机_第12张图片
标准化分区
centos7安装kvm--命令行模式安装虚拟机_第13张图片
设置用户密码
centos7安装kvm--命令行模式安装虚拟机_第14张图片
开始安装
centos7安装kvm--命令行模式安装虚拟机_第15张图片
安装成功
centos7安装kvm--命令行模式安装虚拟机_第16张图片

现在是处于我们构建的虚拟终端,如果推出虚拟终端,按Ctrl + ] 即可。

切出虚拟机后,可以看到/kvm_data/目录下多了一个虚拟机的磁盘目录

[root@ c7-41 tmp] ls /kvm_data/
gurobi.img

列出当前有多少个虚拟机,以及其状态

[root@ c7-41 ~]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 1     gurobi                         running
[root@ c7-41 ~]# virsh list
 Id    Name                           State
----------------------------------------------------
 1     gurobi                         running

查看虚拟机配置文件

[root@ c7-41 ~] ls /etc/libvirt/qemu/
Centos7x64_1908.xml  gurobi.xml  networks
[root@ c7-41 ~] ls /etc/libvirt/qemu/networks/
autostart  default.xml
[root@ c7-41 ~] ls /etc/libvirt/qemu/networks/autostart/
default.xml

管理虚拟机的一些常用命令:

# virsh console xxx # 进入指定的虚拟机,进入的时候还需要按一下回车
# virsh start xxx # 启动虚拟机
# virsh shutdown xxx # 关闭虚拟机
# virsh destroy xxx # 强制停止虚拟机
# virsh undefine xxx # 彻底销毁虚拟机,会删除虚拟机配置文件,但不会删除虚拟磁盘
# virsh autostart xxx # 设置宿主机开机时该虚拟机也开机
# virsh autostart --disable xxx # 解除开机启动
# virsh suspend xxx # 挂起虚拟机
# virsh resume xxx # 恢复挂起的虚拟机

8,进入虚拟机

#gurobi是创建虚拟终端的名字
[root@ c7-41 tmp] virsh console gurobi
Connected to domain gurobi
Escape character is ^]
[root@localhost ~] ip addr # 此时还没有能联网的IP
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
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:65:d3:3f brd ff:ff:ff:ff:ff:ff
[root@localhost ~] dhclient eth0 # 获取IP地址
[root@localhost ~] ip addr # 此时可以看到已经有IP地址了
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
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:65:d3:3f brd ff:ff:ff:ff:ff:ff
inet 192.168.77.140/24 brd 192.168.77.255 scope global dynamic eth0
valid_lft 1793sec preferred_lft 1793sec
inet6 fe80::5054:ff:fe65:d33f/64 scope link
valid_lft forever preferred_lft forever
# 获取到IP能联网后安装网络管理工具
[root@localhost ~] yum install -y net-tools
#安装完之后就可以使用ifconfig命令了 
[root@localhost ~] ifconfig  	
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.77.140 netmask 255.255.255.0 broadcast 192.168.77.255
inet6 fe80::5054:ff:fe65:d33f prefixlen 64 scopeid 0x20
ether 52:54:00:65:d3:3f txqueuelen 1000 (Ethernet)
RX packets 4404 bytes 13614102 (12.9 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 2480 bytes 139445 (136.1 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10
loop txqueuelen 0 (Local Loopback)
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
[root@localhost ~] cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts] vi ifcfg-eth0 # 修改ONBOOT的值为yes
ONBOOT=yes
[root@localhost network-scripts] systemctl restart network # 重启网卡服务

你可能感兴趣的:(centos7安装kvm--命令行模式安装虚拟机)