Ubuntu 18.04 LTS安装KVM虚拟机

1 KVM安装

1.1 配置确认

首先需要确认服务器的硬件是否支持虚拟化,执行如下命令:

egrep -c '(vmx|svm)' /proc/cpuinfo

如果输出结果大于0,意味着服务器硬件是支持虚拟化的。否则,重启进入BIOS设置中启用VT技术。

1.2 安装KVM

安装KVM及依赖项:

sudo apt update
sudo apt install qemu qemu-kvm libvirt-bin bridge-utils virt-manager

启动libvirtd服务,并设置开机自动启动:

sudo systemctl start libvirtd.service
sudo systemctl enable libvirtd.service

执行service libvirtd status查看libvirtd服务状态,如图:
在这里插入图片描述

1.3 网络配置

KVM安装完成后,首先需要进行网络配置,KVM支持四种网络模式:

  • 桥接模式
  • NAT模式
  • 用户网络模式
  • 直接分配设备模式

主要讲一下前两种:

  1. 桥接(Bridge)模式
    Bridge模式下,虚拟机需要配置自己的IP,然后虚拟出一个网卡,与宿主机的网卡一起挂到一个虚拟网桥上(类似于交换机)来访问外部网络。这种模式下,虚拟机拥有独立的IP,局域网其它主机能直接通过IP与其通信。简单理解,就是桥接模式下,虚机跟宿主机一样平等地存在,虚拟机和宿主机有平级的IP。 在这里插入图片描述
    原本宿主机是通过网卡eth0连接外部网络的,网桥模式会新创建一个网桥br0,接管eth0来连接外部网络,然后将宿主机和虚拟机的网卡eth0都绑定到网桥上。
  2. NAT(Network Address Translation)模式
    NAT模式是KVM默认的网络模式,KVM会创建一个名为virbr0的虚拟网桥,但是宿主机和虚拟机对于网桥来说不是平等的了,网桥会把虚拟机藏在背后,虚拟机会被分配一个内网IP,而从外网访问不到虚拟机。
    在这里插入图片描述

一般我们创建虚机是用来部署服务供使用的,所以都是用Bridge模式。

Ubuntu 18.04中,网络配置通过netplan来实现了,需要修改配置文件/etc/netplan/50-cloud-init.yaml

network:
    ethernets:
        enp6s0:
            dhcp4: true
        enp7s0:
            dhcp4: no
            dhcp6: no
    version: 2

    bridges:
         br0:
            interfaces: [enp7s0]
            dhcp4: no
            addresses: [192.168.40.241/24]
            gateway4: 192.168.40.1
            nameservers:
                addresses: [114.114.114.114,8.8.8.8]

或者(另一种格式)

network:
    ethernets:
        eno1:
            addresses:
                - 10.10.6.50/24
            dhcp4: false
            gateway4: 10.10.6.1
            nameservers:
                addresses:
                    - 8.8.8.8
                    - 8.8.4.4
                search: []
        enp3s2:
            dhcp4: false
    bridges:
        br0:
            dhcp4: false
            interfaces:
                - enp3s2
            addresses:
                - 10.10.7.50/24
    version: 2

将宿主机原有网卡enp7s0挂到网桥br0上,并指定网桥br0的IP地址为192.168.40.241,nameservers指定DNS服务器。修改完后,通过sudo netplan apply重启网络服务生效,然后通过ifconfig查看。
在这里插入图片描述
原来挂在enp7s0网卡下的IP现在挂到了br0上,宿主机及所有其它虚拟机都通过该网桥来与外部通讯。我们也可以通过brctl show来直观地查看。

devuser@server_01:~$ brctl show
bridge name        bridge id        STP enabled        interfaces
br0            8000.2a5be3ec2698    no                enp7s0
docker0        8000.02424524dcce    no                veth580af8e
                                                      veth74119f3
                                                      vethe7a2b0f
                                                      vethfe89039

目前因为还没虚拟机,所以只有宿主机的网卡enp7s0挂在网桥br0上。

2 虚拟机安装

2.1 安装虚拟机

安装命令(安装前检查宿主机是否开启了嵌套虚拟化功能,参见2.5.1)

sudo virt-install --name=dev-server1 --description="dev-server1" \      # 指定虚拟机名称,后面可通过virsh管理
--memory=8192,maxmemory=8192 \                                          # 配置了8G内存
--vcpus=4,maxvcpus=4 --hvm --cpu=host \                                 # 配置了4个CPU内核,虚拟机全虚拟化,CPU model为host(可提供嵌套虚拟化)
--os-type=linux --os-variant=ubuntu18.04 \
--disk path=/var/lib/libvirt/images/devserver1.img,bus=virtio,size=60 \ # 磁盘位置、大小60G、类型为virtio(默认是IDE),提高性能
--network bridge:br0 \                                                  # 网络选择了桥接模式
--graphics=vnc,listen=0.0.0.0,keymap=en-us --noautoconsole \            # VNC监听端口,注意要选择en-us作为key-map,否则键位布局可能会乱
--cdrom=/home/ubuntu-18.04.4-live-server-amd64.iso                      # 安装ISO路径

此时安装过程已经在后台执行,我们需要使用VNC连接上去进行配置。

首先,需要获取虚拟机的VNC管理端口号:

virsh dumpxml <domain> | grep vnc

知道了VNC端口号,我们就可以在自己电脑上通过VNC客户端(比如:Tiger VNC)连接上去,继续虚拟机中Linux的安装流程了。

安装完成后,我们再通过brctl show来查看网桥挂载情况,br0下面已经多了一个vnet0虚拟网卡了。

devuser@server_01:~$ brctl show
bridge name        bridge id        STP enabled        interfaces
br0            8000.2a5be3ec2698    no                enp7s0
                                                      vnet0
docker0        8000.02424524dcce    no                veth580af8e
                                                      veth74119f3
                                                      vethe7a2b0f
                                                      vethfe89039

2.2 开启虚拟机的virsh console登录

systemctl disable systemd-networkd-wait-online
systemctl enable serial-getty@ttyS0.service
systemctl start serial-getty@ttyS0.service

开启后,可通过宿主机的console的方式直接登录虚拟机。
在这里插入图片描述

2.3 虚拟机添加网卡

  1. 查看网卡
    virsh domiflist cdh-test
    
    在这里插入图片描述
  2. 添加网卡(需要虚拟机在开机状态下操作)
    virsh attach-interface cdh-test --type bridge --source br0 --model virtio    # 指定网络类型为virtio,提高虚拟机性能
    
    在这里插入图片描述
  3. 加载到配置文件
    virsh attach-interface cdh-test --type bridge --source br0 --model virtio --config
    
    命令行增加的网卡只保存在内存中,重启就失效,所以需要保存到配置文件中。
    virsh dumpxml cdh-test >/etc/libvirt/qemu/snale.xml
    virsh define /etc/libvirt/qemu/snale.xml
    
  4. 删除网卡(这步不用操作,网卡不想用了再删除)
    virsh detach-interface cdh-test --type bridge --mac 52:54:00:f6:d1:cd --config
    
  5. 其他网卡命令
    关闭或打开某个网口
    virsh domif-setlink domain vnet0 down
    virsh domif-setlink domain vnet0 up
    
    获取某个网口状态
    virsh domif-getlink domain vnet1
    

2.4 克隆虚拟机

虚拟机必须在关闭的状态下克隆,如果不关闭虚拟机直接克隆会报错,例如:ERROR Domain with devices to clone must be paused or shutoff.

克隆虚拟机,新虚拟机名称为dev-server2。

virt-clone --original dev-server1 --name dev-server2 --file /var/lib/libvirt/images/dev-server2.img
# --original  后面跟要克隆的虚拟机名字
# --name      克隆后虚拟机的名字
# --file      指定存放的路径

克隆完成后,dev-server2中的网卡MAC地址是重新生成的,但是IP地址和dev-server1是一样的。可以使用console方式登录dev-server2来修改IP地址。

2.5 让虚拟机支持虚拟化(创建虚机时未指定CPU model)

2.5.1 检查宿主机是否开启了嵌套虚拟化功能

基于 Intel 的处理器运行以下命令:

[root@kvm-hypervisor ~]# cat /sys/module/kvm_intel/parameters/nested
Y

基于 AMD 的处理器运行以下命令:

[root@kvm-hypervisor ~]# cat /sys/module/kvm_amd/parameters/nested
Y
2.5.2 让虚拟机支持虚拟化

如果你使用libvirt管理虚拟机,需要修改虚拟机xml文件中CPU的定义,下面三种定义都可以。

#可以使用这种
  <cpu mode='custom' match='exact'>
    <model fallback='allow'>core2duo</model>
    <feature policy='require' name='vmx'/>
  </cpu>
#这种方式为虚拟机定义需要模拟的CPU类型"core2duo",并且为虚拟机添加"vmx"特性

#也可以使用这种
  <cpu mode='host-model'>
    <model fallback='allow'/>
  </cpu>

#或者这样
 <cpu mode='host-passthrough'>
    <topology sockets='2' cores='2' threads='2'/>
  </cpu>
#CPU穿透,在虚拟机中看到的vcpu将会与物理机的CPU同样配置,这种方式缺点在于如果要对虚拟机迁移,迁移的目的服务器硬件配置必须与当前物理机一样

如果你使用qemu-kvm命令行启动虚拟机,那么可以简单的添加

-enable-kvm -cpu qemu64,+vmx
#设置虚拟机CPU为qemu64型号,添加vmx支持

虚拟机xml文件后,需要重启宿主机,或者更新虚拟机配置后再启动虚拟机:

virsh define /etc/libvirt/qemu/dev-server1.xml

启动并进入虚拟机,查看CPU特性,可以看到此时虚拟机的CPU已经支持vmx特性:
在这里插入图片描述

3. 虚拟机管理

  1. 列出当前运行的虚拟机virsh list
    devuser@server_01:~$ virsh list
    Id    Name                           State
    ----------------------------------------------------
    5     dev-server1                    running
    
    如果列出所有的,则使用virsh list --all
  2. 从宿主机进入虚拟机virsh console,后面接虚拟机ID或名称
    devuser@server_01:~$ virsh console 5
    Connected to domain dev-server1
    Escape character is ^]
    
    CentOS Linux 7 (Core)
    Kernel 3.10.0-957.el7.x86_64 on an x86_64
    
    dev-server1 login:
    
    输入用户名,密码即可登录虚拟机,按Ctrl+]可退出。
  3. 启动与关闭虚拟机virsh start|shutdown
    devuser@cserver_01:~$ virsh start dev-server1
    Domain dev-server1 started
    
    devuser@server_01:~$ virsh shutdown 5
    Domain 5 is being shutdown
    
  4. libvirtd启动时,自动启动虚拟机
    devuser@server_01:~$ virsh autostart dev-server1
    Domain dev-server1 marked as autostarted
    
  5. 挂起/恢复虚拟机
    devuser@server_01:~$ virsh suspend dev-server1    # 挂起虚拟机
    devuser@server_01:~$ virsh resume dev-server1     # 恢复挂起的虚拟机
    
  6. 销毁虚拟机
    devuser@server_01:~$ virsh undefine dev-server1   # 彻底销毁虚拟机,会删除虚拟机配置文件,但不会删除虚拟磁盘
    

4. 参考资料

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值