On iki kurulum

Bare metal üzerinde Proxmox, çalışan iç içe sanal makinelerle

Yansıtmalı NVMe üzerinde Proxmox VE çalıştıran tek kiracılı bir EPYC makinesi, misafirler için yönlendirilmiş bir köprü ve bir misafirin içinden kanıtlanmış iç içe sanallaştırma.

Bu kılavuz ne inşa eder

Kendi hipervizörü olarak Proxmox VE çalıştıran bir bare metal makine, NVMe sürücüler genelinde bir ZFS aynası, konuklara gerçek adresler veren bir köprü ve etkinleştirilip doğrulanmış iç içe sanallaştırma — yani bu makinedeki bir konuk, kendi konuklarını çalıştırabilir.

İç içe yerleştirme, bunu sanal bir örnek üzerinde değil de metal üzerinde yapmanın nedenidir. Başka birinin hipervizörünün içinde öngörülebilir sonuçlarla iç içe yerleşemezsiniz ve bir BM-E üzerinde bizim hipervizörümüz yok: IPMI, bir güç düğmesi ve anakart elde edersiniz. Üzerinde çalışan şey sizin kararınızdır.

Başlamadan önce

  • Bir BM-E: otuz iki Zen 4 çekirdeği, 256 GB ECC, dört NVMe sürücü ve sekiz IPv4 adresi. IPMI’ye bir VPN üzerinden erişilebilir; makine teslim edildiğinde destek bunu kurar.
  • Sipariş sırasında Proxmox VE 8 seçili veya panelden yüklenen özel bir ISO. Her iki yol da aynı yükleyiciye ulaşır.
  • Makineye kimsenin ihtiyaç duymadığı yarım saat, çünkü ilk adım onu birkaç kez yeniden başlatır.

1. Kurulum

Yönetim VPN’i üzerinden konsola bağlanın, ISO’yu bağlayın ve önyükleyin. Disk seçim ekranında dört NVMe aygıtının tümünü seçin, zfs (RAID10) öğesini seçin ve gelişmiş seçenekleri açın:

  • 12’de ashift, dört kilobaytlık sektörler için doğru değerdir ve havuz yeniden oluşturulmadan sonradan değiştirilemez.
  • compress lz4 olarak. Bir çekirdeğin bir kısmına mal olur ve tipik olarak alanın üçte birini geri kazandırır.
  • Konuk depolaması için gerisini bırakmak üzere hdsize azaltın, kök havuzun hepsine sahip olmasını istemiyorsanız.

Panel ayrıntılarından yönetim adresini ve ağ geçidini ayarlayın ve makinenin tam nitelikli adını ana bilgisayar adı olarak kullanın. İki yeniden başlatmanın ardından bir oturum açma istemi ve 8006 bağlantı noktasında bir web arayüzü elde edersiniz.

2. Depolar ve paketler

Kurumsal depo, abonelik olmadan başarısız olur ve siz onunla ilgilenene kadar her apt update’yı karmaşıklaştırır:

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. ZFS için bellek

Aksi takdirde ARC RAM’inizin yarısına kadar büyür ve tüm işi konukları çalıştırmak olan bir makinede bu belleğin daha iyi bir kullanımı vardır:

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

256 GB’lık bir makinede otuz iki gigabaytlık ARC, konukları aç bırakmadan önbellekleme için bolca yer bırakır. Uygulanması için yeniden başlatın veya yapamıyorsanız echo ile /sys/module/zfs/parameters/zfs_arc_max içine canlı olarak ayarlayın.

4. Ağ oluşturma

Sekiz adres çok fazla değil, bu nedenle konuklar özel bir köprüde oturur ve yalnızca genel adrese ihtiyaç duyanlar, kendilerine yönlendirilen bir adres alır. /etc/network/interfaces düzenleyin:

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, adres çevirisi gerektirmez, çünkü makineye yönlendirilen /64 gerçekten yönlendirilir: köprüdeki konuklara adresler atayın ve doğrudan internete ulaşırlar. İki aile arasındaki bu asimetri zarif değil, ancak içinde yaşadığımız adres alanının dürüst şeklidir.

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. İç içe sanallaştırma

cat /sys/module/kvm_amd/parameters/nested

Geçerli çekirdeklerde bu zaten 1 yazdırır. 0 yazdırırsa:

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

İç içe yerleştirme ayrıca konuğun özelliğe sahip olduğunu kabul eden bir CPU görmesini gerektirir; bu, işlemci türünün host olması gerektiği anlamına gelir. Başka herhangi bir şey, sanallaştırma uzantıları maskelenmiş sentetik bir CPU modeli sunar ve iç hipervizör, bunların hiçbirinden bahsetmeyen bir hatayla başlamayı reddeder.

6. Bir konuk

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 ile ssd=1, konuk içindeki silmelerin, izini kaybettiğiniz alan olarak birikmek yerine havuza geri döndüğü anlamına gelir.

7. Güvenlik duvarı

8006 bağlantı noktasındaki web arayüzünün herkese açık olması için hiçbir neden yoktur. Veri merkezi düzeyinde, yönettiğiniz adrese kısıtlayın — WireGuard kılavuzundan tünel uç noktası bariz adaydır:

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

Doğrulayın

Önce ana bilgisayar:

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

Havuz, ONLINE’i iki aynalı çiftle bildirir ve ARC hedefi, makinenin yarısı yerine ayarladığınız otuz iki gigabaytta durur.

Şimdi bu yapının asıl amacı. Konuğa giriş yapın ve kendisine verilen işlemciyi kontrol edin:

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

Model adı gerçek EPYC parçası olmalı ve sanallaştırma satırı AMD-V bildirmelidir. Üçüncü komuttan sıfır, işlemci türünün host olmadığı anlamına gelir ve aşağıdaki her şey başarısız olur.

Ardından makinenin içinde bir makine çalıştırın:

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 hızlandırmanın kullanılabileceğini yazdırıyor ve ardından birkaç saniye içinde bir oturum açma istemine ulaşan ve sürünmeyen bir Alpine önyüklemesi doğrulamadır. İç içe yerleştirme olmadan, aynı komut ya doğrudan reddeder ya da yazılımda yaklaşık yirmide bir hızda öykünür, bu da yanlış anlaşılmaz.

Son olarak, arayüzün dışarıdan kapalı olduğunu doğrulayın:

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

Bağlantı zaman aşımı doğru cevaptır.

Sonrasında

ZFS’deki anlık görüntüler, ayrışana kadar ücretsizdir; bu nedenle gece yapılan bir zfs-auto-snapshot zamanlaması neredeyse hiçbir maliyete sahip değildir ve herhangi bir yedekleme politikasından daha fazla makine kurtarmıştır. Metalde yeniden oluşturma aynı gündür, ancak yeniden oluşturma size boş bir makine döndürür; bu, makinenizi geri döndürmekten farklı bir şeydir.

Hazır olduğunda

Bir şehir seç. Bir boyut seç. Kripto ile öde.

Kim olduğunuzla ilgili formlar yok, onay için insan bekleme yok, doğrulama için telefon görüşmesi yok. Ödeme onaylanır ve kimlik bilgileri gelen kutunuza düşer.