Hướng dẫn xây dựng
Một máy vật lý chạy Proxmox VE làm hypervisor riêng, với ZFS mirror trên các ổ NVMe, bridge cấp địa chỉ thật cho guest và bật - xác minh ảo hóa lồng nhau — nghĩa là guest trên máy này có thể tự chạy guest.
Ảo hóa lồng nhau là lý do thực hiện trên máy vật lý thay vì trên máy ảo. Bạn không thể lồng bên trong hypervisor của người khác với kết quả dự đoán được, và trên BM-E không có hypervisor của chúng tôi cản đường: bạn có IPMI, nút nguồn và bo mạch. Chạy gì trên đó là quyết định của bạn.
Trước khi bắt đầu
- Một BM-E: ba mươi hai lõi Zen 4, 256 GB ECC, bốn ổ NVMe và tám địa chỉ IPv4. IPMI có thể truy cập qua VPN, mà bộ phận hỗ trợ thiết lập khi bàn giao máy.
- Proxmox VE 8 chọn khi đặt hàng hoặc ISO tùy chỉnh tải lên qua bảng điều khiển. Cả hai đều đưa đến cùng trình cài đặt.
- Nửa giờ khi không ai cần máy, vì bước một khởi động lại nhiều lần.
1. Cài đặt
Kết nối đến console qua VPN quản lý, gắn ISO và khởi động. Tại màn hình chọn đĩa, chọn tất cả bốn ổ NVMe, chọn zfs (RAID10) và mở tùy chọn nâng cao:
ashifttại 12, giá trị đúng cho sector 4 KB và không thể thay đổi sau này nếu không xây dựng lại pool.compresstại lz4. Tốn một phần nhỏ của một lõi và thường trả lại một phần ba dung lượng.hdsizegiảm để dành cho lưu trữ guest, trừ khi bạn muốn pool gốc sở hữu toàn bộ.
Đặt địa chỉ quản lý và gateway từ thông tin bảng điều khiển, dùng tên đầy đủ của máy làm hostname. Hai lần khởi động lại sau đó bạn có màn hình đăng nhập và giao diện web trên cổng 8006.
2. Kho lưu trữ và gói
Kho enterprise sẽ báo lỗi nếu không có đăng ký và làm lộn xộn mỗi lần apt update cho đến khi bạn xử lý:
rm -f /etc/apt/sources.list.d/pve-enterprise.sources
echo "deb http://download.proxmox.com/debian/pve bookworm pve-no-subscription" > /etc/apt/sources.list.d/pve-community.list
apt update && apt full-upgrade -y
apt install -y ifupdown2 chrony zfsutils-linux
reboot3. Bộ nhớ cho ZFS
ARC nếu không sẽ tăng lên một nửa RAM, và trên máy có công việc chạy guest thì bộ nhớ đó nên dùng tốt hơn:
echo "options zfs zfs_arc_max=34359738368" > /etc/modprobe.d/zfs.conf
update-initramfs -u -k allBa mươi hai gigabyte ARC trên máy 256 GB để đủ cache mà không bỏ đói guest. Khởi động lại để áp dụng, hoặc đặt trực tiếp bằng echo vào /sys/module/zfs/parameters/zfs_arc_max nếu không thể.
4. Mạng
Tám địa chỉ không nhiều, nên guest nằm trên bridge riêng và chỉ những guest cần địa chỉ công khai mới được route. Sửa /etc/network/interfaces:
auto lo
iface lo inet loopback
auto enp1s0f0
iface enp1s0f0 inet static
address <public address>/24
gateway <gateway>
auto vmbr0
iface vmbr0 inet static
address 10.20.0.1/24
bridge-ports none
bridge-stp off
bridge-fd 0
post-up iptables -t nat -A POSTROUTING -s 10.20.0.0/24 -o enp1s0f0 -j MASQUERADE
post-down iptables -t nat -D POSTROUTING -s 10.20.0.0/24 -o enp1s0f0 -j MASQUERADE
iface vmbr0 inet6 static
address 2001:db8:1a2b:20::1/64IPv6 không cần NAT, vì /64 được route tới máy thực sự được route: gán địa chỉ từ đó cho guest trên bridge và chúng ra internet trực tiếp. Sự bất đối xứng giữa hai họ địa chỉ không thanh lịch, nhưng đó là hình dạng trung thực của không gian địa chỉ chúng ta đang sống.
sysctl -w net.ipv4.ip_forward=1
echo "net.ipv4.ip_forward = 1" > /etc/sysctl.d/80-pve.conf
echo "net.ipv6.conf.all.forwarding = 1" >> /etc/sysctl.d/80-pve.conf
ifreload -a5. Ảo hóa lồng nhau
cat /sys/module/kvm_amd/parameters/nestedTrên kernel hiện tại, lệnh này in ra 1. Nếu nó in 0:
echo "options kvm-amd nested=1" > /etc/modprobe.d/kvm-amd.conf
update-initramfs -u && rebootNesting cũng yêu cầu guest thấy CPU có tính năng, nghĩa là loại bộ xử lý phải là host. Bất kỳ thứ gì khác hiện mô hình CPU tổng hợp với phần mở rộng ảo hóa bị che, và hypervisor bên trong từ chối khởi động với lỗi không đề cập đến vấn đề này.
6. Một guest
cd /var/lib/vz/template/iso
wget https://cloud.debian.org/images/cloud/trixie/latest/debian-13-genericcloud-amd64.qcow2
qm create 100 --name inner --memory 16384 --cores 8 --cpu host \
--net0 virtio,bridge=vmbr0 --scsihw virtio-scsi-single --ostype l26 \
--agent enabled=1 --machine q35 --bios ovmf
qm set 100 --efidisk0 local-zfs:1
qm importdisk 100 debian-13-genericcloud-amd64.qcow2 local-zfs
qm set 100 --scsi0 local-zfs:vm-100-disk-1,discard=on,ssd=1
qm set 100 --boot order=scsi0
qm set 100 --ipconfig0 ip=10.20.0.100/24,gw=10.20.0.1
qm set 100 --sshkeys /root/.ssh/authorized_keys
qm set 100 --ciuser admin
qm start 100discard=on với ssd=1 nghĩa là xóa bên trong guest được trả lại cho pool thay vì tích lũy thành không gian bạn không theo dõi.
7. Tường lửa
Giao diện web trên cổng 8006 không nên truy cập công khai. Giới hạn ở mức trung tâm dữ liệu với địa chỉ bạn quản trị từ đó — endpoint tunnel từ hướng dẫn WireGuard là ứng viên rõ ràng:
cat > /etc/pve/firewall/cluster.fw <<EOF
[OPTIONS]
enable: 1
policy_in: DROP
[RULES]
IN SSH(ACCEPT) -source 10.7.0.0/24
IN ACCEPT -source 10.7.0.0/24 -dport 8006 -proto tcp
IN ACCEPT -p icmp
EOF
systemctl restart pve-firewallXác minh
Host trước:
pveversion -v | head -3
zpool status rpool
zpool list -o name,size,alloc,free,frag,cap
arc_summary | head -12Pool báo ONLINE với hai cặp mirror, và ARC target ở mức ba mươi hai gigabyte bạn đặt thay vì nửa máy.
Bây giờ là mục đích thực sự của hướng dẫn. Đăng nhập vào guest và kiểm tra bộ xử lý:
ssh [email protected]
lscpu | grep -E "Model name|Virtuali"
grep -c svm /proc/cpuinfoTên mô hình phải là EPYC thật và dòng ảo hóa phải báo AMD-V. Số không từ lệnh thứ ba nghĩa là loại bộ xử lý không phải host, và mọi thứ bên dưới sẽ thất bại.
Sau đó chạy một máy bên trong máy:
apt install -y qemu-system-x86 qemu-utils cpu-checker
kvm-ok
wget https://dl-cdn.alpinelinux.org/alpine/v3.22/releases/x86_64/alpine-virt-3.22.0-x86_64.iso
qemu-system-x86_64 -enable-kvm -m 2048 -cdrom alpine-virt-3.22.0-x86_64.iso -nographickvm-ok in rằng có thể dùng tăng tốc, tiếp theo là khởi động Alpine đến màn hình đăng nhập trong vài giây thay vì chậm, là xác minh. Không có nesting, lệnh đó hoặc từ chối hoặc mô phỏng bằng phần mềm với tốc độ khoảng một phần hai mươi, điều không thể nhầm lẫn.
Cuối cùng, xác nhận giao diện đóng từ bên ngoài:
curl -m5 -k https://<public address>:8006/ ; echo "exit $?"Kết nối timeout là câu trả lời đúng.
Sau đó
Snapshot trên ZFS miễn phí cho đến khi chúng phân kỳ, nên lịch zfs-auto-snapshot hàng đêm gần như không tốn chi phí và đã cứu nhiều máy hơn bất kỳ chính sách sao lưu nào. Xây dựng lại trên máy vật lý trong ngày, nhưng xây dựng lại trả lại máy trống, khác với việc trả lại máy của bạn.