Kubernetes’e genellikle durumsuz sistemler perspektifinden yaklaşılır. Durum bilgisi olmayan bir uygulamanın, ortamı dışında herhangi bir veri depolaması gerekmediğinden, kapsayıcı hale getirilmesi, dağıtılması ve ölçeklendirilmesi kolaydır. Kapsayıcının durdurulmuş olması veya farklı bir ana bilgisayara taşınması önemli değil – yeni örnekler, herhangi bir yankı olmadan eski örneklerin yerini alabilir.
Ancak çoğu gerçek uygulama böyle değildir. En basit sistemler dışındaki tüm sistemler, genellikle bir veritabanında veya kalıcı bir dosya sisteminde depolanan duruma sahiptir. Hizmetinizi yapılandıran veya kullanıcılar tarafından oluşturulan veriler, nerede bulunduklarına bakılmaksızın saklanmalı ve tüm kapsayıcılarınız tarafından erişilebilir hale getirilmelidir.
Geçici ortamlarda durumu koruma zorluğu, kapsayıcıları, düzenlemeyi ve bulut yerel çalışma uygulamalarını kullanan çoğu kuruluş tarafından karşılanır. Durum bilgisi olan iş yükleri Kubernetes tarafından karşılanabilir ancak harici alternatifler de mevcuttur. Bu makalede, Kubernetes’in durum bilgisi olan uygulamalarla çalışmasını sağlayan bazı yaklaşımları öğreneceksiniz.
Devletle İlgili Sorunlar
“Durum” terimi, belirli bir zamanda bir uygulamayla ilişkili verileri tanımlar. Veritabanı içeriği ve kullanıcı hesapları gibi sistemin ömrü boyunca alınması gereken uzun ömürlü bilgilerdir. Hizmetiniz kullanımdayken veriler oluşturulduğunda ve değiştirildiğinde durum sürekli olarak değişir.
Doğru uygulama işlevi, her örneğin kalıcı duruma erişebilmesine bağlıdır. Bir bileşenin dört kopyasını iki fiziksel ana bilgisayara dağıtırsanız, bu makinelerin her ikisinin de veri deponuza erişmesi gerekir. Bu, uygulama örneklerinin otomatik olarak değiştirilemeyen birbirine bağlı bağımlılıklara sahip olduğu anlamına gelir.
Durum bilgisi olan hizmetlere ilişkin kısıtlamalar, herhangi bir zamanda değiştirilebilen Kubernetes kısa ömürlü kapsayıcılar modeliyle çelişir. Durum bilgisi olan bir uygulamayla çalışırken, kapsayıcıların ihtiyaç duydukları duruma güvenilir bir şekilde erişebilmeleri için özel hazırlık yapmanız gerekir. Bu, uygulamanız ölçeklenirken sabit kalan güvenilir veri kalıcılığı sağlamak için ek yapılandırma gerektirir.
Durum Bilgili Hizmetleri Kubernetes’te Çalıştırma
Durum bilgisi olan sistemlere yönelik Kubernetes desteği , topluluk ilgisinin artmasıyla desteklenen son birkaç yılda büyüdü . Durum bilgisi olan uygulamalar, durum bilgisi olan kümeler ve kalıcı birimler gibi resmi olarak desteklenen kaynaklardan birleştirilebilir . Bunlar, verilerinizi depolamak ve yönetmek için entegre yöntemler sunar.
Kalıcı birimler, Pod’larınıza veri depolama sağlar. Kalıcı bir birime yazılan dosyalar, onları oluşturan Pod’dan bağımsız olarak depolanır. Birimin içeriği, Pod’lar yok edildikten sonra kümenizde kalır ve değiştirilenlerin depolanan duruma erişmesine izin verir.
StatefulSets, durum bilgisi olan uygulamaları temsil eden API nesneleridir. Dağıtımlara benzer şekilde çalışırlar ancak kapsülledikleri her Pod’a benzersiz bir tanımlayıcı atarlar. Pod’lar, yeniden başlatılsa veya başka bir Node’a programlansa bile tanımlayıcılarını korur. Bu, Pod sıralamasının ve kimliğinin önemli olduğu prosedürleri uygulamanıza olanak tanır. Güvenilir tanımlayıcılar, bir zamanlama olayından sonra birimleri Pod’larla yeniden eşleştirmenize ve uygulama güncellemelerini sırayla zarif bir şekilde kullanıma sunmanıza olanak tanır.
Bu özellikler, artık Kubernetes kümenizde durum bilgisi olan uygulamaları çalıştırmanın mümkün olduğu anlamına gelir. Kalıcı birimlere veri yazabilir ve Pod’ların kimliklerini hatırlaması gerektiğinde Dağıtımlar yerine StatefulSets kullanabilirsiniz.
Devleti Kubernetes Dışında Yönetme
Kubernetes’te durum bilgisi olan hizmetleri çalıştırmanın popüler bir yolu, durumu kümenizin dışında bulmaktır. Sisteminizi, bileşenleri ihtiyaç duydukları depolama alanından ayrılacak şekilde tasarlarsınız. Ağ üzerinden ayrı servislerdeki kalıcı verilere erişebilirler .
Kendi veritabanı sunucunuzun bakımını yapabilir, mevcut ağ dosya paylaşımlarına bağlanabilir veya bulut sağlayıcınızdan tam olarak yönetilen bir hizmet kullanabilirsiniz. Kubernetes kümenizdeki uygulamalar, API’lerini veya doğrudan erişim protokollerini kullanarak depolama sistemlerinizle etkileşime girecek şekilde yapılandırılmalıdır.
Bu, hizmetlerinizde ayrıştırmayı teşvik etmenin iyi bir yoludur. Kapsayıcılı uygulamalarınızdan kalıcı dosya sistemi erişimini kaldırmak, onları ortamlar arasında daha taşınabilir hale getirir. Konteynerler, depolama bağımlılıkları temel ağ çağrılarına indirgendiği için durum bilgisi olmayan dağıtım modelleri kullanılarak başlatılabilir. Durumu kümenizde depolamak için kalıcı birimler ve durum bilgisi olan kümeler kullanmanın karmaşık maliyetine maruz kalmadan Kubernetes’in esnekliğinden yararlanabilirsiniz.
Durum Bilgisine Sahip Hizmetler için Kubernetes’ten Kaçınma
Üçüncü bir düşünce okulu, durum bilgisi olan hizmetler için Kubernetes’ten tamamen kaçınmaktır. Bu genellikle bir aşırı tepkidir – kümenizde durumu koruma konusunda rahat değilseniz, yine de uygulamalarınızı bitişik bir depolama sağlayıcısı kullanarak dağıtmak için yukarıda özetlenen yöntemi kullanabilirsiniz.
Yine de Kubernetes’te anlam ifade etmeyen bazı sistemler var. Çok sayıda dosyayla çalışan son derece dosya sistemine bağımlı mimarilerin uygulanması ve kalıcı birimler kullanılarak ölçeklenmesi zor olabilir. Kubernetes ile birlikte yönetilen bir harici depolama sistemi, hizmetinizin temel işlevinin dosya etkileşimleri olduğu durumlarda kabul edilemez gecikmelere neden olabilir.
Bu durumlarda, size veri depolama ve G/Ç işlemleri üzerinde daha fazla kontrol sağlayan alternatif dağıtım yaklaşımlarına ulaşmanız gerekebilir. Bununla birlikte, konteynerli sistemler için depolama seçeneklerini geliştirmek için ekosistemde çalışmalar devam etmektedir. Bulut yerel depolama çözümleri , kalıcı birimler ve durum bilgisi olan kümeler gibi kavramların daha üst düzey soyutlamaları olarak ortaya çıkıyor ve birden çok düğümde kullanıldığında performansını koruyan dağıtılmış dosya sistemlerini uyguluyor. Ceph , Minio ve Portworx bu alandaki rakiplerden bazıları.
Durum Bilgili Uygulamaları Kubernetes’te Çalıştırmalı mısınız?
Durum bilgisi olan uygulamaların çoğu, Kubernetes kullanılarak sorunsuz bir şekilde dağıtılabilir. Temel karar, kalıcı hacimler ve durum bilgisi olan kümeler kullanarak veya harici olarak yönetilen bir veri deposuyla arabirim kullanarak kalıcı verilerinizi kümenizin içinde tutmanızdır.
Kalıcı hacimler çoğu kullanım durumu için işe yarar ancak bazı sınırlamalarla birlikte gelirler. Tüm toplu erişim modları her uygulama tarafından desteklenmez, bu nedenle Kubernetes dağıtımınızın hangi özellikleri desteklediğini kontrol etmeniz önemlidir.
Nispeten az sayıda sürücü ReadWriteMany, birimin her birinin veri okuyabildiği ve yazabildiği birden fazla Düğüme aynı anda bağlanmasına izin veren modu sunar. Mod ReadWriteOnce, en yaygın olarak desteklenen moddur ve her bir Düğümün veri okumasına, ancak bunlardan yalnızca birinin yazmasına izin verir. Bu kısıtlamalar uygulamanızın zamanlamasını etkileyebilir – paylaşılan bir veritabanı örneğine yazması gereken birkaç Bölmeye sahip bir sistemin ReadWriteMany, mevcut olmadığı sürece hepsini tek bir Düğüm üzerinde çalıştırması gerekir. Bu, hizmetlerinizi ölçeklendirme yeteneğinizi sınırlar.
Harici olarak yönetilen bir veritabanı veya nesne depolama sistemi kullanmak, Kubernetes’in esnekliğinden yararlanmaya devam ederken bu kalıcı sorunları azaltmanın etkili bir yoludur. Bu, uygulamanızın deposundan tamamen ayrılmasını gerektirir, bu nedenle eski bir hizmeti taşıyorsanız bu bir seçenek olmayabilir.
Eski uygulamalarla çalışmak, Kubernetes’te durum bilgisi olan bir uygulama çalıştırmamak için en güçlü durumu sunar. Durumun nerede saklandığı ve nasıl yönetildiği konusunda kasıtlı olamıyorsanız, engellerle karşılaşabilirsiniz. Bu durumlarda, dağıtım düğümleri arasında dağıtmaya çalışmadan önce sisteminizi yeniden düzenlemek genellikle en iyisidir.
Özet
Durum bilgisi olan uygulamalar ve Kubernet’ler tamamen doğal bir eşleşme olmasa da, durum bilgisi olan kümeleri ve kalıcı birimleri birleştirerek kalıcı verileri kümenizde barındırmak mümkündür . Bunlar, Kubernetes kullanarak durum bilgisi olan sistemleri düzenlemek için resmi olarak desteklenen yöntemler sağlar, ancak bunların dayattığı zamanlama kısıtlamalarına dikkat etmeniz gerekir.
Küme içi durum yönetimi karmaşıklık eklediğinden, kalıcı verileri harici bir hizmette tutmak, dağıtımlarınızı kolaylaştırmanın popüler bir yoludur. Yönetilen veritabanları, nesne depolama platformları ve özel ağlar, kümenizin dışında depolama sağlamanıza ve ardından bunu içeriden güvenli bir şekilde tüketmenize olanak tanır. Uygulamanızı harici depolama arabirimlerini destekleyecek şekilde uyarlamanız gerekecek, ancak daha sonra artırılmış dağıtım esnekliğinden yararlanabilirsiniz.
Durumun basit yapılandırma dosyalarından oluştuğu uygulamalar, kalıcı dosya depolamayı benimsemek zorunda kalmadan Kubernetes’te çalışmak için ConfigMaps’i kullanabilir . ConfigMaps, ihtiyaç duyulduğunda ortam değişkenleri veya takılı dosyalar olarak Pod’larınıza otomatik olarak sağlanan birinci sınıf nesnelerdir. Yalnızca bir avuç uzun ömürlü ayarı sakladığınızda, kalıcı birimlere olan ihtiyacı ortadan kaldırırlar.