【精选】Ubuntu server 22.04 安装kvm

您所在的位置:网站首页 ubuntu16系统lo口怎么桥接到网卡 【精选】Ubuntu server 22.04 安装kvm

【精选】Ubuntu server 22.04 安装kvm

2023-11-13 05:09| 来源: 网络整理| 查看: 265

本人有一台工控机, 5500u cpu, 8g 内存,本来是打算用来跑docker的, 但是因为要装 k8s, 虚拟机会更加合适方便,

宿主机的系统是ubuntu server 22.04.1 LTS, 没有安装GUI。 所以vmware virtualbox就不考虑了。 纯命令行估计kvm 会更加合适。 一台机当两三台机用了。

Step 1 检查cpu是否开启虚拟化

国际惯例, 首先检查cpu有没开启虚拟化。 现在市面上估计都买不到不支持虚拟化的cpu了, 问题是我们也要检查下bios上有没enable虚拟化特性。

gateman@homeserver2:~$ kvm-ok INFO: /dev/kvm exists KVM acceleration can be used

Step 2 安装kvm sudo apt update sudo apt install qemu qemu-kvm libvirt-bin bridge-utils virt-manager

问题是 这个 libvirt-bin, 提供了virsh等命令工具帮助我们更好地管理kvm 实例。

而且比我以前用kvm时多了个系统服务libvirtd.service, 简单来讲,这个服务会用1个common的账号 libvirt 去启动kvm 实例进程。

所以我们的iso文件, 虚拟硬盘文件都必须放在能让libvirt 账号可以访问的地方。

如果是ubuntu 20.04 则有可能找不到libvirt-bin的包, 要分开安装

libvirt-daemon-system libvirt-clients

安装上面的东西后, 检查libvirtd服务有没有启动.

sudo systemctl status libvirtd.service ## if not started sudo systemctl start libvirtd.service sudo systemctl enable libvirtd.service

Step 3 设置桥接网卡

kvm 支持多种网络模式

桥接模式 (bridge) NAT模式 路由模式 直接分配设备模式 …

第4种太奢侈, 而其他3种只有桥接模式能令虚拟机和局域网其他主机相互通信(ip 在同1个网段)

所以我们会选择桥接模式。

当我们用vmware virtualbox时, 桥接网卡都会自动配置好, 而kvm需要我们事先手动配置。

每个linux发型版的网络管理方式都不同, 而ubuntu 22.04.1 用的是自家的netplan 来管理的。 当然,如果我们启动用GUI, 则很可能会用NetworkManager.

既然我的机器是没有GUI的, 那就是netplan了 检查 /etc/netplan 文件夹, 是否存在yaml文件, 如果不存在, 而你台机器还能上网的话, 则肯定不是用netplan 方式。

3.1 检查netplan配置 gateman@homeserver2:/etc/netplan$ pwd /etc/netplan gateman@homeserver2:/etc/netplan$ ls *yaml 00-installer-config.yaml # This is the network config written by 'subiquity' network: ethernets: enp1s0: dhcp4: false enp2s0: dhcp4: true version: 2

先备份和查看原来的配置文件, 可以看到, 我台机器只有两个有线端口, 其中只有1个插了网线启用的dhcp, 这里的4指的是 ip4

3.2 检查虚拟桥接设备

输入ifconfig 回车 会见到输出除了上面两个有线网卡外, 多了1个设备virbr0,这是安装完kvm后系统自动创建的

virbr0: flags=4099 mtu 1500 inet 192.168.122.1 netmask 255.255.255.0 broadcast 192.168.122.255 ether 52:54:00:89:a9:72 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

其实这个virbr0 并不是一块虚拟网卡, 而是1个块虚拟桥接设备(bridge), 我们还必须基于它再创建1个虚拟桥接网卡。

3.3 编辑/etc/netplan/00-xxx.yaml 添加一个桥接网卡

before that, 我手绘了1个kvm 桥接的大概原理图, 不会是百分百准确, 将就看就行

我们需要做的是创建1个关键的虚拟桥接网卡 br0 , 如下图, 它桥接 宿主机的真正物理卡, 而且, 我们之后创建的虚拟机都会通过这个br0 桥接网卡与外部沟通。

也就是讲即使我们后面会创建多台虚拟机, 对于宿主机来讲, 1个虚拟桥接网卡就足够了。 在这里插入图片描述

编辑 /etc/netplan/00-xxxx.yaml

# This is the network config written by 'subiquity' network: ethernets: enp1s0: dhcp4: false enp2s0: dhcp4: false # 真正的物理显卡要关闭dhcp bridges: br0: interfaces: [enp2s0] dhcp4: no addresses: [10.0.1.107/24] # ip地址 routes: - to: default via: 10.0.1.1 # 路由其地址 nameservers: addresses: [119.29.29.29, 8.8.8.8] # DNS 119.29.29.29 是疼讯的DNS version: 2

保存后 执行

sudo netplan apply

注意这里我们不在从路由器动态申请ip, 而是设置静态ip, 如国修改前后的ip不同,我们的ssh connection会断开, 需要重新连接。

修改后我们再查看ifconfig 我们会发现

多了个网卡br0, 地址就是我们设置的静态ip地址物理网卡没有地址, 这是正常的, 如上图, 连物理网卡也会通过这个虚拟网桥连接外部。。 br0: flags=4163 mtu 1500 inet 10.0.1.107 netmask 255.255.255.0 broadcast 10.0.1.255 inet6 fe80::b4a2:82ff:fe35:d8d8 prefixlen 64 scopeid 0x20 ether b6:a2:82:35:d8:d8 txqueuelen 1000 (Ethernet) RX packets 61997 bytes 8192346 (8.1 MB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 82925 bytes 21320864 (21.3 MB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 enp2s0: flags=4163 mtu 1500 ether 00:e0:0a:f2:12:26 txqueuelen 1000 (Ethernet) RX packets 338034 bytes 418401126 (418.4 MB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 115940 bytes 24050924 (24.0 MB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

Step 4 新建虚拟硬盘

上面说了,虚拟硬盘为了要让libvirt 访问, 最好创建再公共的地方. 我在根目录创建了1个folder /kvmdisks …

命令:

qemu-img create ./kvm0.img 20G

Step 5 准备系统安装文件iso

我为了省事, 直接套娃安装ubuntu server 22.04 本身 同样地, iso 最好放在公共地方

gateman@homeserver2:/isos$ ls ubuntu-22.04.1-live-server-amd64.iso

Step 6 编写虚拟机配置文件

对于新增加一台虚拟机, 无非修改下面几个地方 1, cpu 数量和内存大小 2. uuid 用uuid-rumtime 包下的 uuidgen命令生成 3. 修改新的随机mac地址, 自己google怎么生成 echo $RANDOM | md5sum | sed ‘s/…/&:/g’ | cut -c1-17 4. 修改虚拟机名称。 5. 修改虚拟硬盘路径 6. 反注释光驱启动那行 7. 没了

gateman@homeserver2:~/kvmxmls/vm1$ cat vm1.xml //如果是Xen,则type=‘xen’ vm1 //虚拟机名称,同一物理机唯一 4b942306-76b0-4174-9371-a0485fdc8093 //同一物理机唯一,可用uuidgen生成 4096000 2048000 //memory这两个值最好设成一样 2 //虚拟机可使用的cpu个数,查看物理机可用CPU个数:cat /proc/cpuinfo |grep processor | wc -l hvm //arch指出系统架构类型,machine 则是机器类型,查看机器类型:qemu-system-x86_64 -M ? //表示启动按F12进入启动菜单 //Advanced Configuration and Power Interface,高级配置与电源接口 //Advanced Programmable Interrupt Controller,高级可编程中断控制器 //Physical Address Extension,物理地址扩展 //虚拟机时钟设置,这里表示本地本机时间 destroy //突发事件动作 restart restart //设备配置/ /usr/bin/kvm //如果是Xen则是/usr/lib/xen/binqemu-dm //硬盘 // if windows must ide else virtio //光盘 /* 利用Linux网桥连接网络 */ //配置的网桥网卡名称 //同一网桥下相同 //别名,同一网桥下相同 //配置vnc,windows下可以使用vncviewer登录,获取vnc端口号:virsh vncdisplay vm0

Step 7 启动虚拟机

保存后. 有两种方式启动

virsh create vm0.xmlvirsh define vm0.xml virsh start vm0 # 主机名

第一种一旦关闭虚拟机就会消失, 建议用于测试 第二种除非 执行virsh undefine 主机名, 否则一直存在与虚拟机列表。

如果遇到错误:XML error: expected unicast mac address, found multicast ‘23:F6:7F:2B:67:5D’ 那是因为所造的mac地址是组播地址,要非组播的mac地址才行,开头大于24即可

Step 8, 连接启动后的虚拟机, 安装系统

两种方式,

用vnc viewer(linux /win 通用)在另一台linux机上安装virt-manager

不得不说virt-manager 真是个神奇, 可以在一台有GUI的linux 主机去管理另1台没有GUI的KVM 宿主机的kvm 子系统。 在这里插入图片描述 缺点: 3. 需要GUI 4. 没有windows 版, 硬气! 接着就可以安装系统了 在这里插入图片描述

Step 9, 移除cdrom启动方式, 重启

如果用virsh create vm0.xml 方式启动安装的, 安装后可以修改vm0.xml(或者另建一份copy), 把cdrom 启动注销掉

然后 再重新 virsh define …

Step 10,检查kvm虚拟机 网卡地址

如果一切顺利, 虚拟机dhcp生成的网卡会与物理机同一个网段

gateman@vm:~$ ifconfig ens3: flags=4163 mtu 1500 inet 10.0.1.151 netmask 255.255.255.0 broadcast 10.0.1.255 inet6 fe80::f892:1ff:fe33:d4fa prefixlen 64 scopeid 0x20 ether fa:92:01:33:d4:fa txqueuelen 1000 (Ethernet) RX packets 2540 bytes 145750 (145.7 KB) RX errors 0 dropped 477 overruns 0 frame 0 TX packets 423 bytes 30596 (30.5 KB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 324 lo: flags=73 mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10 loop txqueuelen 1000 (Local Loopback) RX packets 164 bytes 14048 (14.0 KB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 164 bytes 14048 (14.0 KB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

其实这时就可以通过局域网物理机ssh过去了

为了方便管理, 还是建议修改虚拟机网卡设置, 设置成静态ip

gateman@vm:~$ cat /etc/netplan/00-installer-config.yaml # This is the network config written by 'subiquity' network: ethernets: ens3: dhcp4: no addresses: [10.0.1.151/24] gateway4: 10.0.1.1 nameservers: addresses: [119.29.29.29, 8.8.8.8]

虚拟机网卡地址不与物理机同一网段的原因

如果发现虚拟机ip地址是192.168.122.xxx

则这时 其他局域网的主机是访问不了这些虚拟机的。

原因是vm0.xml 的网络设置错误

/* 利用Linux网桥连接网络 */ //配置的网桥网卡名称 //同一网桥下相同 //别名,同一网桥下相同

把上面的 source briidge = ‘virbr0’ 改回来 br0 就ok! 我把自己踩过的坑都写出来了。

virt-manager

最后再推荐一下这个神器, 它可以很方便的完成本文的step4 to step9 跟virtbox的gui 界面用起来差距不大了!



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3