前言

> :CloudInit技术并非只能在Proxmox VE平台使用,只是本文作者基于Proxmox VE平台。

在常规环境中,运维人员首先要耗时安装一个虚拟机,在虚拟机创建完成后,手动登录虚拟机,进行一系列的配置,如:用户、密码、ip等。这样的操作,对于运维人员来说,是一件非常繁琐的事情。

CloudInit技术是一种能够在虚拟机启动时,自动配置虚拟机的各项参数的技术。在Proxmox VE平台上,可以通过CloudInit技术,实现虚拟机的用户、密码、ip等参数的自动配置。能够通过一些调整,实现虚拟机磁盘和分区自动扩容。

CloudInit技术

CloudInit 是一个开源的镜像初始化程序,通过它可以轻松实现弹性伸缩、快速配置。CloudInit 通过在虚拟机启动时,读取配置文件,实现虚拟机的自动配置。

参考CloudInit官网:https://cloudinit.readthedocs.io/en/latest/
参考Proxmox VE官网:https://pve.proxmox.com/wiki/Cloud-Init_Support
官方示例:https://pve.proxmox.com/wiki/Cloud-Init_Support#_example_cloud_init_configuration

当然,你需要先下载能够支持CloudInit的镜像,然后在Proxmox VE平台上创建虚拟机时,选择CloudInit镜像,就可以实现虚拟机的自动配置。

这是官方CloudInit镜像下载列表:

Proxmox VE平台上使用CloudInit

  1. 下载CloudInit镜像,本文以Ubunut20.04为例,如下图
    • 进入ubuntu官网:http://cloud-images.ubuntu.com/releases/,选择20.04 版本。
      下载CloudInit镜像-1
    • 选择最新的版本,最新的版本更新了依赖,如下图
      下载CloudInit镜像-2
    • 根据自己的平台,选择vmdk格式的镜像,这里选择的是amd64平台,如下图
      下载CloudInit镜像-3
  2. 创建一个虚拟机,只保留基本配置,删除磁盘。
  3. 添加 USB设备、串口设备、CloudInit Drive设备。如下图
    硬件配置
  4. 导入CloudInit镜像到Proxmox VE平台
    ~ ❯                                                                                               with root@pve at 06:30:17 PM
    ❯ qm importdisk 100 ubuntu-20.04-server-cloudimg-amd64.vmdk local-lvm --format=qcow2
    100: local-lvm:vm-100-disk-0.qcow2
    ~ ❯ with root@pve at 06:30:21 PM
  5. 使用 sata/scsi 挂载刚刚导入的磁盘
  6. 调整引导顺序为挂载的硬盘
  7. 配置CloudInit,如下图
    CloudInit基本配置

配置虚拟机

  1. 使用国内加速源
    ~ ❯                                                                                               with root@pve at 06:30:17 PM
    ❯ sed -i "s/archive.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g" `grep "archive.ubuntu.com" -rl /etc/apt/sources.list`
    ~ ❯ with root@pve at 06:30:17 PM
  2. 挂载新硬盘到虚拟机,重启虚拟机后挂载硬盘
    ~ ❯                                                                                               with root@pve at 06:30:17 PM
    ❯ mkfs -t ext4 /dev/sdb
    mkdir /data
    ❯ mount /dev/sdb /data
    echo "/dev/sdb /data ext4 defaults 0 0" >> /etc/fstab
    ~ ❯ with root@pve at 06:30:17 PM
  3. 编辑cloud-init配置文件,启用磁盘自动扩容
    ~ ❯                                                                                               with root@pve at 06:30:17 PM
    echo "growpart:
    mode: auto
    devices: [/dev/sdb,/dev/sda]
    ignore_growroot_disabled: false
    runcmd:
    - [growpart,/dev/sda,1]
    - [partprobe,-s,/dev/sda1]
    - [resize2fs,/dev/sda1]
    - [resize2fs,/dev/sdb]" > /etc/cloud/cloud.cfg
    ~ ❯ with root@pve at 06:30:17 PM
  4. 配置虚拟机网络缓冲,go-quic不进行这一步可能会报错
    ~ ❯                                                                                               with root@pve at 06:30:17 PM
    ❯ sysctl -w net.core.rmem_max=2500000 >> /etc/sysctl.conf
    ❯ sysctl -w net.core.wmem_max=2500000 >> /etc/sysctl.conf
    ~ ❯ with root@pve at 06:30:17 PM
  5. 安装其他预安装的软件,类似于dockergo等,也可以安装宝塔面板并修改用户密码端口安全路径之类的,这里以安装docker为例
    ~ ❯                                                                                               with root@pve at 06:30:17 PM
    ❯ apt install -y docker.io
    ~ ❯ with root@pve at 06:30:17 PM
  6. 安装 qemu-guest-agent
    ~ ❯                                                                                               with root@pve at 06:30:17 PM
    ❯ apt install -y qemu-guest-agent
    ~ ❯ with root@pve at 06:30:17 PM
  7. 清除历史命令记录
    ~ ❯                                                                                               with root@pve at 06:30:17 PM
    history -c
    ~ ❯ with root@pve at 06:30:17 PM
  8. 其他的就是一些自己的配置了,像配置防火墙之类的,这里就不一一列举了。可以将这个虚拟机保存为模板,以后创建虚拟机时,选择这个模板,就可以自动配置了。