31 puan yazan GN⁺ 2024-03-04 | 1 yorum | WhatsApp'ta paylaş

Kubernetes'e eleştirel bir rehber

  • Kubernetes, bazı teknik kişiler arasında gereksiz derecede karmaşık ve zaman kaybettiren bir araç olarak görülüyor; küçük ekiplerde kullanımı ise aşırı mühendislik sayılıyor.
  • Jamsocket, Kubernetes'i yıllardır üretim ortamında çalıştırıyor ve yalnızca ihtiyaç duyduğu özellikleri kullanıp geri kalanını görmezden gelerek verimli bir kullanım yöntemi bulmuş.

Kubernetes neden kullanılır

  • Kubernetes, şu üç şeyi aynı anda istediğinizde en oturmuş seçeneklerden biri:
    • Birden fazla süreç/sunucu/zamanlanmış iş çalıştırmak istediğinizde.
    • Bunları yedekli çalıştırıp yükü dağıtmak istediğinizde.
    • Bunların yapılandırmasını ve birbirleriyle ilişkilerini kodla tanımlamak istediğinizde.
  • Kubernetes, bir bilgisayar havuzunu tek bir başsız bilgisayar gibi ele almanızı sağlayan bir soyutlama katmanıdır.
  • Jamsocket günde birkaç kez dağıtım yapıyor; ürünlerinde sorun çıkarsa müşterilerinin ürünleri de etkilendiği için, rolling deployment sayesinde sık dağıtım yapma konusunda güven kazanıyor.

Kubernetes nasıl kullanılıyor

  • Jamsocket, web uygulamalarıyla iletişim kurabilen dinamik süreçler oluşturan bir hizmettir; AWS Lambda'ya benzer, ancak süreç ömrü tek bir istek/yanıt yerine bir WebSocket bağlantısına bağlıdır.
  • Kubernetes; API sunucusu, container registry, controller'lar, log toplayıcılar, bazı DNS servisleri ve metrik toplama gibi uzun süre çalışan süreçleri işletmek için kullanılıyor.
  • Kubernetes'in kullanılmadığı alanlar: geçici süreçler, statik/pazarlama siteleri, veriyi doğrudan depolayan bileşenler.
  • Google Kubernetes Engine kullanılarak Kubernetes yönetimi dışarıya devrediliyor; gerekirse Amazon EKS'e geçiş de nispeten kolay.

Aktif olarak kullanılan Kubernetes kaynakları

  • Deployments: Pod'ların çoğu deployment üzerinden oluşturuluyor.
  • Services: Dahili servisler için ClusterIP, harici servisler için LoadBalancer kullanılıyor.
  • CronJobs: Temizlik script'leri gibi işler için kullanılıyor.
  • ConfigMaps ve Secrets: Yukarıdaki kaynaklara veri aktarmak için kullanılıyor.

Dikkatli kullanılanlar

  • StatefulSet ve PersistentVolumeClaim kullanılıyor, ancak kritik verileri Kubernetes dışındaki yönetilen servislerde tutmak tercih ediliyor.
  • RBAC, karmaşıklık eklediği için mümkün olduğunca kaçınılıyor.

Bilerek kaçınılanlar

  • YAML'ı elle yazmak: Kubernetes kaynak tanımları TypeScript ve Pulumi ile üretiliyor.
  • Standart dışı kaynaklar ve operator'ler: Üçüncü taraf yazılımların Kubernetes altyapısını kullanmasına izin veriyorlar, ancak pratikte kullanımları zor.
  • Helm: Operatörler ve YAML kuralları nedeniyle kullanılmıyor.
  • Adında "mesh" geçen her şey: Gerekli olmadığı düşünülüyor.
  • Ingress kaynakları: Gereksiz dolaylılık eklememek için kaçınılıyor.
  • Tüm k8s yığınını yerelde kopyalamak: Bunun yerine Docker Compose veya özel script'lerle yalnızca gereken sistem parçaları başlatılıyor.

İnsanlar Pod beklememeli

  • Kubernetes, container başlatma süresinden çok dayanıklılık ve modülerliğe odaklanacak şekilde tasarlandı; bu yüzden insanların Pod'un başlamasını beklediği durumlar için uygun değil.
  • Jamsocket, etkileşimli iş yükleri için süreçleri hızlıca zamanlayıp çalıştırmak üzere Plane adlı MIT lisanslı bir Rust orkestratörü kullanıyor.

Daha yüksek seviyeli soyutlamalar

  • Kubernetes alternatiflerinin bazıları oldukça iyi; özellikle altyapının kodla tanımlanmasının gerekmediği durumlarda faydalı olabiliyorlar.
  • Kubernetes yerine Railway, Render ve Flight Control gibi servisler kullanılarak başka çözümler de tercih edilebilir.
  • Kubernetes'e yaklaşımınızı sistematik biçimde yönetiyorsanız, kimse bunun için çok erken olduğunu söyleyemez.

GN⁺ görüşü

  • Kubernetes, özellikle büyük ölçekli sistemlerde karmaşıklık yönetimi ve otomasyon için güçlü bir araç olsa da, bu karmaşıklık küçük ölçekli projeler veya girişimler için yük oluşturabilir.
  • Bu yazı, Kubernetes kullanırken ortaya çıkabilecek aşırı karmaşıklıktan nasıl kaçınılacağını göstererek, yeni başlayanların veya küçük ekiplerin de Kubernetes'in avantajlarından yararlanmasına yardımcı oluyor.
  • Kubernetes kullanmadan önce, gerçekten hangi özelliklere ihtiyaç duyulduğu ve ekibin teknik yetkinliği değerlendirilerek, yönetim karmaşıklığı ve maliyet karşısındaki faydalar dikkatle tartılmalı.
  • Kubernetes yerine daha basit ve yönetimi kolay servisler kullanmak daha iyi olabilir. Örneğin Docker Swarm, Apache Mesos ve Nomad gibi seçeneklerin her birinin kendine özgü artıları ve eksileri vardır.
  • Kubernetes'i devreye alırken mevcut altyapıyla entegrasyon, güvenlik, yönetim maliyeti ve öğrenme eğrisi gibi unsurlar göz önünde bulundurulmalı.
  • Kubernetes seçmenin sağlayacağı avantajlar arasında ölçeklenebilirlik, yüksek erişilebilirlik ve farklı bulut ortamlarında tutarlı dağıtım deneyimi bulunur. Ancak bunun için kaynak yönetimi ve orkestrasyon konusunda anlayış gerekir.

1 yorum

 
GN⁺ 2024-03-04
Hacker News görüşleri
  • Birinci yorum özeti:

    • Kubernetes gibi karmaşık sistemler benimsendiğinde, bu karmaşıklık sürekli büyür; çeşitli bileşenler birbirini güçlendirir ve vazgeçilmez kabul edilmeye başlanır.
    • Cloud ilk ortaya çıktığında insanlar, load balancer ve veritabanı yönetiminin karmaşıklığını azaltma fikrinden etkilenmişti.
    • Durumsuz (stateless) uygulama sunucuları büyük bir bakım sorunu değildi, ancak microservice yaklaşımı benimsetilerek aslında var olmayan sorunlar yaratıldı.
    • Artık bu kültür yerleştiği için, microservice'lerin zorunlu olduğu iddiasına sadece el sallayıp katılmak zorlaşıyor.
  • İkinci yorum özeti:

    • Orta ve küçük ölçekli şirketlere Kubernetes kuran biri olarak, memnuniyetsiz mühendisler vardı ama çoğu memnun olduğunu söyledi.
    • Kubernetes karmaşık, ancak karmaşık sorunlar için doğru araç.
    • Bir standarda sahip olmak, belgelenmemiş basit kaostan daha iyidir; ayrıca kubectl explain X komutunun AWS dokümantasyonundan çok daha iyi olduğu savunuluyor.
    • Kubernetes karmaşık olsa da, geliştiricilerin önceki iş yerlerinde kullandıklarıyla aynı şekilde çalışıyor ve hız önemli.
  • Üçüncü yorum özeti:

    • Kubernetes'i eleştirmek moda olsa da, hâlâ en iyi çözüm.
    • Altyapıyı deklaratif biçimde tanımlamayı sağlar ve load balancing, otomatik iyileşme ile ölçeklendirme sunar.
    • Tüm stack için güçlü gözlemlenebilirlik sağlar ve önceden paketlenmiş çok sayıda yazılım kullanılabilir.
    • Cloud, kendi sunucularınız ve yerel ortamda neredeyse aynı altyapı kurulabildiği için belirli bir cloud sağlayıcısına bağımlılık yaratmaz.
  • Dördüncü yorum özeti:

    • Kubernetes'in büyük avantajı Helm ve Operators'tır.
    • Karmaşıklığın bedelini ödüyorsanız, altyapı bileşenleri için bir "app store" benzeri deneyim ve operasyonları programatik olarak yönetme avantajını da almalısınız.
    • Örneğin Ceph gibi karmaşık bir şeyi kurmak için Rook iyi bir yöntem.
    • Helm ve Operators, altyapıyı yönetilen bir "turnkey" appliance'a dönüştürmez ama deklaratif arayüzler genelde yönetim açısından daha iyidir.
  • Beşinci yorum özeti:

    • Kubernetes iyi bir teknoloji, ancak karmaşıklığı nedeniyle bakımcılar şirketin kahramanlarına dönüşme eğiliminde.
    • Çok sayıda ayar ve kaldıraç, projeyi gerçek hedeflerinden uzaklaştırabilir.
  • Altıncı yorum özeti:

    • Mevcut şirkette Kubernetes ile Ansible tabanlı özel bir deployment sistemi arasında bölünmüş bir yapı var.
    • Ansible yaklaşımı iyi çalışıyor, ancak Kubernetes'e geçildiğinde deployment süresi saatlerden dakikalara inebilir ve otomatik ölçeklendirme daha hızlı ve verimli olabilir.
    • Helm deployment'larının neden başarısız olduğunu anlamanın zorluğu ve yeni işletim modelini öğrenme gerekliliği, önceki ekiplerden gelen tutarlı geri bildirimler arasında.
  • Yedinci yorum özeti:

    • Eski bir Google site reliability engineer ile yapılan konuşmaya göre, gerçekten Kubernetes'e ihtiyaç duyan şirket sayısı çok az.
    • Birçok insan trendi takip ederek geliştirme yapma eğiliminde.
  • Sekizinci yorum özeti:

    • Kubernetes doğru araç olabilir, ancak kaçınılmaz bir kötülük olarak kabul edilmeli.
    • Birden fazla tarafın başarısızlığı yüzünden iş birliğinin bozulabileceği yazılımlar sık sık sorun çıkarabilir.
  • Dokuzuncu yorum özeti:

    • YAML'ı elle yazmak sorunlu olabildiği için, bunun yerine TypeScript ve Pulumi kullanılarak Kubernetes kaynak tanımları üretiliyor.
    • YAML lint etmek yerine tam bir programlama dili çalışma zamanı ve üçüncü taraf kütüphaneler devreye alınıyor; bununla birlikte sürüm bakımı, proje derleme gibi ek karmaşıklıklar da kabul ediliyor.
  • Onuncu yorum özeti:

    • Kubernetes konusunda bir zamanlar çok hevesli biri olarak, Kubernetes'in iyi tarafının temel yapı taşları (deployments, services, configmaps) olduğu, geri kalanının ise yalnızca özel durumlarda kullanılması gerektiği söyleniyor.
    • Ekip, yapılandırmayı açık ve net tutmak için ham YAML yazmayı ve kustomize kullanmayı tercih ediyor.