撰于 阅读 488

PVE Cloud-init 使用教程

写在开头

虽然你可以直接克隆现有的虚拟机,但是为了以后快速建立新的虚拟机创建虚拟机模板还是非常有必要的

准备 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 中的设置为例:

  1. 进入虚拟机的 "Cloud-Init" 选项卡
  2. 找到 "网络配置" 部分
  3. 你可以手动设置静态 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 镜像:

  1. 停止虚拟机
  2. 右键点击虚拟机,选择 "更多选项 -> Cloud-Init -> 重新生成镜像"
  3. 重新启动虚拟机,Cloud-Init 会使用新的设置进行初始化

检查 Cloud-Init 状态

虚拟机启动后,你可以通过以下命令检查 Cloud-Init 的执行状态:

sudo cloud-init status

查看 Cloud-Init 日志:

sudo cat /var/log/cloud-init.log