本文记录下如何在 Proxmox 上创建一个 CentOS7 的 KVM 虚拟机模版,以及如何从模板克隆来创建 KVM 虚拟机。

上次那篇问题太多了,就删了重写。(自己谷歌搜了下,还搜到之前那篇,真是丢人

参考:

下载系统镜像

这次使用 CentOS 7.8 的系统制作模板。

可以选择将镜像文件上传到存储,也可以下载到母鸡的/var/lib/vz/template/iso

1
2
cd /var/lib/vz/template/iso/
wget http://mirror.sesp.northwestern.edu/centos/7.8.2003/isos/x86_64/

创建 VM

我们需要先创建一个 VM,然后将其转换成模版。

访问 Proxmox 网页管理端:
https://[console-ip]:8006

右上角,点击创建 VM,这个是创建 KVM
(另一个,创建 CT,这个是 OPENVZ

VM ID 是可以修改的,我改了个永远不会被占用的数字。

  • 虚拟机名字: centos7-template
  • 硬盘:20 G (最好还是设置小点,5G就够了,方便后面备份)
  • CPU:2 cores,这样安装快一点,实际克隆可以修改的。
  • 内存:4 G (4096MiB)
  • 网络:桥接 vmbr1,vmbr1 是之前配置的内网网卡)

配置概览如下

点击“Finish”保存。

开机前,在 Hardware(硬件) 中添加一个 CloudInit Drive,存储位置就放在保持 VM 硬盘的存储中即可。(不一定要在开机前添加这个,只要在转换成模板前添加 CloudInit Drive 就行)

安装系统

启动 VM,就和平常安装一样的

需要配置的是 安装目的地(installation destination) 和 网络(network & hostname),你可以按需调整 选择安装的类型(software selection) 。

语言等设置默认

语言、位置、时区、键盘布局默认

硬盘分区

硬盘全部划分到 根分区,且文件系统为 ext4,不要配置 LVM(否则克隆时不能自动扩容)

点击手动分区,然后左上角点 Done。

选择分区类型为 Standard Partition

然后从左下角的 + ,添加挂载点,容量为 20 x 1024 = 20480,如果是 5G 就是 5x1024 = 5120.

文件系统选择为 ext4,点击 Update Settings(更新设置)

这样就分区好了,点左上角 Done,屏幕底部出现警告,这里是说,没有设置 swap 分区,建议设置一下,我们这里做模板不需要设置,再次点 Done。

再次点 Done,会出现对话框,这是本次设置生成的步骤,点击 Accept Changes(接受更改)。

网络配置

  • 主机名随意
  • 网络,选择手动配置网络。我这就配置的内网 IP,公网 IP 也可。

右下角点击 Configure 进行配置

按如图配置,如果要配置公网 IP ,对应修改就可以了,设置好了后,点 Save 保存。

完了后,还要打开网卡的开关,表示接上网线。

点 Done 回到主界面,点右下角 Begin Installation 开始安装。

这里会让你设置用户,只需要设置密码即可,不创建用户。

进入系统

安装完成后,看看能否上网,curl ip.sb 返回的是母鸡的 IP 地址,说明网络是通的,DNS 也没有问题。

可以根据自己的需要安装一些额外的软件包

比如我会安装 vim,htop 等等

1
yum update && yum install -y vim htop

关闭 SELinux、Firewalld

SELinux 玩不会,反正每次进刚装好的 CentOS 第一件事也是关闭这货,不如直接在模版里面就关掉好了。

1
2
3
systemctl disable firewalld
setenforce 0
sed -ri '/^[^#]*SELINUX=/s#=.+$#=disabled#' /etc/selinux/config

Cloud-init

Cloud-init 会在克隆的时候,进行一些基础配置,比如 IP 配置 和 用户创建、密码设置。

安装 Cloud-init

1
2
yum install cloud-init cloud-utils qemu-guest-agent
systemctl enable qemu-guest-agent

CentOS 7 会自动安装 cloud-utils-growpart, 这个包是用来自动扩容硬盘的。

qemu-guest-agent,默认可能会安装,用于查看虚拟机的 IP 地址。

由于 Cloud-init 的文档实在看不懂,这里选择简单配置。

修改 Cloud-init 配置,一般是在这个位置 /etc/cloud/cloud.cfg

开头的一部分:

1
2
disable_root: 1
ssh_pwauth: 0

改为

1
2
disable_root: 0
ssh_pwauth: 1

disable_root: 禁止 root 账号,设置为 0 ,即允许 root 账号。
ssh_pwauth: pw -> password, ssh 使用密码认证,设置为 1 ,即允许。

网络配置

/etc/sysconfig/network-scripts/ifcfg-eth0,现在这里是配置好了的

清理系统

运行以下命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
yum clean all
> /etc/machine-id
rm -f /etc/ssh/ssh_host_*
rm -rf /root/.ssh/
rm -f /root/anaconda-ks.cfg
rm -f /root/.bash_history
unset HISTFILE
rm -f /var/log/boot.log
rm -f /var/log/cron
rm -f /var/log/dmesg
rm -f /var/log/grubby
rm -f /var/log/lastlog
rm -f /var/log/maillog
rm -f /var/log/messages
rm -f /var/log/secure
rm -f /var/log/spooler
rm -f /var/log/tallylog
rm -f /var/log/wpa_supplicant.log
rm -f /var/log/wtmp
rm -f /var/log/yum.log
rm -f /var/log/audit/audit.log
rm -f /var/log/ovirt-guest-agent/ovirt-guest-agent.log
rm -f /var/log/tuned/tuned.log
rm -f /etc/udev/rules/70-persistent-*-rules
sys-unconfig

最后一条指令运行后,系统会关机。

为 VM 开启 Qemu Agent

在 VM 面板的 Options 里面开启 Qemu Agent。

验证克隆

先不急着转换模版,可以直接克隆看看有没有问题,因为一旦转换成模版,就不能修改了,如果有问题,就只能重装。

这里的克隆,是 Full Clone(全量克隆),从下方的 log 可以看出来,全量克隆会耗费一点时间。

克隆完成后,设置 Cloud-init。

1
2
3
4
5
6
User: root
Password:
DNS domain: 1.1.1.1
DNS servers: 1.1.1.1
SSH public key: none
IP config: ip=192.168.1.101/24,gw=192.168.1.1

DNS domain 和 DNS servers

默认是 use the host settings,但是实测不填,克隆出的服务器没有这个配置,可能是 cloud-init 没有识别到主机配置,保险期间还是填一个。

IP config

如果是公网的话,CIDR 当前子网实际是多少就填多少,因为要按照这个 CIDR 计算广播地址的。我实测填成 /32,计算就不对了。

点 Regenerate Image ,重新生成镜像.

硬盘扩容

Hardware - Hard Disk - resize disk

这里填写的是增量,而且只能增加,不能减少。

如果 20G 调整为 100G,那么增量填写 80 。

没有什么要调整的,就可以开机了。

开机后,在虚拟机的 Summary 里 IPs 一栏,可以看到主机的 IP 地址。

转换模版

到 Web 管理界面,右键刚刚关机的 VM,转换成模版即可。

克隆小鸡

右键刚刚生成的模版,点 clone,会问你创建链接克隆(linked clone)还是全量克隆(full clone)

区别:

  • 链接克隆(Linked Clone)
    克隆出的系统必须依赖于原始系统,如果原始系统出现任何问题,克隆出的系统也会出问题
  • 全量克隆(Full Clone)
    指克隆出的系统和原始系统一模一样,可以独立运行。

一般为了完整的克隆,选择 Full Clone 。

系统初始化的设置参考上节 “验证克隆”、

之后开机就行了。
控制台(VNC)可以看到 Cloud-init 的过程。

模版备份

可以通过备份,将 KVM 虚拟机导出成文件,方便迁移和恢复。
步骤:VM 面板 - Backup (备份),备份模式 Stop(停止), 然后点备份按钮。

如果 Storage 下拉框里面没有条目,那就是你的存储没有开备份功能。

在 Datacenter - Storage,选择一个 Type 为 Dir 的存储,点击 Edit,在 Content 下拉框,选中 VZDump backup file,然后保存。

因为备份是实实在在的文件,不是 raw 了,只能放在某个目录的存储中。

生成的vma.gz文件位置:
/var/lib/vz/dump/
命名规则:
vzdump-qemu-{vmid}-{year_month_day_hour_minute_second}.vma.gz
比如:
vzdump-qemu-100-2018_10_10-23_22_33.vma.gz

(完)