Focused detail of a modern server rack with blue LED indicators in a data center.
CloudSpark

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.

  1. Bu VM hangi iş yükü için? Web app, veritabanı, batch job, dev/test ortamı? Cevap flavor’u belirler.
  2. Üretim mi, geçici mi? Cevap backup, monitoring ve security group politikasını belirler.
  3. Ö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ı

  1. “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.
  2. RAM’i abartmak. Linux page cache RAM’i her zaman doldurur — bu RAM’in az olduğu anlamına gelmez. free -h output’unun “available” sütununa bakın.
  3. 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/postgresql veya /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

  1. Status’u “Active” beklemek: 1-3 dakika sürer. VNC console’dan ilk boot’u izleyebilirsiniz.
  2. Floating IP atamak: Public erişim gerekiyorsa Network → Floating IPs.
  3. SSH ile bağlanmak: ssh -i ~/.ssh/cloudspark_ed25519 ubuntu@FLOATING_IP (Ubuntu için default user “ubuntu”, Rocky için “rocky”)
  4. Backup planını set etmek: Compute → Backups → Create policy → ilgili VM’i ekle.
  5. 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.

Yorum yapabilmek için oturum açmalısınız.
🇹🇷 Türkçe🇬🇧 English🇩🇪 Deutsch🇫🇷 Français🇸🇦 العربية🇷🇺 Русский🇪🇸 Español