Geçen hafta yeni bir CloudSpark müşterisinin sistem mühendisiyle ilk VM’lerini birlikte ayağa kaldırıyorduk. “Compute → Virtual machines → Create virtual machine” dedik, sihirbaz açıldı, ilk soruda bir dakika sustu: “Flavor olarak ne seçeyim?” Listeyi açtım — tiny, small, medium, large, xlarge. Tekrar sustu. “Bu VM tam olarak ne için?” diye sordum. “Aslında karar verilmedi” dedi. İşte VM wizard’ından önce sorulması gereken soru.
Bu yazıda VHI Self-Servis Portal’ın VM oluşturma sihirbazını adım adım gerçek müşteri senaryolarıyla anlatıyorum. Hangi flavor hangi iş yüküne, image seçimi, network bağlantısı, security group, SSH key, ve cloud-init ile ilk konfigürasyon. Yapılan en sık üç hatayı, KVKK uyumlu tag stratejisini ve hot-plug ile sonradan büyütme kararını da paylaşıyorum.
Wizard’a girmeden önce: üç kritik soru
“Create virtual machine” butonuna basmadan önce kendi ekibinize üç soruyu mutlaka sorun. Cevap verilmeden başlatılan VM’ler altı ay sonra ya boş duran kaynak ya da sürpriz fatura olarak geri döner.
- Bu VM hangi iş yükü için? Web app, veritabanı, batch job, dev/test ortamı? Cevap flavor’u belirler.
- Üretim mi, geçici mi? Cevap backup, monitoring ve security group politikasını belirler.
- Ömrü ne kadar? 2 saatlik test mi, 5 yıllık production mu? Cevap kullanılan image’ı (Ubuntu LTS vs Stream) ve disk boyutlandırmasını etkiler.
CloudSpark’ta VM’in “Description” alanına bu üç sorunun cevabını yazmayı zorunlu kılan müşterilerimiz var. Üç ay sonra başka bir mühendis, hatta gelecekteki kendiniz, “bu VM neden var” demediğinizde teşekkür edersiniz.
Adım 1: Name & Description
İsim politikası şart. CloudSpark’ta önerdiğimiz şablon:
{ortam}-{rol}-{numara}-{lokasyon}
Örnekler:
prd-web-01-ist # production web sunucu, İstanbul
stg-db-02-ist # staging veritabanı 2
dev-jenkins-01-ist # dev ortamında Jenkins
qa-test-runner-03 # QA test koşucu
Anti-örnek:
ahmet-test # 6 ay sonra "Ahmet kim?" sorusu
new-server # bir hafta sonra "yeni" değil artık
vm-001 # üç tane vm-001 olunca konuşulacak
Description alanına: amaç, sorumlu ekip, gerekirse Jira ticket numarası. Tag’ler ayrı ayrı eklenir; ona birazdan geleceğim.
Adım 2: Flavor seçimi
VHI’da flavor = vCPU + RAM + root disk kombinasyonu. CloudSpark Cloud’da kullandığımız flavor ailesi:
| Flavor | vCPU | RAM | Root disk | Tipik kullanım |
|---|---|---|---|---|
| tiny | 1 | 1 GiB | 20 GiB | Bastion host, küçük cron |
| small | 2 | 2 GiB | 20 GiB | Statik web, dev ortamı |
| medium | 2 | 4 GiB | 40 GiB | Standart web app |
| large | 4 | 8 GiB | 40 GiB | App server, küçük DB |
| xlarge | 8 | 16 GiB | 40 GiB | App + cache, orta DB |
| 2xlarge | 16 | 32 GiB | 40 GiB | Yoğun app, MySQL/Postgres |
| 4xlarge | 32 | 64 GiB | 40 GiB | Büyük DB, ELK node |
| memory-optimized | 16 | 128 GiB | 40 GiB | Redis, Memcached, in-memory DB |
| compute-optimized | 32 | 32 GiB | 40 GiB | CI build farm, video encoding |
| gpu-medium | 16 | 64 GiB | 40 GiB | AI/ML training, inference (1x GPU passthrough) |
Maks: 64 vCPU + 1 TiB RAM tek VM. Hot-plug desteği sayesinde küçükten başlayıp gerektikçe büyütmek en sağlıklısı. CloudSpark’ta default önerimiz: ilk VM için tahmin ettiğinizden bir adım küçük başlayın. Hot-plug ile 30 saniyede büyütürsünüz; küçültmek (downsize) ise reboot gerektirir.
Sahada üç klasik flavor hatası
- “Tedbiren” 4xlarge başlatmak. 32 vCPU çoğu app’in hayatı boyunca görmediği yüktür. Boşa para. Önce monitor edin, gerekirse hot-plug ile büyütün.
- RAM’i abartmak. Linux page cache RAM’i her zaman doldurur — bu RAM’in az olduğu anlamına gelmez.
free -houtput’unun “available” sütununa bakın. - Disk’i flavor’a bırakmak. Root disk 40 GiB yetmez genelde. VM oluştururken ayrı bir data volume ekleyin (NVMe SSD, istediğiniz boyutta),
/var/lib/postgresqlveya/data‘ya mount edin. Root disk sadece OS olsun.
Adım 3: Image (kaynak) seçimi
CloudSpark katalogunda hazır gelen image’lar:
- Ubuntu: 22.04 LTS (Jammy), 24.04 LTS (Noble) — production için tercih
- Debian: 12 (Bookworm) — minimal, stabil
- Rocky Linux / AlmaLinux: 8 / 9 — RHEL alternatifi
- CentOS Stream: 9 — RHEL’in upstream’i, dikkatli kullanın
- Windows Server: 2019 / 2022 / 2025 — SVVP sertifikalı, Windows lisans dahil PAYG
- OpenSUSE Leap, Fedora — niche kullanımlar için
Custom image yüklemek istiyorsanız (örn. kendi golden image’ınız) “Compute → Images → Create image” ile QCOW2/RAW dosyasını yükleyin. Öncesinde VM’i temizleyin: cloud-init clean, SSH host key’leri silin, log dosyalarını temizleyin, hostname’i generic yapın.
Saha kuralı: “Latest” image’ı seçmeyin. Belirli bir build seçin (örn. “Ubuntu 22.04 LTS – 2026.04 build”). Üretimde reproducible olmak ve geçen ay başlattığınız VM ile bu ay başlattığınızın aynı image olduğunu garanti etmek için.
Adım 4: Networks
Wizard’da Networks adımına geldiğinizde, varsayılan olarak yarattığınız sanal ağ seçili gelir. Birden fazla NIC eklemek istiyorsanız (örn. management ağı + production ağı ayrı):
NIC 1: management (10.0.0.0/24) — admin SSH, Ansible
NIC 2: prod-web (10.10.0.0/24) — uygulama trafiği
NIC 3: storage (10.20.0.0/24) — NFS, iSCSI (dahili)
Floating IP atama bu adımda da yapılabilir veya VM oluştuktan sonra Network → Floating IPs → Associate ile sonradan da atanabilir. Üretimde “her VM’e public IP” anti-pattern’dir; sadece bastion’a public IP verin, diğerleri private kalsın.
Adım 5: Security groups
Daha önce hazırladığınız security group’tan birini seçin. Eğer henüz yoksa, yeni VM oluştururken sihirbaz “Create security group” ile yeni bir tane yaratmanıza izin verir — ama önerimiz security group’ları wizard dışında, planlı olarak hazırlamak. İsim şablonu:
sg-{ortam}-{rol}
Örnekler:
sg-prd-web # 443/tcp, 80/tcp from internet; 22/tcp from bastion
sg-prd-db # 5432/tcp from sg-prd-web; 22/tcp from bastion
sg-bastion # 22/tcp from ofis-CIDR + VPN-CIDR
Anti-örnek:
sg-default-allow-all # tüm iç trafiği aç + dış trafiğe SSH = ASLA
Security group kuralı eklerken “Source” kısmında başka bir security group ID seçebilirsiniz. sg-prd-db‘ye sadece sg-prd-web‘den 5432 izni vermek gibi. Bu IP-bağımsız olduğu için VM IP’leri değişse bile kuralınız çalışır.
Adım 6: SSH key
Compute → SSH keys’te yüklü olan public key’lerinizden birini seçin. Eğer henüz key yüklemediyseniz:
# Yerel makinede yeni key üretin (RSA 4096 veya ed25519)
ssh-keygen -t ed25519 -C "ahmet@cloudspark" -f ~/.ssh/cloudspark_ed25519
# Public key'i göster, kopyala
cat ~/.ssh/cloudspark_ed25519.pub
# Portal: Compute → SSH keys → Import key → yapıştır + isim ver
Linux VM’leri sadece SSH key ile login etmeli — şifre login’i kapatılmış olarak gelir (cloud-init bunu garanti eder). Windows VM’lerinde RDP için Administrator şifresi VM oluşturulurken üretilir; mutlaka uzun ve şifre yöneticisinde saklanan bir şifre kullanın.
Cloud-init: ilk açılışta otomasyon
Wizard’ın “User data” alanı cloud-init script’i kabul eder. Bu, VM ilk açılışta çalışan otomasyondur. CloudSpark’ta neredeyse her üretim VM’inde standart bir cloud-init şablonu kullanırız:
#cloud-config
# CloudSpark standard production VM bootstrap
# Hostname ayarla
hostname: prd-web-01-ist
fqdn: prd-web-01-ist.internal.firma.com
# Timezone
timezone: Europe/Istanbul
# NTP
ntp:
enabled: true
servers:
- 0.tr.pool.ntp.org
- 1.tr.pool.ntp.org
# Paket güncellemesi
package_update: true
package_upgrade: true
packages:
- htop
- vim
- curl
- net-tools
- tcpdump
- prometheus-node-exporter
- fail2ban
- unattended-upgrades
# SSH güçlendirme
write_files:
- path: /etc/ssh/sshd_config.d/99-cloudspark.conf
content: |
PermitRootLogin no
PasswordAuthentication no
MaxAuthTries 3
ClientAliveInterval 300
ClientAliveCountMax 2
# Servis aktivasyonu
runcmd:
- systemctl enable --now fail2ban
- systemctl enable --now prometheus-node-exporter
- systemctl restart sshd
- echo "VM bootstrapped at $(date)" >> /var/log/cloudspark-bootstrap.log
Bu script ile her yeni VM otomatik olarak: timezone Türkiye’de, NTP çalışıyor, monitoring agent’ı (node_exporter) çalışıyor, fail2ban kuruyor, SSH güvenlik ayarları yapılı, root şifre login’i kapalı. İlk gün manuel iş yok.
Tag’ler: KVKK ve fatura için kritik
VM oluştururken Tags adımı atlanmasın. CloudSpark’ta önerdiğimiz minimum tag setı:
| Tag key | Örnek değer | Niye? |
|---|---|---|
environment |
prod / staging / dev | Filtre, fatura ayrımı |
owner |
ahmet.yilmaz@firma.com | Sorumluluk, terkedilen kaynak avlama |
cost-center |
CC-2026-IT-WEB | Fatura kırılımı, finans |
application |
e-ticaret-frontend | İlişkilendirme, izleme |
data-class |
public / internal / sensitive / kvkk | KVKK + güvenlik politikası |
backup |
daily / weekly / none | Backup planına otomatik dahil |
data-class=kvkk tag’i olan VM’lere otomatik olarak: zorunlu disk encryption, sıkı security group, audit log artırımlı. Tag tabanlı policy yönetimi cloud’da en güçlü governance aracıdır.
VM oluştuktan sonra: ilk 5 dakika checklist
- Status’u “Active” beklemek: 1-3 dakika sürer. VNC console’dan ilk boot’u izleyebilirsiniz.
- Floating IP atamak: Public erişim gerekiyorsa Network → Floating IPs.
- SSH ile bağlanmak:
ssh -i ~/.ssh/cloudspark_ed25519 ubuntu@FLOATING_IP(Ubuntu için default user “ubuntu”, Rocky için “rocky”) - Backup planını set etmek: Compute → Backups → Create policy → ilgili VM’i ekle.
- Monitoring’e eklemek: CloudSpark Grafana dashboard’una hostname/IP’yi yansıtın.
Hot-plug: çalışan VM’i büyütmek
VHI’ın en sevdiğim özelliklerinden biri. Çalışan VM’in flavor’unu yükseltebilirsiniz; vCPU ve RAM online eklenir. Reboot yok, downtime yok. Linux kernel’inde modül olarak görünür, OS otomatik tanır.
# VM'in mevcut durumu (içeriden)
$ nproc
4
$ free -h
total used free
Mem: 7.7Gi 2.1Gi 3.0Gi
# Portal: Actions → Resize → 8 vCPU + 16 GiB RAM seç → Apply
# 30 saniye sonra:
$ nproc
8
$ free -h
total used free
Mem: 15Gi 2.1Gi 11Gi
Disk büyütme de online. Volumes → seç → Extend size → yeni boyut → Apply. VM içinde growpart ve resize2fs/xfs_growfs ile dosya sistemini de büyüttüğünüzde işlem tamam.
SSS
Bir VM’i nasıl tamamen silerim?
VM’i terminate edin (Actions → Terminate). Volume’lar default olarak silinmez — kasıtlı tasarım, veri kaybı önleme. Volume’ları ayrıca silmek için Storage → Volumes → seç → Delete. Snapshot’lar da ayrıca silinir. Tag’le “owner” ve “delete-after” yazıyorsanız temizlik script’leri otomatik yapabilir.
Snapshot ile yedek arasındaki fark?
Snapshot anlık disk durumudur, aynı storage cluster’da tutulur — fiziksel donanım arızalanırsa snapshot’a güvenemezsiniz. Yedek (backup) S3’e veya farklı bir storage’a yazılır, gerçek disaster recovery’de kullanılır. İkisi farklı amaçlar için, ikisini de kullanın.
Spot/preemptible VM var mı?
VHI’da OpenStack standardı dışında “spot instance” konsepti yok. Bunun yerine CloudSpark’ta dev/test ortamlar için saatlik faturalanmış küçük flavor’lar öneririz; kullanmadığınızda shelve ederek (Actions → Shelve) faturayı durdurabilirsiniz. Compute kaynağı serbest kalır, sadece volume yer tutar.
Live migration ne zaman olur?
CloudSpark planlı bakım yapacağı zaman (örn. compute node firmware update) VM’leri live olarak başka node’a taşır. Sıfır kesinti, sadece kısa bir CPU pause (genelde <1 saniye). Notification panelinde önceden bildirim gelir; siz bir şey yapmaz.
VHI Self-Servis Portal demosu veya VM oluşturma rehberliği için CloudSpark’a iletişim formundan veya +90 (216) 528 14 14‘ten ulaşabilirsiniz. Önce küçük başlayıp hot-plug ile büyütmek, en pahalı dersin alınmadan en çok parayı kurtaran yaklaşımdır.



