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
Hacker News görüşleri
Birinci yorum özeti:
stateless) uygulama sunucuları büyük bir bakım sorunu değildi, ancak microservice yaklaşımı benimsetilerek aslında var olmayan sorunlar yaratıldı.İkinci yorum özeti:
kubectl explain Xkomutunun AWS dokümantasyonundan çok daha iyi olduğu savunuluyor.Üçüncü yorum özeti:
Dördüncü yorum özeti:
Beşinci yorum özeti:
Altıncı yorum özeti:
Yedinci yorum özeti:
Sekizinci yorum özeti:
Dokuzuncu yorum özeti:
Onuncu yorum özeti:
deployments,services,configmaps) olduğu, geri kalanının ise yalnızca özel durumlarda kullanılması gerektiği söyleniyor.kustomizekullanmayı tercih ediyor.