Proxmox VE虚拟机的Cloud-init安装记录
概述
Cloud-init的原理,就是给VM增加一个CDROM设备,配合操作系统安装的cloud-init软件包,以便在启动时自动读取网络设置参数。

这个Cloud-init设备的路径一般为/dev/sr0
, 大小约为4M,其中包含三个文件,这就是元数据了。
1 | [root@localhost ~]# tree /mnt |
下图就标注了Cloud-init所有可以配置的参数信息。

安装步骤
1. 安装Centos 7.8操作系统
首先创建一个虚拟机并加载Centos系统安装ISO文件,基本配置建议为:1vCPU,1024M内存,4G硬盘,网卡无所谓。注意暂时先不启动!!
然后,在PVE控制台上为该虚拟机增加一个Cloud init设备,稍等初始化完成,开始启动VM进行操作系统安装。
在安装Centos时,注意手工建立磁盘分区,只留一个启动分区,EFI-Boot和Swap分区都不要了,参见下图。

系统安装完成后,检查是否可以正常启动。
新系统装完后,必须将网卡配置文件内的onboot打开,清除uuid!!!
创建Ubuntu的VM,Cloud-Init设备必须使用virtio-scsi-pci
类型的驱动程序
2. 关闭selinux和firewalld以及碍事的NetworkManager
selinux的真实配置文件路径是
/etc/selinux/config
,而/etc/sysconfig/selinux
实际是它的软链接文件。
检查selinux状态可以使用sestatus
命令。
1 | # 关闭Selinux |
netfilter是Linux内核的包过滤框架,它提供了一系列的钩子(Hook)供其他模块控制包的流动,配置Linux内核防火墙的命令行工具iptables就是基于netfilter机制的。
注意:服务器重启后sysctl
命令报错,原因大概是br_netfilter模块未被自动加载,考虑通过配置/etc/rc.sysinit
来解决!
3. 安装必要的虚拟化软件和工具软件
为了让虚拟化层可以重启和关闭虚拟机,必须安装acpid服务;
为了使根分区正确调整大小安装cloud-utils-growpart,cloud-init支持下发前设置信息写入。
1 | yum install -y acpid cloud-init cloud-utils-growpart |
4. 设置cloud-init
设置允许root登录,允许输入口令,禁止第一次启动后yum更新软件
1 | sed -ri '/disable_root/{s#\S$#0#}' /etc/cloud/cloud.cfg |
默认cloud-init会创建一个系统类型的centos用户,手工编辑配置文件取消掉。
1 | # default_user: |
5. 虚拟机关机,并在PVE控制台上将其转换为模版templete,母鸡就此完成
使用Cloud-init模版克隆新的虚拟机
在PVE控制台选中模版,右键选择Clone
,在弹出对话框中设置就可以了。
注意,一般选择Full Clone
,相比Link Clone
更安全,但是要多花一点硬盘空间就是了。

创建小鸡需要花一点时间写盘,此时VM被锁定,等锁定解除后就可以设置Cloud-init的信息,并启动小鸡了。