Linux虚拟化————KVM

发布于:2024-04-23 ⋅ 阅读:(15) ⋅ 点赞:(0)

1、安装kvm虚拟化套件

[root@bogon ~]# yum -y install virt*

2、启动服务

[root@bogon ~]# systemctl start libvirtd
[root@bogon ~]# systemctl status libvirtd
● libvirtd.service - Virtualization daemon
     Loaded: loaded (/usr/lib/systemd/system/libvirtd.service; disabled; preset: disabled)
     Active: active (running) since Fri 2024-03-15 18:27:06 CST; 1s ago
......

libvirtd:可以管理虚拟化

3、命令行删除默认的Linux bridge

查看虚拟网桥,这个网桥是在安装虚拟化软件之后会自动创建出来的

[root@bogon ~]# ip a show virbr0 
3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    link/ether 52:54:00:2d:af:d0 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

安装管理libvirt-client,可以使用这个来管理提供的网桥

[root@bogon ~]# yum -y install libvirt-client
[root@bogon ~]# virsh net-list --all
 Name      State    Autostart   Persistent
--------------------------------------------
 default   active   yes         yess

清理网桥

[root@bogon ~]# virsh net-undefine default 
Network default has been undefined

[root@bogon ~]# virsh net-list --all
 Name      State    Autostart   Persistent
--------------------------------------------
 default   active   no          no

4、通过nmcli创建Linux bridge

[root@bogon ~]# nmcli connection add con-name vm-bridge ifname vm-bridge type bridge ipv4.method disabled ipv6.method ignore 

5、关闭selinux和防火墙

[root@bogon ~]# sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config 
[root@bogon ~]# setenforce 0
[root@bogon ~]# systemctl disable firewalld.service --now

6、使用cloud镜像

KVM虚拟化创建的虚拟机,虚拟磁盘的后缀名叫做qcow2,当你通过图形创建了一个虚拟机之后,将会生成一个qcow2的虚拟机磁盘文件,里面就有你安装的操作系统,但是作为一个运维人员不可能每次都装系统,一般多多少少都会偷点懒,所以就出现了一个叫做模板化部署虚拟机的方法

无论是ubuntu还是centos还是fedora还是debian这类主流的linux发行版本,官方都会给你qcow2的模板

AlmaLinux:Generic Cloud (Cloud-init) | AlmaLinux Wiki

centos-steam:CentOS Cloud images

rocky:Cloud Images | Rocky Linux

7、下载cloud镜像

[root@bogon ~]# wget https://repo.almalinux.org/almalinux/9/cloud/x86_64/images/AlmaLinux-9-GenericCloud-9.3-20231113.x86_64.qcow2

8、创建虚拟机

通过cloud image使用命令行创建虚拟机

下载virt-install

[root@bogon ~]# yum -y install virt-install
[root@bogon ~]# mkdir /opt/image_qcow2 -p
[root@bogon ~]# mv AlmaLinux-9-GenericCloud-9.3-20231113.x86_64.qcow2 /opt/image_qcow2/

创建虚拟机

[root@bogon ~]# virt-install --name AlmaLinux-1 --memory 1024 --vcpus 1 --import --os-variant almalinux9 --disk path=/opt/image_qcow2/AlmaLinux-9-GenericCloud-9.3-20231113.x86_64.qcow2,bus=virtio --network bridge=vm-bridge,model=virtio --noautoconsole
WARNING  KVM acceleration not available, using 'qemu'
WARNING  Requested memory 1024 MiB is less than the recommended 1536 MiB for OS almalinux9

Starting install...
Creating domain...                                                                    |         00:00:00     
Domain creation completed.
[root@bogon ~]# virsh list
 Id   Name          State
-----------------------------
 1    AlmaLinux-1   running
  • --memory:虚拟机内存

  • --vcpus:虚拟机cpu

  • --import:将现有虚拟机导入

  • --os-variant:虚拟机类型

  • --disk:磁盘路径

  • bus=virtio:设置驱动磁盘类型可以识别成为vda,vdb等,如果不加,就会识别成sda,sdb

  • --network:设置网卡

  • model=virtio:设置网卡驱动,使用virtio

  • --noautoconsole:设置命令行启动

进入控制台

[root@bogon ~]# virsh console AlmaLinux-1
Connected to domain 'AlmaLinux-1'
Escape character is ^] (Ctrl + ])

Ctrl + ]可以退出控制台

已经创建了虚拟机,我们也能访问到虚拟机的控制台,但是我们进不去,我们只能在外面蹭蹭,所以呢,究极难受,因为我们不知道root用户的密码

9、删除虚拟机

virsh destroy [name]:关机

virsh undefine [name]:删除

[root@bogon ~]# virsh list
 Id   Name          State
-----------------------------
 1    AlmaLinux-1   running
[root@bogon ~]# virsh destroy AlmaLinux-1
Domain 'AlmaLinux-1' destroyed
[root@bogon ~]#  virsh undefine AlmaLinux-1
Domain 'AlmaLinux-1' has been undefined
[root@bogon ~]# virsh list
 Id   Name   State
--------------------

10、自定义cloud image

qcow2文件是可以修改的,但是需要工具,这个工具的名字叫做libguestfs

下载libguestfs

[root@bogon ~]# yum -y install libguestfs libguestfs-tools-c

修改qcow2密码

[root@bogon ~]# virt-customize -a /opt/image_qcow2/AlmaLinux-9-GenericCloud-9.3-20231113.x86_64.qcow2 --root-password password:000000  --selinux-relabel
[   0.0] Examining the guest ...
[  55.5] Setting a random seed
[  55.6] Setting the machine ID in /etc/machine-id
[  55.6] Setting passwords
[  70.1] SELinux relabelling
[ 183.0] Finishing off

拉起虚拟机

[root@bogon ~]# virt-install --name AlmaLinux-1 --memory 1024 --vcpus 1 --import --os-variant almalinux9 --disk path=/opt/image_qcow2/AlmaLinux-9-GenericCloud-9.3-20231113.x86_64.qcow2,bus=virtio --network bridge=vm-bridge,model=virtio --noautoconsole
WARNING  KVM acceleration not available, using 'qemu'
WARNING  Requested memory 1024 MiB is less than the recommended 1536 MiB for OS almalinux9

Starting install...
Creating domain...                                                                    |         00:00:00     
Domain creation completed.

进入虚拟机

...
localhost login: root
Password: 
[root@localhost ~]#

11、配置网络

配置虚拟机AlmaLinux-1的网络

[root@localhost ~]# nmcli con add con-name static-eth0 type ethernet ipv4.address 172.24.10.20/24 ipv4.method man
[root@localhost ~]# ip a show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 52:54:00:78:34:cc brd ff:ff:ff:ff:ff:ff
    altname enp1s0
    inet 172.24.10.20/24 brd 172.24.10.255 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::4613:29fd:e79:e20a/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

配置host的网络

[root@bogon ~]# nmcli connection modify vm-bridge ipv4.address 172.24.10.3/24 ipv4.method manual 
[root@bogon ~]# nmcli connection up vm-bridge 
Connection successfully activated (master waiting for slaves) (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/6)
[root@bogon ~]# ip a show vm-bridge 
3: vm-bridge: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff
    inet 172.24.10.3/24 brd 172.24.10.255 scope global noprefixroute vm-bridge
       valid_lft forever preferred_lft forever

由于网桥是十分脆弱的,当改了网桥之后,就需要重新桥接上去

简单的方式,重启

[root@bogon ~]# virsh destroy AlmaLinux-1
[root@bogon ~]# virsh start AlmaLinux-1

12、重新拉起虚拟机,配置额外的磁盘空间

创建lv

[root@bogon ~]# pvcreate /dev/sda 
  Physical volume "/dev/sda" successfully created.
[root@bogon ~]# vgcreate data /dev/sda 
  Volume group "data" successfully created
[root@bogon ~]# lvcreate -n data -L 9G data
  Logical volume "data" created.

重新拉起虚拟机

[root@bogon ~]# virsh destroy AlmaLinux-1
Domain 'AlmaLinux-1' destroyed
[root@bogon ~]# virsh undefine AlmaLinux-1 
Domain 'AlmaLinux-1' has been undefined
[root@bogon ~]# virt-install --name AlmaLinux-1 --memory 1024 --vcpus 1 --import --os-variant almalinux9 --disk path=/opt/image_qcow2/AlmaLinux-9-GenericCloud-9.3-20231113.x86_64.qcow2,bus=virtio --disk path=/dev/data/data,bus=virtio --disk path=/dev/sdb,bus=virtio  --network bridge=vm-bridge,model=virtio --noautoconsole
data
[root@bogon ~]# virt-install --name AlmaLinux-1 --memory 1024 --vcpus 1 --import --os-variant almalinux9 --disk path=/opt/image_qcow2/AlmaLinux-9-GenericCloud-9.3-20231113.x86_64.qcow2,bus=virtio --disk path=/dev/data/data,bus=virtio --disk path=/dev/sdb,bus=virtio  --network bridge=vm-bridge,model=virtio --noautoconsole
data
[root@bogon ~]# virt-install --name AlmaLinux-1 --memory 1024 --vcpus 1 --import --os-variant almalinux9 --disk path=/opt/image_qcow2/AlmaLinux-9-GenericCloud-9.3-20231113.x86_64.qcow2,bus=virtio --disk path=/dev/data/data,bus=virtio --disk path=/dev/sdb,bus=virtio  --network bridge=vm-bridge,model=virtio --noautoconsole
WARNING  Requested memory 1024 MiB is less than the recommended 1536 MiB for OS almalinux9

Starting install...
Creating domain...                                                                    |         00:00:00     
Domain creation completed.

13、将cloud镜像文件的根分区扩大

因为根分区是标准的分区,所以没办法使用逻辑卷的方法进行扩容,所以我们要用到一个工具叫做virtresize

删除虚拟机

[root@bogon ~]# virsh destroy AlmaLinux-1 
Domain 'AlmaLinux-1' destroyed

[root@bogon ~]#  virsh undefine AlmaLinux-1
Domain 'AlmaLinux-1' has been undefined

查看qcow2的磁盘情况

[root@bogon ~]# virt-filesystems --long -h --all -a /opt/image_qcow2/AlmaLinux-9-GenericCloud-9.3-20231113.x86_64.qcow2 
Name       Type        VFS      Label  MBR  Size  Parent
/dev/sda1  filesystem  unknown  -      -    1.0M  -
/dev/sda2  filesystem  vfat     -      -    200M  -
/dev/sda3  filesystem  xfs      -      -    448M  -
/dev/sda4  filesystem  xfs      -      -    9.2G  -
/dev/sda1  partition   -        -      -    1.0M  /dev/sda
/dev/sda2  partition   -        -      -    200M  /dev/sda
/dev/sda3  partition   -        -      -    512M  /dev/sda
/dev/sda4  partition   -        -      -    9.3G  /dev/sda
/dev/sda   device      -        -      -    10G   -

创建一个19G的qcow2文件,用来“夺舍”

[root@bogon ~]# qemu-img create -f qcow2 /opt/os_qcow2/os.qocow2 19G
Formatting '/opt/os_qcow2/os.qocow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=20401094656 lazy_refcounts=off refcount_bits=16

查看创建的这个qcow2文件

[root@bogon ~]# qemu-img info /opt/os_qcow2/os.qcow2 
image: /opt/os_qcow2/os.qcow2
file format: qcow2
virtual size: 19 GiB (20401094656 bytes)
disk size: 196 KiB
cluster_size: 65536
Format specific information:
    compat: 1.1
    compression type: zlib
    lazy refcounts: false
    refcount bits: 16
    corrupt: false
    extended l2: false
Child node '/file':
    filename: /opt/os_qcow2/os.qcow2
    protocol type: file
    file length: 192 KiB (197120 bytes)
    disk size: 196 KiB
    Format specific information:
        extent size hint: 1048576

使用新创建的9G的qcow2文件来替换原来的qcow2文件,这里的磁盘是指qcow2里的磁盘

[root@bogon ~]# virt-resize --expand /dev/sda1 /opt/image_qcow2/AlmaLinux-9-GenericCloud-9.3-20231113.x86_64.qcow2  /opt/os_qcow2/os.qcow2 
[   0.0] Examining /opt/image_qcow2/AlmaLinux-9-GenericCloud-9.3-20231113.x86_64.qcow2
 100% ⟦▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒⟧ 00:00
**********

Summary of changes:

virt-resize: /dev/sda1: This partition will be resized from 1.0M to 9.0G.

virt-resize: /dev/sda2: This partition will be left alone.

virt-resize: /dev/sda3: This partition will be left alone.

virt-resize: /dev/sda4: This partition will be left alone.

**********
[  21.2] Setting up initial partition table on /opt/os_qcow2/os.qcow2
[  35.6] Copying /dev/sda1
[  35.6] Copying /dev/sda2
[  36.8] Copying /dev/sda3
 100% ⟦▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒⟧ 00:00
[  40.7] Copying /dev/sda4
 100% ⟦▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒⟧ 00:00

virt-resize: Resize operation completed with no errors.  Before deleting 
the old disk, carefully check that the resized disk boots and works 
correctly.

查看新的文件,可以看到虚拟磁盘变大了

[root@bogon ~]# virt-filesystems --long -h --all -a /opt/os_qcow2/os.qcow2 
Name       Type        VFS      Label  MBR  Size  Parent
/dev/sda1  filesystem  unknown  -      -    9.0G  -
/dev/sda2  filesystem  vfat     -      -    200M  -
/dev/sda3  filesystem  xfs      -      -    448M  -
/dev/sda4  filesystem  xfs      -      -    9.2G  -
/dev/sda1  partition   -        -      -    9.0G  /dev/sda
/dev/sda2  partition   -        -      -    200M  /dev/sda
/dev/sda3  partition   -        -      -    512M  /dev/sda
/dev/sda4  partition   -        -      -    9.3G  /dev/sda
/dev/sda   device      -        -      -    19G   -

使用新的qcow2拉起虚拟机

[root@bogon ~]# virt-install --name AlmaLinux-1 --memory 1024 --vcpus 1 --import --os-variant almalinux9 --disk path=/opt/os_qcow2/os.qcow2,bus=virtio --disk path=/dev/data/kvm,bus=virtio   --network bridge=vm-bridge,model=virtio --noautoconsole
WARNING  Requested memory 1024 MiB is less than the recommended 1536 MiB for OS almalinux9

Starting install...
Creating domain...                                                                    |         00:00:00     
Domain creation completed.

14、XML文件

[root@bogon ~]# ll /etc/libvirt/qemu/AlmaLinux-1.xml 
-rw------- 1 root root 7110 Apr 11 08:26 /etc/libvirt/qemu/AlmaLinux-1.xml

如果virsh destory之后再virsh undefine虚拟机,这个文件就会消失。

如果你的xml文件做过高度定制化修改,那么一定要备份,下次拉起虚拟机就应该是用virsh define/path/xxx.xml,因为有一些xml文件支持的高级部分并不被virt-install的所有参数所支持。