本文最后更新于 287 天前,其中的信息可能已经有所发展或是发生改变。
注:此方法适用于 Rocky Linux 9 所有系统版本。
安装QEMU Guest Agent
# 安装qemu agent
dnf install -y qemu-guest-agent
reboot
安装重启后,确保在[概要]中可以看到对应IP信息,如果无法看到对应IP信息,说明QEMU Guest Agent未启用,需要在[选项]中启用。
系统初始化设置
目前部分公有云厂商都没有进行相关步骤配置,如:Windows
运行sysprep
等,这样造成所有虚拟机的 SID 都是相同的,对于传统企业上云来说,如果需要使用Active Directory
进行集中账号、权限管理的话,是不太友好的。Linux 也是如此,唯一机器 ID 很重要。
# 更新系统
dnf update
# 安装必要的软件
dnf install -y wget curl chrony iotop iftop telnet net-tools bash-completion
# 设置首次登录强制修改密码
chage -d0 root
# 清理缓存
yum clean all
# 删除网卡配置文件
rm -rf /etc/NetworkManager/system-connections/ens*.nmconnection
# 删除SSH私钥,不同系统私钥从严格意思上来说应该不同,所以删除后,重启系统会自动生成全新的私钥
rm -rf /etc/ssh/ssh_host_*
# 修改machine-id,machine-id为系统的唯一性ID,每台服务器系统应该唯一,用于解决系统ID冲突,我们需要重置机器ID。先删除现有/etc/machine-id文件,然后在/etc/profile文件最后添加systemd-machine-id-setup命令,开机后会通过systemd-machine-id-setup命令生成全新的machine-id。如果/etc/machine-id文件存在,systemd-machine-id-setup命令就不会再重新创建新的机器ID。
rm -rf /etc/machine-id
echo "systemd-machine-id-setup" >> /etc/profile
# 清理系统日志
systemctl stop systemd-journald.socket
find /var/log -type f -exec rm -rf {} \;
# 设置持久化保存日志的目录
mkdir -p /var/log/journal
# 清除历史命令
echo /dev/null > ~/.bash_history ; history -c
# 关闭系统
systemctl poweroff
使用此模板可能遇到的问题
在使用此模板的时候,您可能会遇到报错: unknown connection ensXX
,这是因为网络配置分为两个层面,一个是网络设备层面,一个是网络连接层面。我们的IP地址配置属于网络连接层面。两者的区别:用命令nmcli device xxx
操作的都是网络设备层面的,用命令nmcli connection xxx
操作的都是网络连接层面的。
# 显示所有连接
nmcli connection show
# 删除自动生成的连接
nmcli con delete "Wired connection 1"
# 查看网络设备名称
[root@localhost ~]# nmcli device
DEVICE TYPE STATE CONNECTION
ens18 ethernet connected --
lo loopback unmanaged --
# 重新创建连接,并配置IP地址
# con-name 创建的连接名称,type 为设备类型,ifname 为网卡设备本身的名称,可以通过nmcli device命令查看。
nmcli connection add con-name ens18 type ethernet ifname ens18 autoconnect yes ip4 172.16.11.141/24 gw4 172.16.11.254
# 查看创建的连接
[root@localhost ~]# nmcli con show
NAME UUID TYPE DEVICE
ens18 4c12c254-f020-44bf-8c6a-4386a5287e46 ethernet ens18
# 启用连接
nmcli connection up ens18
# 这时候可以看到设备 ens18 已经连接至 ens18 这个网络连接。
[root@localhost ~]# nmcli device
DEVICE TYPE STATE CONNECTION
ens18 ethernet connected ens18
lo loopback unmanaged --
# 设置DNS
nmcli connection modify ens18 ipv4.dns "223.6.6.6 114.114.114.114"
# 查看对应网络配置文件
[root@localhost ~]# cat /etc/NetworkManager/system-connections/ens18.nmconnection
[connection]
id=ens18
uuid=4c12c254-f020-44bf-8c6a-4386a5287e46
type=ethernet
interface-name=ens18
timestamp=1669518152
[ethernet]
[ipv4]
address1=172.16.11.141/24,172.16.11.254
dns=223.6.6.6;114.114.114.114;
method=manual
[ipv6]
addr-gen-mode=stable-privacy
method=auto
[proxy]
写在最后
通过以上的设置 Rocky Linux 9.0 系统就封装完成了,这时候只需要在 Proxmox VE 右击对应虚拟机转换成模板即可。此方法不仅仅适用于 Proxmox VE,对于 Hyper-v\ESXI\OpenStack\oVirt 同样适用,只是 Hyper-v 与 ESXI 安装的代理软件包不同而已,如:vm-tools 等。通过模板部署系统,可以极大提高我们部署系统的速度。
版权声明:「自由转载-保持署名-非商业性使用-禁止演绎 3.0 国际」(CC BY-NC-ND 3.0)
用一杯咖啡支持我们,我们的每一篇[文档]都经过实际操作和精心打磨,而不是简单地从网上复制粘贴。期间投入了大量心血,只为能够真正帮助到您。
有一个问题:vm的ip和gateway在proxmox的cloud-init模块设置,实测发现这个ip无法作用到vm的/etc/NetworkManager/system-connections/xx.nmconnection , vm 本身无法ping通
诉求在proxmox的cloud-init设置ip和gateway,能自动使vm生效,应该怎么做呢?
解决了,需要在vm上安装cloud-init