KVM-命令行安装
1、虚拟机的设置,然后开启虚拟机
2、系统环境的要求
2.1.关闭防火墙和seliunx
[root@ c7-41 ~]# systemctl stop firewalld
[root@ c7-41 ~]# systemctl disable firewalld
[root@ c7-41 ~]# setenforce 0
[root@ c7-41 ~]# sed -i '/^SELINUX/s#enforcing#disabled#g' /etc/selinux/config
2.2.查看系统的设置
[root@ c7-41 ~]# cat /etc/redhat-release
CentOS Linux release 7.7.1908 (Core)
[root@ c7-41 ~]# uname -r
3.10.0-1062.el7.x86_64
[root@ c7-41 ~]# getenforce
Disabled
补充说明:
uname -r : 显示操作系统的发行版号。
uname -a :显示系统名、节点名称、操作系统的发行版号、内核版本等等。
getenforce:查看当前SELinux的运行模式。
2.3.查看CPU是否支持虚拟化
[root@ c7-41 ~]# egrep -o '(vmx|svm)' /proc/cpuinfo
vmx
vmx
2.4.检查cpu是否开启虚拟化
[root@ c7-41 ~]# dmesg | grep kvm
##如果什么也不出来就对了,出来kvm:disabled by blos,就是cpu没有开启虚拟化
补充说明:
Linux dmesg命令用于显示开机信息。
kernel会将开机信息存储在ring buffer中。您若是开机时来不及查看信息,可利用dmesg来查看。开机信息亦保存在/var/log目录中,名称为dmesg的文件里。
一、语法
dmesg [-cn][-s <缓冲区大小>]
2.5.安装KVM用户模块
[root@ c7-41 ~]# yum -y install qemu-kvm qemu-kvm-tools libvirt
##解释说明
##libvirt用来管理kvm
##kvm属于内核态,不需要安装。但是需要一些类似于依赖的
2.6.启动libvirt
[root@ c7-41 ~]# systemctl start libvirtd
[root@ c7-41 ~]# systemctl enable libvirtd
[root@ c7-41 ~]# systemctl status libvirtd
##启动之后我们可以使用ifconfig来查看,libvirtd已经为我们安装了一个桥接网卡
[root@ c7-41 ~]# 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:9a:0e:e3 txqueuelen 1000 (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
2.7.创建虚拟机
1.准备虚拟机硬盘 2.需要一个系统iso镜像 3.需要安装一个vnc的客户端来连接
2.8.查看磁盘空间
[root@ c7-41 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 2.0G 0 2.0G 0% /dev
tmpfs 2.0G 0 2.0G 0% /dev/shm
tmpfs 2.0G 12M 2.0G 1% /run
tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup
/dev/mapper/centos-root 27G 2.2G 25G 8% /
/dev/sda1 1014M 137M 878M 14% /boot
tmpfs 394M 0 394M 0% /run/user/0
##磁盘空间必须大于20G
2.9.上传镜像
这里我们使用dd命令,复制系统的镜像,只需要挂载上光盘就可以了
[root@ c7-41 ~]# cd /opt/
[root@ c7-41 opt]# ls
CentOS-7-x86_64-Minimal-1810.iso
[root@ c7-41 opt]# dd if=/dev/cdrom of=/opt/CentOS-7-x86_64-Minimal-1810.iso
9109504+0 records in
9109504+0 records out
4664066048 bytes (4.7 GB) copied, 227.7 s, 20.5 MB/s
##有点慢
补充说明:
dd是一个Unix和类Unix系统上的命令,主要功能为转换和复制文件。
2.10.创建磁盘
qemu-lmg软件包是我们安装qemu-kvm-tools依赖给安装上的
[root@ c7-41 opt]# qemu-img create -f qcow2 /opt/c73.qcow2 6G
[root@ c7-41 opt]# ll
total 4555144
-rw-r--r-- 1 root root 197120 May 13 14:31 c73.qcow2
-rw-r--r-- 1 root root 4664066048 May 13 14:28 CentOS-7-x86_64-Minimal-1810.iso
#解释说明
#-f制定虚拟机格式
#/opt/Centos 存放路径
# 6G代表镜像大小的
磁盘格式介绍
raw:指定多大就创建多大,直接占用指定大小的空间,用一个字来说就是裸,也就是赤裸裸,你随便dd一个file就模拟了一个raw格式的镜像。
qcow2,是openstack默认也是比较推荐的格式,将差异保存在一个文件,文件比较小而且做快照也比较小,空间是动态增长的
区别
qcow2 镜像抄格式是 QEMU 模拟器支持的一种磁盘镜像。它也是可以用一个文件的形式来表示一块固定大小的块设备磁盘。与普通的 raw 格式的镜像袭相比,有以下特性:
更小的空间占用,即使文件系统不支持空洞(holes);
支持写时拷贝(COW, copy-on-write),镜像文件只反映底层磁盘的变化zd;
支持快照(snapshot),镜像文件能够包含多个快照的历史;
可选择基于 zlib 的压缩方式
可以选择 AES 加密
3.安装虚拟机
[root@ c7-41 opt]# yum -y install virt-install
[root@ c7-41 opt]# virt-install --virt-type=kvm --name=c73 --vcpus=1 -r 1024 --cdrom=/opt/CentOS-7-x86_64-Minimal-1810.iso --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole --os-type=linux --os-variant=rhel7 --disk path=/opt/c73.qcow2,size=6,format=qcow2
##默认连接端口是从5900开始的
[root@ c7-41 opt]# virsh list --all
Id Name State
----------------------------------------------------
1 c73 running
[root@ c7-41 opt]# netstat -lntup | grep 5900
tcp 0 0 0.0.0.0:5900 0.0.0.0:* LISTEN 3032/qemu-kvm
virt-install 参数使用说明
https://blog.csdn.net/allison_ywt/article/details/51647980(借用一下,很详细)
4.VNC连接虚拟机
注意: 如果查看5900端口开启,但是vnc无法连接虚拟机时,看下防火墙是否开启,创建虚机用vnc连接是从默认端口5900开始
虚拟机安装完成之后是关闭了,我们需要启动
[root@ c7-41 opt]# virsh list --all
Id Name State
----------------------------------------------------
- c73 shut off
[root@ c7-41 opt]# virsh start c73
[root@ c7-41 opt]# virsh list --all
Id Name State
----------------------------------------------------
2 c73 running
c73是虚拟机的名字,是我们创建的时候定义的
5.常用的virsh管理命令
列出所有的虚拟机 | virsh list --all |
---|---|
显示虚拟机信息 | virsh dominfo c73 |
列出ID为6的虚拟机名 | virsh domname 6 |
显示虚拟机内存和cpu的使用情况 | apt-get install virt-top -y、virt-top |
显示虚拟机分区信息 | virt-df $hostname |
关闭虚拟机 | virsh shutdown c73 |
强制关闭虚拟机 | virsh destroy c73 |
启动虚拟机 | virsh start c73 |
设置虚拟机随系统自启 | virsh autostart c73 |
关闭虚拟机随系统自启 | virsh autostart --disable c73 |
删除虚拟机 | virsh undefine c73 |
通过控制窗口登录虚拟机 | virsh console c73 |
挂起$hostname虚拟机 | virsh suspend c73 1 |
恢复挂起的虚拟机 | virsh resume c73 |
查看网卡配置信息 | virsh domiflist c73 |
查看该虚拟机的磁盘位置 | virsh domblklist c73 |
查看KVM虚拟机当前配置 | virsh dumpxml c73 |
–config, --live, --current
--config
使用--config时,只会修改对应虚拟机的XML配置。这个配置直到虚拟机下一次启动时才会生效。注意,使用virsh reboot domain并不会让新的设置生效!
--live
当使--live时,客户机(就是虚拟机)必须是活动状态,配置会立即生效。可以看到,如果使--live时,客户机没有启动,系统会报错的。而且,这时并没有将配置写到虚拟机的XML配置中,即,在虚拟机下一次启动时,这个配置就没了。
如果hypervisor支持的话,可以同时使用--config 和 --live。
--current
使用 --current时,会根据当前客户机的状态来生效。这个说的有点隐晦,实际上就是说,当客户机处于关闭状态时,它等价--config;当客户机处于运行状态时,它等价于--live。
6.KVM桥接配置
[root@ c7-41 ~]# brctl show
bridge name bridge id STP enabled interfaces
virbr0 8000.5254009a0ee3 yes virbr0-nic
6.1.查看物理机网卡设备
[root@ c7-41 ~]# ifconfig virbr0
virbr0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.122.1 netmask 255.255.255.0 broadcast 192.168.122.255
ether 52:54:00:9a:0e:e3 txqueuelen 1000 (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
6.2配置桥接设备br0
[root@ c7-41 ~]# yum -y install bridge-utils
6.3.手动添加临时生效
[root@ c7-41 ~]# brctl addbr br0
[root@ c7-41 ~]# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.000000000000 no
virbr0 8000.5254009a0ee3 yes virbr0-nic
[root@ c7-41 ~]# brctl addif br0 ens33
#执行此步后,会导致xshell与宿主机断开连接,以下操作在宿主机完成
#删除ens33上面的IP地址,将br0上面添加上固定IP地址:
#在虚拟机上执行
[root@ c7-41 ~]# ip addr del dev ens33 10.0.0.41/24
[root@ c7-41 ~]# ifconfig br0 10.0.0.41/24 up
[root@ c7-41 ~]# route add default gw 10.0.0.254
[root@ c7-41 ~]# route -n
[root@ c7-41 ~]# ifconfig br0
[root@ c7-41 ~]# ping qq.com
连接xshell查看是否生效
此时宿主机的IP:10.0.0.41已经绑定到br0网卡;但是服务器重启后就不能生效了。
6.4.通过配置文件配置桥接设备永久生效
为kvm宿主机创建虚拟网卡,并将物理网卡作为桥设备
[root@ c7-41 ~]# cp /etc/sysconfig/network-scripts/ifcfg-ens33 .
[root@ c7-41 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
DEVICE=ens33
TYPE=Ethernet
ONBOOT=yes
BRIDGE=br0
NM_CONTROLLED=no
[root@ c7-41 ~]# vim /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE=br0
TYPE=Bridge
ONBOOT=yes
BOOTPROTO=static
IPADDR=10.0.0.41
NETMASK=255.255.255.0
GATEWAY=10.0.0.254
NM_CONTROLLED=no
[root@ c7-41 ~]# systemctl restart network.service
6.5.通过vnc连接kvm虚机修改网卡配置
[root@ c7-41 ~]# virsh list --all
Id Name State
----------------------------------------------------
2 c73 running
[root@ c7-41 ~]# systemctl stop firewalld
#编辑kvm虚出来的机器(也就是kvm)
[root@ c7-41 ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
NAME=eth0
ONBOOT=yes
IPADDR=10.0.0.100
PREFIX=24
GATEWAY=10.0.0.254
DNS1=223.5.5.5
DNS2=1.1.1.1
[root@ c7-41 ~]# vi /etc/resolv.conf
nameserver 223.5.5.5
[root@ c7-41 ~]# ifup eth0
7.KVM图形管理工具
7.1.查看sshd是否开启X11转发
[root@ c7-41 ~]# grep X11Forwarding /etc/ssh/sshd_config --colour
X11Forwarding yes
# X11Forwarding no
7.2.安装xorg-x11
[root@ c7-41 ~]# yum install -y xorg-x11-font-utils.x86_64 xorg-x11-server-utils.x86_64 xorg-x11-utils.x86_64 xorg-x11-xauth.x86_64 xorg-x11-xinit.x86_64 xorg-x11-drv-ati-firmware
7.3.安装libvirt
[root@ c7-41 ~]# yum install virt-manager libvirt libvirt-Python python-virtinst libvirt-client virt-viewer qemu-kvm mesa-libglapi -y
#因为我的主机是服务器,没有图形化界面,想要用virt-manager图形化安装虚拟机,还需要安装x-window
[root@ c7-41 ~]# yum install libXdmcp libXmu libxkbfile xkeyboard-config xorg-x11-xauth xorg-x11-xkb-utils -y
[root@ c7-41 ~]# systemctl restart libvirtd.service
[root@ c7-41 ~]# systemctl enable libvirtd.service
7.4.配置xshell
安装好Xming后,打开xshell,在连接属性的tunneing中,勾选Forwarding X11 connection to 选项,可以正常打开virt-manager的图形界面
7.5.启动virt-manager
断开xshell会话,重新连接,输入命令:virt-manager;就可以自动弹出kvm管理软件(注意这时候首先要开启Xming)
[root@ c7-41 ~]# virt-manager
出现乱码,安装以下包
[root@ c7-41 ~]# yum -y install dejavn-sans-mono-fonts
8.下面测试
如果ping不通外网,启动一下网卡,看看行不行,记得看一下你网卡的配置文件是否正确(桥接模式是否正确)
8.1.下面是VNC测试的(连接的时候,必须要把Xming关掉,才可以连接这个VNC)
8.2.kvm宿主机配置
[root@ c7-42 ~]# yum -y install qemu-kvm qemu-kvm-tools libvirt
[root@ c7-42 ~]# systemctl start libvirtd
[root@ c7-42 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
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: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:a7:55:3d brd ff:ff:ff:ff:ff:ff
inet 10.0.0.42/24 brd 10.0.0.255 scope global ens33
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fea7:553d/64 scope link
valid_lft forever preferred_lft forever
3: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:a7:55:47 brd ff:ff:ff:ff:ff:ff
inet 172.16.1.42/16 brd 172.16.255.255 scope global ens37
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fea7:5547/64 scope link
valid_lft forever preferred_lft forever
4: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
link/ether 52:54:00:b8:c5:25 brd ff:ff:ff:ff:ff:ff
inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
valid_lft forever preferred_lft forever
5: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN groupdefault qlen 1000
link/ether 52:54:00:b8:c5:25 brd ff:ff:ff:ff:ff:ff
[root@ c7-42 ~]# brctl show
bridge name bridge id STP enabled interfaces
virbr0 8000.525400b8c525 yes virbr0-nic
[root@ c7-42 ~]# virsh iface-bridge ens33 br0
Created bridge br0 with attached device ens33
Bridge interface br0 started
[root@ c7-42 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
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: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UP group default qlen 1000
link/ether 00:0c:29:a7:55:3d brd ff:ff:ff:ff:ff:ff
3: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:a7:55:47 brd ff:ff:ff:ff:ff:ff
inet 172.16.1.42/16 brd 172.16.255.255 scope global ens37
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fea7:5547/64 scope link
valid_lft forever preferred_lft forever
4: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
link/ether 52:54:00:b8:c5:25 brd ff:ff:ff:ff:ff:ff
inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
valid_lft forever preferred_lft forever
5: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN groupdefault qlen 1000
link/ether 52:54:00:b8:c5:25 brd ff:ff:ff:ff:ff:ff
6: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 00:0c:29:a7:55:3d brd ff:ff:ff:ff:ff:ff
inet 10.0.0.42/24 brd 10.0.0.255 scope global br0
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fea7:553d/64 scope link
valid_lft forever preferred_lft forever
[root@ c7-42 ~]# ping qq.com
PING qq.com (125.39.52.26) 56(84) bytes of data.
^C64 bytes from 125.39.52.26: icmp_seq=2 ttl=128 time=25.1 ms
--- qq.com ping statistics ---
2 packets transmitted, 1 received, 50% packet loss, time 1000ms
rtt min/avg/max/mdev = 25.182/25.182/25.182/0.000 ms
[root@ c7-42 ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33
DEVICE=ens33
ONBOOT=yes
BRIDGE="br0"
[root@ c7-42 ~]# cat /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE="br0"
ONBOOT="yes"
TYPE="Bridge"
BOOTPROTO="none"
IPADDR="10.0.0.42"
NETMASK="255.255.255.0"
GATEWAY="10.0.0.254"
STP="on"
DELAY="0"