写在开头
虽然你可以直接克隆现有的虚拟机,但是为了以后快速建立新的虚拟机创建虚拟机模板还是非常有必要的
准备 Cloud-Init 模板虚拟机
为了能够使用 Cloud-Init,首先需要准备一个虚拟机模板,该模板可以是 Ubuntu、Debian 等支持 Cloud-Init 的操作系统
创建 Cloud-Init 模板虚拟机的步骤
创建虚拟机
在 PVE 中创建一个虚拟机。你可以选择 Debian 或 Ubuntu 的 ISO 镜像文件,按照标准流程安装操作系统
如果你想要模板虚拟机只有一个root
账户不想有其他用户,你可以使用相关自动化脚本安装系统或者正常手动安装完系统后删除创建的用户,只保留root
用户即可,可以和其他 VPS 一样需要普通用户新建就可以了
查看/删除用户
查看用户
查看用户是否存在
cat /etc/passwd
或者使用id
命令
id username
如果用户存在,该命令会显示该用户的 UID 和 GID;如果用户不存在,会显示相应的错误信息
查看用户的进程
在删除用户之前,最好确保该用户没有正在运行的进程。您可以使用以下命令查看用户的进程
ps -u username
如果有进程在运行,您可以选择先终止它们,使用 kill 命令
kill -9 进程ID
删除用户
使用userdel
命令
删除用户但保留其主目录:
sudo userdel username
删除用户及其主目录和邮件缓存:
sudo userdel -r username
这个选项会同时删除用户的主目录及其所有文件
新建用户
sudo adduser debian
如果您希望新创建的用户具有 sudo 权限,可以将其添加到 sudo
组:
sudo usermod -aG sudo debian
安装 Cloud-Init(如果未预装)
在虚拟机安装完成后,登录虚拟机并确保 cloud-init
已安装
以下操作如果 PVE 没有为虚拟机添加cloud-init设备,则不会返回status: done
会一直返回cloud-init:disabled
,可以转为模板后再添加 cloud-init 设备
运行以下命令检查 Cloud-Init 是否存在:
sudo cloud-init status
输出应该显示 status: done
,表示 Cloud-Init 已成功启用并运行
如果 Cloud-Init 状态正常,那么它应该可以应用初始化设置
如果返回cloud-init:disabled
运行以下命令以清除 Cloud-Init 的状态:
sudo cloud-init clean
这个命令会删除 Cloud-Init 的缓存,并重置它为初始状态,使其在下次启动时重新运行
如果没有安装,可以使用以下命令进行安装(以 Ubuntu/Debian 为例):
sudo apt update
sudo apt install cloud-init
配置 Cloud-Init(可选)
可以修改 /etc/cloud/cloud.cfg
文件,根据需求自定义一些 Cloud-Init 的默认行为,例如禁用某些模块或配置网络
关闭虚拟机
关闭虚拟机,准备将其转换为模板
转换虚拟机为模板
选择此虚拟机,右键点击虚拟机,在选项菜单中选择 "转换为模板"
通过 Cloud-Init 创建新的虚拟机
一旦你有了 Cloud-Init 模板,可以通过它来快速创建虚拟机并自动配置
从 Cloud-Init 模板创建虚拟机的步骤
从模板克隆新的虚拟机
右键点击创建的虚拟机模板,选择 "克隆",并创建一个新的虚拟机,你可以选择完整克隆或链接克隆
添加 Cloud-Init 设备
在新克隆的虚拟机中,点击 "硬件" 选项卡,点击 "添加 -> Cloud-Init 驱动"。这会生成一个 cloud-init
磁盘,用于存储初始化数据
配置 Cloud-Init 参数
在虚拟机的 "Cloud-Init" 选项卡中,你可以配置以下内容:
- IP地址(网络配置):可以指定 IPv4、IPv6 地址
- 网关和 DNS:为虚拟机设置网络网关和 DNS
- 主机名:设置虚拟机的主机名
- 用户和密码:设置虚拟机的默认用户、密码或 SSH 密钥
启动虚拟机
配置完 Cloud-Init 后,启动虚拟机。虚拟机会自动应用你在 Cloud-Init 选项中设置的参数,完成初始化
Cloud-Init 网络配置
PVE 的 Cloud-Init 可以自动设置网络。如果需要为虚拟机分配静态 IP 或配置 IPv6,可以在 Cloud-Init 选项卡中进行配置,以 Proxmox GUI 中的设置为例:
- 进入虚拟机的 "Cloud-Init" 选项卡
- 找到 "网络配置" 部分
- 你可以手动设置静态 IP 地址、网关和 DNS,也可以选择自动分配 DHCP
示例:手动设置 IPv4 和 IPv6
- IPv4 地址:
192.168.1.100/24
- IPv4 网关:
192.168.1.1
- IPv6 地址:
2001:db8::1/64
- IPv6 网关:
2001:db8::1
- DNS 服务器:
8.8.8.8
(Google DNS)
DNS 服务器可以把 IPV4 DNS 和 IPV6 DNS 一起写,中间用空格
或者英文,
隔开
例如:8.8.8.8,2001:4860:4860::8888
或者8.8.8.8 2001:4860:4860::8888
在 Cloud-Init 中配置后,这些设置会在虚拟机启动时自动应用
重新生成 Cloud-Init 镜像
如果你修改了 Cloud-Init 配置,并且希望应用到当前虚拟机实例,你可以通过以下步骤重新生成 Cloud-Init 镜像:
- 停止虚拟机
- 右键点击虚拟机,选择 "更多选项 -> Cloud-Init -> 重新生成镜像"
- 重新启动虚拟机,Cloud-Init 会使用新的设置进行初始化
检查 Cloud-Init 状态
虚拟机启动后,你可以通过以下命令检查 Cloud-Init 的执行状态:
sudo cloud-init status
查看 Cloud-Init 日志:
sudo cat /var/log/cloud-init.log