雷达智富

首页 > 内容 > 程序笔记 > 正文

程序笔记

在 Proxmox VE 上创建 Rocky/Alma/CentOS 模板

2024-07-17 127

在 Proxmox VE 中,VM 模板是预先配置的操作系统映像,供在旋转新虚拟机时使用。它包含操作系统的完整安装以及运行操作系统所需的其他附加软件包和设置。 Proxmox VE 支持并允许用户为大多数 Linux 发行版和 Windows 桌面/服务器版本创建自定义操作系统模板。

使用操作系统模板的主要目的是简化创建新虚拟机的过程。模板提供了一种标准化且更快速的操作系统部署方式,无需使用冗长乏味的 ISO 映像。使用模板创建新虚拟机就像选择操作系统模板、自定义硬件设置、分配资源以及在几秒钟内启动虚拟机一样简单。

在我们之前的文章中,我们讨论了 Debian 和 Ubuntu 模板的创建。该文章可在以下链接中找到:

  • 在 Proxmox VE 上创建 Ubuntu 和 Debian 操作系统模板

在 Proxmox VE 上创建 Rocky/AlmaLinux/CentOS 操作系统模板

在本文结束时,您将使用包含您的应用程序特定依赖项的定制配置创建 Rocky/AlmaLinux 或 CentOS 操作系统模板。我们将致力于以下操作系统:

  • 洛基 Linux 9/洛基 Linux 8
  • AlmaLinux 9/AlmaLinux 8
  • CentOS Stream 9/CentOS Stream 8

让我们深入了解一下!

1. 下载云基础镜像

我们需要大多数 Linux 发行版提供的基础云镜像。使用以下变量:

  • imageURL:云图像链接
  • IMAGE:下载并存储在系统本地的云镜像的名称
  • TID:要创建的模板的ID。
  • TNAME:分配给正在创建的模板的名称。
  • CUSER:我们将使用 Cloud-init 自定义设置,例如操作系统用户、密码和网络配置。这是要使用的默认操作系统名称。

以下是示例。

Rocky Linux 8 云镜像:

imageURL=https://dl.rockylinux.org/pub/rocky/8/images/x86_64/Rocky-8-GenericCloud.latest.x86_64.qcow2
wget $imageURL
IMAGE=Rocky-8-GenericCloud.latest.x86_64.qcow2
TID=700
TNAME=Rocky-8-Template
CUSER=rocky

Rocky Linux 9 云镜像:

imageURL=https://dl.rockylinux.org/pub/rocky/9/images/x86_64/Rocky-9-GenericCloud.latest.x86_64.qcow2
wget $imageURL
IMAGE=Rocky-9-GenericCloud.latest.x86_64.qcow2
TID=701
TNAME=Rocky-9-Template
CUSER=rocky

AlmaLinux 8云镜像:

imageURL=https://repo.almalinux.org/almalinux/8/cloud/x86_64/images/AlmaLinux-8-GenericCloud-latest.x86_64.qcow2
wget $imageURL
IMAGE=AlmaLinux-8-GenericCloud-latest.x86_64.qcow2
TID=702
TNAME=AlmaLinux-8-Template
CUSER=alma

AlmaLinux 9云镜像:

imageURL=https://repo.almalinux.org/almalinux/9/cloud/x86_64/images/AlmaLinux-9-GenericCloud-latest.x86_64.qcow2
wget $imageURL
IMAGE=AlmaLinux-9-GenericCloud-latest.x86_64.qcow2
TID=703
TNAME=AlmaLinux-9-Template
CUSER=alma

CentOS 8 Stream云镜像

imageURL=https://cloud.centos.org/centos/8-stream/x86_64/images/CentOS-Stream-GenericCloud-8-latest.x86_64.qcow2
wget $imageURL
IMAGE=CentOS-Stream-GenericCloud-8-latest.x86_64.qcow2
TID=704
TNAME=CentOS-8-Stream-Template
CUSER=centos

CentOS 9 Stream云镜像

imageURL=https://cloud.centos.org/centos/9-stream/x86_64/images/CentOS-Stream-GenericCloud-9-latest.x86_64.qcow2
wget $imageURL
IMAGE=CentOS-Stream-GenericCloud-9-latest.x86_64.qcow2
TID=705
TNAME=CentOS-9-Stream-Template
CUSER=centos

2.定义模板变量

这里我们定义创建模板所需的以下变量:

SIZE=50G #Default root disk size
BRIDGE=vmbr1 #Default network bridge name
RAM=2048 #Default VM Ram size
CORES=1 #Default CPU cores
STORAGE=local-zfs #Storage pool name to use, check with pvesm status
CPASS="Str0nGUserPasswr=ord" #CloudInit User password to be injected

要查看可用的网桥,请使用:

# brctl show
bridge name	bridge id		STP enabled	interfaces
vmbr0		8000.5ced8cedb886	no		eno1
vmbr1		8000.5ced8cedb889	no		eno4

如果您需要有关在 PVE 上创建 Linux 网桥的指导,请查看:使用 NAT 在 Proxmox VE 上创建专用网桥

可以使用以下命令列出可用的存储池:

# pvesm status
Name             Type     Status           Total            Used       Available        %
local             dir     active      1884995968        10524288      1874471680    0.56%
local-zfs     zfspool     active      1875328912          857128      1874471784    0.05%

3.使用virt-customize自定义镜像

virt-customize 命令由 libguestfs-tools 软件包提供。让我们安装它。

sudo apt update && sudo apt install libguestfs-tools

安装后我们可以确认 virt-customize 是否正常工作。

# virt-customize --version
virt-customize 1.48.2

使用virt-customize在基础云镜像中安装基本密钥包。

# virt-customize -a $IMAGE --install vim,bash-completion,wget,curl,unzip,qemu-guest-agent
[   0.0] Examining the guest ...
[   8.2] Setting a random seed
[   8.3] Setting the machine ID in /etc/machine-id
[   8.3] Installing packages: vim bash-completion wget curl unzip qemu-guest-agent
[ 163.2] Finishing off

接下来我们启用 qemu-guest-agent 服务以在系统启动时启动。

# virt-customize -a $IMAGE --run-command 'systemctl enable qemu-guest-agent'
[   0.0] Examining the guest ...
[   7.6] Setting a random seed
[   7.6] Running: systemctl enable qemu-guest-agent
[   8.2] Finishing off

您还可以设置默认时区

# virt-customize -a $IMAGE --timezone "Africa/Nairobi"
[   0.0] Examining the guest ...
[   7.5] Setting a random seed
[   7.6] Setting the timezone: Africa/Nairobi
[   8.0] Finishing off

可以启用 SSH 密码验证。不过不建议这样做。如果您不使用 SSH 密钥,则这是必要的。

# virt-customize -a $IMAGE --run-command 'sed -i "s/.*PasswordAuthentication.*/PasswordAuthentication yes/g" /etc/ssh/sshd_config'
[   0.0] Examining the guest ...
[   7.4] Setting a random seed
[   7.5] Running: sed -i "s/.*PasswordAuthentication.*/PasswordAuthentication yes/g" /etc/ssh/sshd_config
[   8.1] Finishing off

禁用 root 用户的 SSL 登录。

# virt-customize -a $IMAGE --run-command 'sed -i "s/.*PermitRootLogin.*/PermitRootLogin no/g"  /etc/ssh/sshd_config'
[   0.0] Examining the guest ...
[   7.2] Setting a random seed
[   7.3] Running: sed -i "s/.*PermitRootLogin.*/PermitRootLogin no/g"  /etc/ssh/sshd_config
[   7.7] Finishing off

重新标记 SELinux

# virt-customize -a $IMAGE --selinux-relabel
[   0.0] Examining the guest ...
[   7.4] Setting a random seed
[   7.4] SELinux relabelling
[   7.9] Finishing off

要完全禁用 SELinux,请运行:

# virt-customize -a $IMAGE --run-command ' sed -i "s/^SELINUX=.*/SELINUX=disabled/g" /etc/selinux/config'
[   0.0] Examining the guest ...
[   4.7] Setting a random seed
guest
[   4.8] Running:  sed -i "s/^SELINUX=.*/SELINUX=disabled/g" /etc/selinux/config
[   4.9] Finishing off

4. 在Proxmox VE上创建操作系统模板

将基础映像的大小调整为之前 SIZE 变量中定义的所需操作系统 / 磁盘大小。

# qemu-img resize $IMAGE $SIZE
Image resized.

现在创建带有内存、CPU 和网桥的操作系统模板骨架。

qm create $TID --memory $RAM --cores $CORES  --net0 virtio,bridge=$BRIDGE --scsihw virtio-scsi-pci --kvm 1 --numa 1

将我们自定义的基础镜像导入到实际的虚拟机存储磁盘中。

# qm importdisk $TID $IMAGE $STORAGE
importing disk 'Rocky-8-GenericCloud.latest.x86_64.qcow2' to VM 700 ...
transferred 0.0 B of 50.0 GiB (0.00%)
transferred 542.7 MiB of 50.0 GiB (1.06%)
transferred 1.0 GiB of 50.0 GiB (2.07%)
transferred 1.5 GiB of 50.0 GiB (3.09%)
transferred 2.0 GiB of 50.0 GiB (4.09%)
transferred 2.5 GiB of 50.0 GiB (5.10%)
transferred 3.1 GiB of 50.0 GiB (6.12%)
transferred 3.6 GiB of 50.0 GiB (7.12%)
transferred 4.1 GiB of 50.0 GiB (8.16%)
transferred 4.6 GiB of 50.0 GiB (9.19%)
...
transferred 49.4 GiB of 50.0 GiB (98.80%)
transferred 49.9 GiB of 50.0 GiB (99.80%)
transferred 50.0 GiB of 50.0 GiB (100.00%)
transferred 50.0 GiB of 50.0 GiB (100.00%)
Successfully imported disk as 'unused0:local-zfs:vm-700-disk-0'

将磁盘附加到 VM。导入后不附加。

qm set $TID --scsihw virtio-scsi-pci --virtio0 $STORAGE:$TID/vm-$TID-disk-0.raw

如果使用LVMZFS池,则使用:

# qm set $TID --scsihw virtio-scsi-pci --virtio0 $STORAGE:vm-$TID-disk-0
update VM 700: -scsihw virtio-scsi-pci -virtio0 local-zfs:vm-700-disk-0

为虚拟机启用串行控制台。

# qm set $TID --serial0 socket --vga serial0
update VM 700: -serial0 socket -vga serial0

启用 QEMU 访客代理。

# qm set $TID --agent 1
update VM 700: -agent 1

更改启动顺序以使用 SCSI 或 VirtIO 块设备启动。

# qm set $TID --boot c --bootdisk virtio0
update VM 700: -boot c -bootdisk virtio0

5.附加云初始化镜像并创建模板

接下来,我们通过运行以下命令来附加云初始化映像。

# qm set $TID --ide2 $STORAGE:cloudinit
update VM 700: -ide2 local-zfs:cloudinit
ide2: successfully created disk 'local-zfs:vm-700-cloudinit,media=cdrom'
generating cloud-init ISO

为指定的默认用户注入 SSH 密钥。 SSH 公钥的路径可以相应更改。

# qm set $TID --sshkey ~/.ssh/id_rsa.pub
update VM 700: -sshkeys ssh-rsaxxxyyyzzz

还将默认网络 IP 分配设置为 DHCP,并设置 Cloud Init 用户密码。

# qm set $TID --ipconfig0 ip=dhcp --cipassword="$CPASS" --ciuser=$CUSER
update VM 700: -cipassword <hidden> -ciuser rocky -ipconfig0 ip=dhcp

为虚拟机指定名称。

# qm set $TID --name $TNAME
update VM 700: -name Rocky-8-Template

最后将虚拟机转换为模板。

qm template $TID

6. 从模板创建虚拟机

列出可用模板

# qm list
      VMID NAME                 STATUS     MEM(MB)    BOOTDISK(GB) PID
       700 Rocky-8-Template     stopped    2048              50.00 0
       780 Debian-12-Template   stopped    2048              50.00 0

定义用于创建 VM 的变量

TID=700 # ID of the template to be used.
VMID=$(pvesh get /cluster/nextid) #ID of the VM to be created. This is auto-assigned by Proxmox VE
VMNAME=DirectAdmin # Name of the VM
RAM=4096 # VM RAM size in MB
CORES=2 # CPU cores for the VM

接下来定义网络配置参数

BRIDGE=vmbr1 # Name of the bridge attached to the VM
IP=192.168.20.11/24 # IP address (If using static IP addressing)
GW=192.168.20.1 # Default gateway IP Address
DNS=8.8.8.8 # Default DNS server
SDOMAINS="example.com" # Search domains, separate with , for multiple.

我们通过克隆模板来创建虚拟机实例。为此有两个标准选项。

  • 链接克隆 – 由此创建的虚拟机需要较少的磁盘空间,但如果不访问基础虚拟机模板就无法运行
  • 完整克隆 – 从完整克隆创建的虚拟机是完整副本,完全独立于原始虚拟机模板,但需要与原始虚拟机相同的磁盘空间。

完整克隆示例。

# qm clone $TID $VMID --full --name $VMNAME --format qcow2
...
transferred 44.2 GiB of 50.0 GiB (88.34%)
transferred 44.7 GiB of 50.0 GiB (89.35%)
transferred 45.2 GiB of 50.0 GiB (90.35%)
transferred 45.7 GiB of 50.0 GiB (91.36%)
transferred 46.2 GiB of 50.0 GiB (92.36%)
transferred 46.7 GiB of 50.0 GiB (93.36%)
transferred 47.2 GiB of 50.0 GiB (94.37%)
transferred 47.7 GiB of 50.0 GiB (95.37%)
transferred 48.2 GiB of 50.0 GiB (96.37%)
transferred 48.7 GiB of 50.0 GiB (97.38%)
transferred 49.2 GiB of 50.0 GiB (98.38%)
transferred 49.7 GiB of 50.0 GiB (99.39%)
transferred 50.0 GiB of 50.0 GiB (100.00%)
transferred 50.0 GiB of 50.0 GiB (100.00%)

链接克隆示例

qm clone $TID $VMID --name $VMNAME

调整CPU核心和内存

# qm set $VMID --vcpus $CORES --cores $CORES
update VM 100: -vcpus 1

# qm set $VMID --memory $RAM
update VM 100: -memory 4096

更新 IP、DNS 和搜索域

# qm set $VMID --ipconfig0 ip=$IP,gw=$GW
update VM 100: -ipconfig0 ip=192.168.20.11/29,gw=192.168.20.1

# qm set $VMID --searchdomain $SDOMAINS
update VM 100: -searchdomain example.net

# qm set $VMID --nameserver $DNS
update VM 100: -nameserver 8.8.8.8

配置用于身份验证的 SSH 公钥

qm set $VMID --sshkey $SSHKEY

将VM设置为启动时设置

qm set $VMID --onboot 1

启动虚拟机实例

qm start $VMID

结论

在本文中,我们已经能够在 Proxmox 虚拟环境中创建 Rocky/AlmaLinux/CentOS 8|9 的操作系统模板。一旦我们通过克隆模板创建了虚拟机,我们就可以按照 CLI 或使用 Proxmox Web 控制台所示的方式开始。要访问实例,请使用远程控制台(例如 SSH、VNC 或 Web 控制台)并管理您的操作系统。我们希望这篇文章能够提供有用的信息。


更新于:4个月前
赞一波!2

文章评论

评论问答