dengyouf

导航

基于Ubuntu 24.04 安装 KVM虚拟机

系统要求

  • CPU 虚拟化扩展是否可用
➜  ~ sudo egrep -c '(vmx|svm)' /proc/cpuinfo
32
  • KVM 内核模块是否已加载
➜  ~ modprobe kvm_intel nested=1
➜  ~ echo  "options kvm_intel nested=1"|sudo tee -a /etc/modprobe.d/kvm.conf
➜  ~ lsmod | grep kvm
kvm_intel             487424  0
kvm                  1404928  1 kvm_intel
irqbypass              12288  1 kvm
  • 使用KVM加速
➜  ~ sudo apt install cpu-checker
➜  ~ sudo kvm-ok
INFO: /dev/kvm exists
KVM acceleration can be used

安装KVM

  • 安装软件包
➜  ~ sudo apt -y install qemu-kvm libvirt-daemon-system libvirt-daemon virtinst bridge-utils libosinfo-bin
  • 授权用户
➜  ~ sudo adduser dengyouf libvirt
➜  ~ sudo adduser dengyouf kvm
  • 验证安装
➜  ~ sudo virsh  list --all
 Id   Name          State
------------------------------
➜  ~ sudo systemctl enable --now libvirtd
  • 创建网桥
➜  ~ sudo cat /etc/netplan/01-netcfg.yaml
network:
  version: 2
  ethernets:
    enp1s0:
      dhcp4: false
      # disable existing configuration for ethernet
      #addresses: [192.168.1.30/24]
      #routes:
      #  - to: default
      #    via: 192.168.1.1
      #    metric: 100
      #nameservers:
      #  addresses: [192.168.1.10]
      #  search: [linux.io]
      dhcp6: false
  # add configuration for bridge interface
  # [macaddress] ⇒ specify HW address of enp1s0
  bridges:
    br0:
      interfaces: [enp1s0]
      dhcp4: false
      addresses: [192.168.1.228/24]
      routes:
        - to: default
          via: 192.168.1.1
          metric: 100
      nameservers:
        addresses: [192.168.1.1, 8.8.8.8, 223.5.5.5]
        search: [linux.io]
      parameters:
        stp: false
      dhcp6: true

➜  ~ sudo netplan apply

➜  ~ ip add show
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 noprefixroute
       valid_lft forever preferred_lft forever
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master br0 state UP group default qlen 1000
    link/ether 00:e0:4c:68:03:d2 brd ff:ff:ff:ff:ff:ff
3: enp3s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN group default qlen 1000
    link/ether 00:e0:4c:68:03:d3 brd ff:ff:ff:ff:ff:ff
4: wlp4s0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 04:11:19:c7:d2:ba brd ff:ff:ff:ff:ff:ff
5: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether d2:75:ab:8a:d1:8f brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.228/24 brd 192.168.1.255 scope global noprefixroute br0
       valid_lft forever preferred_lft forever
    inet6 2408:8207:78d0:690:d075:abff:fe8a:d18f/64 scope global dynamic noprefixroute
       valid_lft 85169sec preferred_lft 2369sec
    inet6 fe80::d075:abff:fe8a:d18f/64 scope link noprefixroute
       valid_lft forever preferred_lft forever
6: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    link/ether 52:54:00:bf:da:b9 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

创建虚拟机

➜  ~ sudo virt-install \
--name ubuntu2204 \
--ram 4096 \
--disk path=/var/lib/libvirt/images/ubuntu2204.img,size=80 \
--vcpus 2 \
--os-variant ubuntu22.04 \
--network bridge=br0 \
--graphics none \
--console pty,target_type=serial \
--location /home/dengyouf/ubuntu-22.04.5-live-server-amd64.iso,kernel=casper/vmlinuz,initrd=casper/initrd \
--extra-args 'console=ttyS0,115200n8' 

...
================================================================================
  Serial                                                              [ Help ]
================================================================================

  As the installer is running on a serial console, it has started in basic
  mode, using only the ASCII character set and black and white colours.

  If you are connecting from a terminal emulator such as gnome-terminal that
  supports unicode and rich colours you can switch to "rich mode" which uses
  unicode, colours and supports many languages.

  You can also connect to the installer over the network via SSH, which will
  allow use of rich mode.


                          [ Continue in rich mode  > ]
                          [ Continue in basic mode > ]
                          [ View SSH instructions    ]
# 选择 [Continue in basic mode] 即开始安装,安装完成后,重启机器,开始登陆
...
Ubuntu 22.04.5 LTS mylab ttyS0

mylab login: dengyouf
Password:
~$ ip add l
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: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 52:54:00:15:25:e4 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.102/24 metric 100 brd 192.168.1.255 scope global dynamic enp1s0
       valid_lft 7026sec preferred_lft 7026sec
    inet6 2408:8207:78d0:690:5054:ff:fe15:25e4/64 scope global dynamic mngtmpaddr noprefixroute
       valid_lft 85066sec preferred_lft 2266sec
    inet6 fe80::5054:ff:fe15:25e4/64 scope link
       valid_lft forever preferred_lft forever
dengyouf@mylab:~$ lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
loop0    7:0    0 38.8M  1 loop /snap/snapd/21759
loop1    7:1    0   87M  1 loop /snap/lxd/29351
loop2    7:2    0 63.9M  1 loop /snap/core20/2318
sr0     11:0    1 1024M  0 rom
vda    252:0    0   80G  0 disk
├─vda1 252:1    0    1M  0 part
├─vda2 252:2    0    2G  0 part /boot
├─vda3 252:3    0    4G  0 part [SWAP]
└─vda4 252:4    0   74G  0 part /
dengyouf@mylab:~$ df -h
Filesystem      Size  Used Avail Use% Mounted on
tmpfs           392M  1.1M  391M   1% /run
/dev/vda4        73G  3.0G   66G   5% /
tmpfs           2.0G     0  2.0G   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
/dev/vda2       2.0G  125M  1.7G   7% /boot
tmpfs           392M  4.0K  392M   1% /run/user/1000
dengyouf@mylab:~$
# 切换终端 Ctrl +]
➜  ~ sudo virsh console ubuntu2404 # 连接虚拟机
Connected to domain 'ubuntu2404'
Escape character is ^] (Ctrl + ])

dengyouf@mylab:~$

克隆虚拟机

➜  ~ sudo virsh list --all
 Id   Name          State
------------------------------
 -    ubuntu22.04   shut off

➜  virt-clone --auto-clone -o ubuntu20.04 -n kubeadm-master01
➜  sudo virt-sysprep  --operations defaults,machine-id,-ssh-userdir,-lvm-uuids --hostname kubeadm-master01 --run-command "sed -i 's@192.168.1.254@192.168.1.81@g' /etc/netplan/00-installer-config.yaml && dpkg-reconfigure openssh-server" -d kubeadm-master01

虚拟机管理命令

  • 启动虚拟机
➜  ~ sudo virsh start ubuntu2404
  • 停止虚拟机
➜  ~ sudo virsh shutdown ubuntu2404
➜  ~ sudo virsh destroy  ubuntu22.04
  • 启动并连接虚拟机
➜  ~ sudo virsh start ubuntu2404 --console

虚拟化嵌套

  • 宿主机支持嵌套
➜  ~ cat /sys/module/kvm_intel/parameters/nested
Y
  • 修改 CPU 的模式
➜  ~ sudo  virsh edit ubuntu2404
...
<cpu mode='host-passthrough' check='none' migratable='on'/>

posted on 2025-02-19 11:09  dengyouf  阅读(1212)  评论(0)    收藏  举报