[ OK ]Çekirdek başlatılıyor...
~/im/blog
Benimle Çalışın

Konuşalım

Birlikte çalışmakla ilgileniyor ya da bir sorunuz mu var? Yeni projeleri konuşmaya her zaman açığım.

İletişime geçin

Bağlantı Kurun

Beni sosyal medyada ve profesyonel ağlarda bulabilirsiniz.

Gizlilik Politikası (KVKK)Kullanım Koşulları
© 2026 Irfan MiralGeliştirici:irfanMiral.com
AnasayfaHakkımda/ÖzgeçmişBlogİletişim
2026-04-16• 5 dakika okuma

Bir KVM VM'i CLI'dan Ayağa Kaldırmak

Cloud KVM Virtualization Linux Yönetimi

Herhangi birinin oluşturduğu ilk KVM VM'i genelde bir GUI üzerinden olur, virt-manager, Cockpit, ya da bir Proxmox web interface'i, disk size, network, ve ISO seçiminde tıklayarak ilerlersiniz. Seçeneklerin ne anlama geldiğini öğrenmek için bu iyi bir yol. Ama düzenli olarak VM oluşturmaya başladığınızda, GUI yavaş kısım haline geliyor: her seferinde aynı şekilde gerçekleşmesi gereken bir tıklama dizisi, ve "her seferinde aynı şekilde" tam olarak bir command line'ın iyi olduğu şey.

İki parça: bir base image ve cloud-init

Bir installer ISO'su boot edip bir OS install'unda tıklayarak ilerlemek yerine, cloud provider'ların kullandığı aynı minimal, pre-installed image'lardan, bir cloud image'dan başlıyorum, ve first-boot configuration'ı cloud-init'e bırakıyorum:

# Download a cloud image once
wget https://cloud-images.ubuntu.com/releases/24.04/release/ubuntu-24.04-server-cloudimg-amd64.img \
  -O /var/lib/libvirt/images/ubuntu-24.04-base.img

Cloud-init configuration'ı iki küçük YAML dosyası. user-data, user'ı, SSH key'i, ve herhangi bir first-boot komutunu set up ediyor:

# user-data
#cloud-config
hostname: app-01
users:
  - name: deploy
    sudo: ALL=(ALL) NOPASSWD:ALL
    groups: sudo
    shell: /bin/bash
    ssh_authorized_keys:
      - ssh-ed25519 AAAA... your-key-here
package_update: true
packages:
  - curl
  - git

meta-data'nın tek ihtiyacı bir instance ID ve hostname:

# meta-data
instance-id: app-01
local-hostname: app-01

Bunlar, cloud-init'in first boot'ta okuduğu küçük bir ISO'ya paketleniyor:

genisoimage -output app-01-seed.iso -volid cidata -joliet -rock user-data meta-data

VM'i oluşturmak

Base image kopyalanmış ve seed ISO build edilmişken, virt-install VM'i tek bir komutla oluşturup başlatıyor:

cp /var/lib/libvirt/images/ubuntu-24.04-base.img /var/lib/libvirt/images/app-01.qcow2
qemu-img resize /var/lib/libvirt/images/app-01.qcow2 40G

virt-install \
  --name app-01 \
  --memory 4096 \
  --vcpus 2 \
  --disk /var/lib/libvirt/images/app-01.qcow2,format=qcow2,bus=virtio \
  --disk app-01-seed.iso,device=cdrom \
  --os-variant ubuntu24.04 \
  --network bridge=br0,model=virtio \
  --import \
  --noautoconsole

--import, virt-install'a bir installer çalıştırmak yerine mevcut disk image'ını direkt boot etmesini söylüyor, ve --noautoconsole, bir console penceresi açmak yerine kontrolü terminale geri veriyor. Bir iki dakika içinde, VM çalışıyor, cloud-init user-data'daki SSH key'le deploy user'ını oluşturmuş, ve:

ssh deploy@<vm-ip>

direkt çalışıyor, manuel OS install yok, bir wizard'da tıklama yok, sonradan SSH key eklemeyi hatırlama yok.

Tek seferlik VM'ler için bile buna neden değer

Belirgin fayda bunun script'lenebilir olması, bir shell function'a ya da bir Ansible task'ına sarın ve yeni bir VM, argüman olarak bir hostname alan tek bir komut haline geliyor. Ama gerçekten tek seferlik bir VM için bile, daha sessiz bir fayda var: tüm configuration, hostname, user, package'lar, SSH key, başka her şeyle aynı git repo'suna gidebilecek iki küçük text dosyasında oturuyor. Altı ay sonra, bu VM'i yeniden oluşturmanız gerekirse ya da sadece üzerine ne kurulduğunu hatırlamak isterseniz, cevap "tıklarken ne hatırlıyorsam" değil, otuz saniyede okuyabileceğiniz iki dosya.

ÖncekiProxmox Snapshot'ları Backup DeğildirSonraki AWS'in Yanında OVH ve Contabo'yu Hâlâ Neden Öneriyorum