2 puan yazan GN⁺ 2025-05-06 | 1 yorum | WhatsApp'ta paylaş
  • Yazının yazarı, kişisel sunucu işletiminde Kubernetes'in karmaşıklığı ve kaynak tüketimi nedeniyle hayal kırıklığı yaşadığını ve bunu systemd ile Podman birleşimiyle değiştirme deneyimini paylaşıyor
  • Kubernetes, GitOps ve otomasyon açısından cazip olsa da küçük ölçekli ortamlarda fazlasıyla ağır bir sistem
  • Podman'ın otomatik güncelleme özelliği ve systemd servis üretimi kullanılarak, Kubernetes'in temel işlevleri basitçe uygulanabiliyor
  • systemctl ile loginctl'i birleştirerek kullanıcı düzeyinde servislerin otomatik çalıştırılması da anlatılıyor ve VPS kaynak tüketiminin büyük ölçüde azaldığı vurgulanıyor
  • Ancak Podman'ın systemd entegrasyonunun yakında "Quadlet" adlı yeni bir yöntemle değiştirileceği belirtiliyor

Giriş: Kubernetes ile ilk tanışma

  • 2018'de Kubernetes'i denerken kişisel bir NUC üzerinde küme kurmaya çalıştığı deneyim anlatılıyor
  • Kubernetes karmaşık olsa da temelde şu tekrarlayan döngü yapısıyla çalışıyor:
    • mevcut durumu belirleme → istenen durumu hesaplama → farkı hesaplama → uygulama
  • cert-manager gibi çeşitli bileşenlerle sağlanan otomasyon özellikleri oldukça etkileyiciydi

Kubernetes'in aşırı kaynak gereksinimi

  • Kişisel sunucuda (NUC) Kubernetes sürekli CPU kullanımı, fan gürültüsü ve ısınma yaratıyordu
  • Azure, MicroK8s, K3S gibi çeşitli dağıtımlar da kayda değer miktarda kaynak tüketiyordu
    • MicroK8s: %12 CPU kullanımı (2vCPU VPS)
    • K3S: %6 CPU kullanımı (2vCPU Ampere A1)

GitOps otomasyonunun cazibesi

  • Flux gibi araçlarla Git tabanlı dağıtım otomasyonu mümkün olduğu için çok kullanışlıydı
  • GitHub'a yalnızca container image'ı push etmek yeterli oluyor, sunucu da en güncel uygulamayı otomatik olarak dağıtıyordu
  • Ancak Kubernetes olmadan bu tür bir otomasyonu kurmak çok zordu

Podman ve systemd'nin ortaya çıkışı

  • Podman, Docker'a alternatif bir araç ve container'ları systemd servislerine dönüştürme özelliğine sahip
  • podman generate systemd ile otomatik olarak service dosyaları üretilebiliyor
  • io.containers.autoupdate etiketi sayesinde günde 1 kez otomatik image güncellemesi yapılabiliyor
  • Fedora Magazine'deki bu yöntemden yararlanarak Kubernetes'e alternatif bir ortam kurmayı başarmış

Gerekli üç bileşen

  1. systemctl --user enable mycontainer.service

    • Container'ın oturum açıldığında otomatik çalışması için ayarlanması
  2. loginctl enable-linger

    • Sunucu açıldığında kullanıcı oturumunun etkinleşmesi için ayarlanması
  3. Podman'ın auto-update özelliği

  • Bu üçüyle Kubernetes'in sunduğu işlevlerin %99'u daha basit ve daha hafif şekilde değiştirilebildi

Geçiş sonucu

  • Tüm servisler eski VPS'ten yeni VPS'e taşındı
  • Kaynaklar yarıya indi ama performans arttı, servis yoğunluğu yükseldi ve maliyet tasarrufu sağlandı

Sonraki konu: Quadlet

  • Ne yazık ki Podman'ın systemd entegrasyonu yakında kullanımdan kaldırılacak
  • Bunun yerine Quadlet dosyaları adı verilen yeni bir tanım biçimine geçilecek
  • Yazı, yeni teknolojiyi öğrenmeye hazırlıklı olmak gerektiği notuyla sona eriyor

1 yorum

 
GN⁺ 2025-05-06
Hacker News görüşleri
  • Kubernetes'e yalnızca container image'larını çalıştırıp güncelleme aracı olarak bakılıyorsa, bu aşırı kullanım olabilir

    • Kubernetes, container'ların durumu paylaşması, birbirine bağlanması ve yapılandırmalara ya da gizli bilgilere erişebilmesi için gerekli kaynakları sağlar
    • CPU ve bellek maliyeti, container'ları yönetmekten ve gerekli kaynakları sağlamaktan kaynaklanır
    • Dağıtık sistemlerde tüm sistemler istenen şekilde çalışmadığı için yönetici sürekli olarak istenen duruma ulaşmaya çalışır
  • Docker kullanarak birkaç küçük web sitesi çalıştırmaya çalıştılar, ancak image güncelleme ve test etme zordu

    • Debian'da systemd unit'leri oluşturan bir script ile her şeyi değiştirdiler ve servis değiştiğinde yeniden başlattılar
    • Değişiklikleri bir test VM'i kullanarak dağıtım host'una rsync ile aktarıp dağıtım script'ini çalıştırıyorlar
    • Tüm sistem 2GB'lık bir VPS üzerinde çalışıyor; Wordpress SQLite'ı resmî olarak desteklerse 1GB'a düşürülebilir
    • Destek gereksinimlerini en aza indirmek için Mariadb kullanıyorlar
  • Kubernetes cluster'ı yönetmekte sorun yok, ancak hobi projelerinde kaynak gereksinimleri nedeniyle kullanmak zor

    • Kubernetes, aylık 10 dolarlık bir VPS'te çalıştırmak için fazla kaynak yoğun
    • Ingress yerine Traefik'in container keşif özelliğini kullanıyor ve docker compose komutlarını elle çalıştırıyorlar
    • CronJobs yerine crontab'ı yöneten küçük script'ler yazıyorlar
    • Kubernetes'in zaten çözdüğü sorunları daha verimsiz biçimde çözmeye çalışıyorlar
    • Ucuz VPS instance'larında iyi çalışan, Kubernetes uyumlu API sunan hafif bir alternatif istiyorlar
  • Systemd birçok sorunu çözüyor ve göz ardı edilmemeli

    • machinectl, nspawn, vmspawn, importctl gibi çeşitli özellikler sunuyor
    • homed/homectl kullanıcı yönetimini genişletiyor, mounts sürücüleri otomatik bağlıyor, boot servis başlatma/durdurmayı kontrol ediyor, timers ise cron'un yerini alıyor
    • Servis unit'leri işleri kontrol ediyor ve systemctl edit ile yapılandırma dosyaları düzenlenebiliyor
  • Homelab'lerini podman-systemd ile çalıştırıyorlar ve yeni Kubernetes türevlerini incelediklerinde ek bir zahmet yaşamıyorlar

    • Ansible playbook'ları kullanarak image'ları önceden çekiyor ve unit dosyalarını uygun yerlere yerleştiriyorlar
    • Voron 3D printer stack'ini podman-systemd ile çalıştırıyorlar; mkosi ve systemd-sysupdate'e geçmeyi değerlendiriyorlar
    • Docker-compose dosyalarını systemd unit'lerine dönüştürme zahmeti var
    • Podman, kullanıcı/izin ayarlarının karmaşıklığını azaltıyor
  • Quadlet kullanarak container'ları systemd içinde yönetmek bir sonraki adım

    • Ayrıntılar için Red Hat bloguna bakılabilir
  • Skate'i geliştirerek multi-host ve Kubernetes manifest desteği olan bir sistem kurdular

    • Arka planda podman ve systemd kullanıyor
  • Docker compose komutları ve Caddy kullanarak sertifikaları otomatik almak mümkün

    • docker compose up -d --pull always komutuyla basitçe kurulabiliyor
    • CI yapılandırması scp ve ssh kullanılarak oluşturulmuş
    • Basit ve geliştirme makinesinde de çalışıyor
  • Systemd artık immutable workflow'lar için resmî destekli işletim sistemi dağıtımı olan ParticleOS'u sunuyor

  • Tek bir sunucuya dağıtım yapmanın karmaşık olmaması gerektiğini düşünüyorlar ve Harbormaster adlı bir araç yazdılar

    • YAML dosyaları kullanarak repository'leri keşfediyor ve Docker Compose dosyalarını çalıştırıyor
    • Tüm durumu tek bir dizinde tutarak yedeklemeyi kolaylaştırıyor
    • Tek bir sunucu için gereken en kolay container orchestration aracı bu