Kendi Kubernetes Clusterınızı Yönetin

Selçuk Şan
Turk Telekom Bulut Teknolojileri
4 min readJan 25, 2024

Kubernetes, Cloud Native dünyasının işletim sistemi ve containerized iş yüklerini çalıştırmak için güvenilir ve ölçeklenebilir bir platform arayan herkes için bir standart.

Tabii ki basit bir demo clusterından, kritik iş yüklerine hazır bir production clustera giden yol önemli miktarda zaman, çaba ve uzmanlık gerektiriyor.

Production iş yüklerini Kubernetes’te çalıştırmayı düşünen herkesin karşılaştığı ilk ve belki de en önemli karar: satın al ya da inşa et. Kendi clusterlarımızı inşa edip yönetmeli mi? Yoksa bunları yönetmesi için birilerine ödeme mi yapmalı?

Bu yazıda kendi clusterlarımızı inşa edip yönettiğimiz self-hosted Kubernetes modeli üzerine konuşacağız.

Aslında Self-hosted derken, Redis PostgreSQL, NGINX veya kullandığınız diğer yazılımlarda olduğu gibi, Kubernetes’i sahip olduğunuz ve kontrol ettiğiniz makinelere kurup yapılandırmanızı kastediyoruz.

Bu şüphesiz size maksimum esneklik ve kontrol sağlayan bir seçenek… Kubernetes’in hangi sürümlerinin çalıştırılacağına, hangi seçeneklerin ve featureların etkinleştirileceğine, clusterların ne zaman upgrade edilip edilmeyeceğine vb. karar verebilirsiniz.

With great power comes great responsibility

Bu esneklik ve kontrol gücünün yanında bazı önemli zorluklar da olacak tabii. Self-hosted opsiyonu; çalışan, beceri, mühendislik, bakım ve troubleshooting açısından maksimum kaynak gerektirir. Şüphesiz düşündüğünüzden daha fazla iş, efor ve sorumluluk…

Çalışan bir Kubernetes cluster’ı oluşturmak görece oldukça basittir. Ancak bu cluster, maalesef, production ortamına hazır bir clusterdan çok uzaktır.

En azından aşağıda soracağımız sorulara cevap verebiliyor olmamız gerekir:

  • Control plane Highly Available mı ? Yani, herhangi bir node çökerse veya yanıt vermezse clusterınız hala çalışıyor mu? Uygulamaları hala deploy edebilir veya güncelleyebilir misiniz? Çalışan uygulamalarınız Control plane olmadan hala fault-tolerant olacak mı?
  • Worker Node havuzunuz Highly Available mı? Yani, bir kesintinin birkaç Worker Node’u devre dışı bırakması durumunda iş yüklerinizin çalışması duracak mı yoksa clusterınız çalışmaya devam mı edecek? Kendini iyileştirmek için yeni nodeları otomatik olarak hazırlayabilecek mi yoksa manuel müdahale mi gerektirecek?
  • Clusterınız güvenli bir şekilde kuruldu mu? Dahili bileşenler TLS encryption ve trusted sertifikaları kullanarak iletişim kuruyor mu? Kullanıcılar ve uygulamalara cluster işlemleri için tanımlanan hak ve izinler minimum düzeyde mi? Container güvenliği düzgün ayarlanmış mı? Nodeların Control plane bileşenlerine gereksiz erişimi var mı? etcd veritabanına erişim uygun şekilde kontrol ediliyor ve doğrulanıyor mu?
  • Clusterınız standartlara uygun mu? Cloud Native Computing Foundation tarafından tanımlanan Kubernetes Cluster standartlarını karşılıyor mu?
  • Cluster Nodelarınız fully config-managed mi? Yani, imperative shell scriptleri tarafından oluşturulup sonra kendi haline bırakılmak yerine tamamen yapılandırılarak yönetiliyor mu? Her node için işletim sistemi ve kernel güncellenmesi, güvenlik yamalarının uygulanması vb. düzenli olarak yapılıyor mu?
  • Clusterınızdaki datalar, persistent storage (kalıcı depolama) da dahil olmak üzere, düzgün bir şekilde yedekleniyor mu? Restore processleriniz neler? Ne sıklıkla restoring testi yapıyorsunuz?
  • Çalışan bir clusterınız olduğunda, onun stabilizasyonunu zaman içinde nasıl sağlarsınız? Yeni nodeları nasıl provision ediyorsunuz?
    config değişikliklerini mevcut nodelara nasıl yansıtırsınız?
    Kubernetes güncellemelerini nasıl ve ne sıklıkla kullanıma sunarsınız? Taleplere yanıt olarak nasıl ölçeklenirsiniz?

Mesele Sadece Kurulum Değil

Artık sadece kurulum yaparken değil, her zaman, tüm prod clusterlarınız için, bu faktörlere dikkat etmeli.

  • Kubernetes altyapınızda değişiklik veya upgrade yaptığınızda bunun high availability, güvenlik vb. üzerindeki etkisini göz önünde bulundurmanız gerekir.
  • Cluster nodelarının ve tüm Kubernetes bileşenlerinin düzgün çalıştığından emin olmak için her zaman bir monitoring ve ekibin gece-gündüz herhangi bir sorunla ilgilenmek üzere çağrılabilmesi için bir alarm sistemine ihtiyacınız olacak.
  • Kubernetes hızlı bir şekilde geliştiriliyor ve sürekli yeni özellikler ve güncellemeler yayınlanıyor. Clusterlarınızı güncel tutmanız ve değişikliklerin mevcut kurulumunuzu nasıl etkilediğini ve etkileyeceğini anlamanız gerekecektir.
  • Üstelik birkaç doküman-makale okumak, clusterı doğru şekilde yapılandırmak ve bu şekilde bırakmak için çoğu zaman yeterli olmayacaktır. Konfigürasyonu düzenli olarak test etmeniz ve doğrulamanız gerekir; Rastgele bir control plane node’unu devre dışı bırakıp her şeyin hala çalıştığından emin olmak gibi…

Kurulum ve yönetiminin basit olduğu yönündeki yaygın düşünceye rağmen gerçek şu ki Kubernetes zordur.

Kubernetes son derece basit ve iyi tasarlanmıştır ancak çok karmaşık durumlarla baş etmek zorunda olması karmaşık yazılımlara yol açar...

Kendi clusterlarınızı doğru şekilde nasıl yöneteceğinizi öğrenmek ve bunu günden güne, aydan aya fiilen yapmak önemli bir yatırım gerektirir. Bu yazının amacı Kubernetes’ten soğutmak değil kesinlikle, fakat Kubernetes’i çalıştırmanın neleri içerdiğini net bir şekilde anlamalıyız diye düşünüyorum.

Bu yazı, self-hosted Kubernetes modelinin faydaları ve maliyetleri hakkında bilinçli bir karar vermenize yardımcı olacaktır diye umuyorum.

Bir ihtimal daha var

Kubernetes’te yeniyseniz veya self-hosted model için hazır olmadığınızı düşünüyorsanız, Managed bir Kubernetes Hizmeti kullanmak harika bir başlangıç olabilir.
Günde birkaç dolar karşılığında, birkaç dakika içinde tamamen hazır olan, güvenli, highly available, production-grade bir clustera sahip olabilirsiniz.

Bir süre sonra Fully Managed Hizmetler, kendi Kubernetes clusterınızı çalıştırıp yönetmek konusunda size yol gösterecektir…

--

--