Dua belas build

Proxmox di bare metal, dengan mesin virtual bersarang yang berfungsi

Mesin EPYC penyewa tunggal yang menjalankan Proxmox VE di NVMe mirror, bridge ter-rutekan untuk guest, dan virtualisasi bersarang yang terbukti dari dalam guest.

Yang Dibangun

Sebuah mesin bare metal yang menjalankan Proxmox VE sebagai hypervisor-nya sendiri, dengan mirror ZFS di kedua drive NVMe, sebuah bridge yang memberikan alamat nyata kepada tamu, dan virtualisasi bersarang yang diaktifkan dan diverifikasi — artinya tamu di mesin ini dapat menjalankan tamu sendiri.

Nesting adalah alasan untuk melakukan ini di metal daripada di instance virtual. Anda tidak dapat melakukan nesting di dalam hypervisor orang lain dengan hasil yang dapat diprediksi, dan di BM-E tidak ada hypervisor kami yang menghalangi: Anda mendapatkan IPMI, tombol power, dan board. Apa yang berjalan di atasnya adalah keputusan Anda.

Sebelum Memulai

  • BM-E: tiga puluh dua core Zen 4, 256 GB ECC, empat drive NVMe, dan delapan alamat IPv4. IPMI dapat diakses melalui VPN, yang disiapkan oleh dukungan saat mesin diserahkan.
  • Proxmox VE 8 dipilih saat pemesanan, atau ISO khusus yang diunggah melalui panel. Kedua jalur berakhir di installer yang sama.
  • Setengah jam ketika tidak ada yang membutuhkan mesin, karena langkah pertama me-reboot beberapa kali.

1. Instalasi

Hubungkan ke konsol melalui VPN manajemen, mount ISO dan boot. Di layar pemilihan disk, pilih keempat perangkat NVMe, pilih zfs (RAID10), dan buka opsi lanjutan:

  • ashift pada 12, yang merupakan nilai yang benar untuk sektor 4-kilobyte dan tidak dapat diubah setelahnya tanpa membangun ulang pool.
  • compress pada lz4. Ini menghabiskan sebagian kecil core dan biasanya mengembalikan sepertiga ruang.
  • hdsize dikurangi untuk menyisakan ruang untuk penyimpanan tamu, kecuali Anda ingin pool root memiliki semuanya.

Atur alamat manajemen dan gateway dari detail panel, dan gunakan nama FQDN mesin sebagai hostname. Dua reboot kemudian Anda memiliki prompt login dan antarmuka web di port 8006.

2. Repositori dan Paket

Repositori enterprise akan gagal tanpa langganan dan memenuhi setiap apt update sampai Anda mengatasinya:

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
reboot

3. Memori untuk ZFS

ARC akan tumbuh hingga setengah RAM Anda, dan pada mesin yang tugasnya menjalankan tamu, memori itu memiliki penggunaan yang lebih baik:

echo "options zfs zfs_arc_max=34359738368" > /etc/modprobe.d/zfs.conf
update-initramfs -u -k all

Tiga puluh dua gigabyte ARC pada mesin 256 GB menyisakan banyak untuk caching tanpa membuat tamu kelaparan. Reboot agar berlaku, atau atur langsung dengan echo ke /sys/module/zfs/parameters/zfs_arc_max jika tidak bisa.

4. Jaringan

Delapan alamat tidak banyak, jadi tamu berada di bridge pribadi dan hanya yang membutuhkan alamat publik yang mendapatkannya dirutekan. Edit /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/64

IPv6 tidak memerlukan translasi alamat, karena /64 yang dirutekan ke mesin memang dirutekan: tetapkan alamat darinya ke tamu di bridge dan mereka mencapai internet secara langsung. Ketidaksimetrisan antara dua keluarga ini tidak elegan, tetapi itu adalah bentuk jujur dari ruang alamat yang kita tinggali.

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 -a

5. Virtualisasi Bersarang

cat /sys/module/kvm_amd/parameters/nested

Pada kernel saat ini ini sudah mencetak 1. Jika mencetak 0:

echo "options kvm-amd nested=1" > /etc/modprobe.d/kvm-amd.conf
update-initramfs -u && reboot

Nesting juga mengharuskan tamu melihat CPU yang mengakui memiliki fitur tersebut, yang berarti tipe prosesor harus host. Selain itu akan menyajikan model CPU sintetis dengan ekstensi virtualisasi disembunyikan, dan hypervisor dalam menolak untuk mulai dengan kesalahan yang tidak menyebutkan ini sama sekali.

6. Sebuah Tamu

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 100

discard=on dengan ssd=1 berarti penghapusan di dalam tamu dikembalikan ke pool daripada menumpuk sebagai ruang yang hilang.

7. Firewall

Antarmuka web di port 8006 tidak seharusnya dapat diakses publik. Batasi di tingkat pusat data ke alamat apa pun yang Anda kelola — endpoint tunnel dari panduan WireGuard adalah kandidat yang jelas:

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-firewall

Verifikasi

Host dulu:

pveversion -v | head -3
zpool status rpool
zpool list -o name,size,alloc,free,frag,cap
arc_summary | head -12

Pool melaporkan ONLINE dengan dua pasangan mirror, dan target ARC berada pada tiga puluh dua gigabyte yang Anda atur, bukan pada setengah mesin.

Sekarang inti dari pembangunan ini. Masuk ke tamu dan periksa prosesor yang diberikan:

ssh [email protected]
lscpu | grep -E "Model name|Virtuali"
grep -c svm /proc/cpuinfo

Nama model harus EPYC asli, dan baris virtualisasi harus melaporkan AMD-V. Angka nol dari perintah ketiga berarti tipe prosesor bukan host, dan semua yang di bawah akan gagal.

Lalu jalankan mesin di dalam mesin:

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 -nographic

kvm-ok mencetak bahwa akselerasi dapat digunakan, diikuti oleh boot Alpine yang mencapai prompt login dalam beberapa detik daripada merangkak, adalah verifikasi. Tanpa nesting, perintah yang sama menolak secara langsung atau mengemulasi dalam perangkat lunak dengan kecepatan sekitar seperdua puluh dari kecepatan asli, yang tidak salah lagi.

Terakhir, konfirmasi bahwa antarmuka tertutup dari luar:

curl -m5 -k https://<public address>:8006/ ; echo "exit $?"

Timeout koneksi adalah jawaban yang benar.

Setelahnya

Snapshot di ZFS gratis sampai mereka berbeda, jadi jadwal zfs-auto-snapshot malam hampir tidak ada biaya dan telah menyelamatkan lebih banyak mesin daripada kebijakan backup mana pun. Rebuild di metal dilakukan pada hari yang sama, tetapi rebuild mengembalikan mesin kosong, yang merupakan hal yang berbeda dari mengembalikan mesin Anda.

Siap saat Anda siap

Pilih kota. Pilih ukuran. Bayar dengan koin.

Tanpa formulir tentang siapa Anda, tanpa menunggu manusia untuk menyetujui, tanpa panggilan telepon untuk memverifikasi apa pun. Invoice dibersihkan dan kredensial masuk ke kotak masuk Anda.