2022年4月

ESXi Cloud-init

vSphere环境下使用Cloud-init快速初始化虚拟机, 虚拟机环境: Debian 11.

由于vSphere作为一款商业闭源软件, 开源社区很是看不起, 造成Debian 11自带的Cloud-init版本不支持vSphere环境下Userdata解析, 先需要通过源码安装最新版Cloud-init来支持:

git clone https://github.com/cloud-init/cloud-init.git
cd cloud-init
sudo pip3 install -r requirements.txt 
sudo python3 setup.py build
sudo python3 setup.py install --init-system systemd
sudo cloud-init init --local
sudo cloud-init status

sudo ln -s /usr/local/bin/cloud-init /usr/bin/cloud-init
for svc in cloud-init-local.service cloud-init.service cloud-config.service cloud-final.service; do
  sudo systemctl enable $svc
  sudo systemctl start  $svc
done

来源

当Cloud-init安装完毕后, 可以在虚拟机的设定内设置参数, 来将相关配置传入虚拟机, 以供初始化使用:

非网络相关:

  • guestinfo.userdata
  • guestinfo.userdata.encoding

网络相关:

  • guestinfo.metadata
  • guestinfo.metadata.encoding

Cloud-init配置文件:

#cloud-config

# note that "#cloud-config" must be very first line for everything to work

# guestinfo.userdata: cat cloudinit.yml | base64 | pbcopy
# guestinfo.userdata.encoding: base64

# networking
# this one should be added to:
# guestinfo.metadata:
# guestinfo.metadata.encoding
# ----------

network:
  version: 2
  ethernets:
    ens192:
      addresses:
        - 192.168.0.186/24
      gateway4: 192.168.0.1
      dhcp4: false
      dhcp6: false
      nameservers:
        addresses: [192.168.0.5]

preserve_hostname: false
prefer_fqdn_over_hostname: false
hostname: example
manage_etc_hosts: true

timezone: Asia/Shanghai

disable_root: false

package_update: true
package_upgrade: true
package_reboot_if_required: true

packages:
  - gcc
  - htop
  - telnet
  - mtr
  - curl
  - wget
  - nload
  - iftop
  - screen

来源

当Cloud-init配置完一次后, 如果下次开机还想再让Cloud-init重新配置一次的话可以执行命令:

cloud-init clean