Kubernetes: açık kaynak ve satıcıya özel

Merhaba, adım Dmitry Krasnov. Beş yıldan fazla bir süredir Kubernetes kümelerini yönetiyorum ve karmaşık mikro hizmet mimarileri oluşturuyorum. Bu yılın başında Containerum tabanlı Kubernetes kümelerini yönetmeye yönelik bir hizmeti başlattık. Bu fırsattan yararlanarak size Kubernetes'in ne olduğunu ve bir satıcıyla entegrasyonun açık kaynaktan nasıl farklı olduğunu anlatacağım.

Başlamak için nedir Kubernetes. Bu, çok sayıda ana bilgisayardaki konteynerleri yönetmeye yönelik bir sistemdir. Bu arada Yunancadan "pilot" veya "dümenci" olarak çevriliyor. Başlangıçta Google tarafından geliştirildi ve daha sonra dünyanın önde gelen geliştiricilerini, son kullanıcılarını ve konteyner teknolojisi sağlayıcılarını bir araya getiren, kar amacı gütmeyen uluslararası bir kuruluş olan Cloud Native Computing Foundation'a teknoloji katkısı olarak bağışlandı.

Kubernetes: açık kaynak ve satıcıya özel

Çok sayıda kapsayıcıyı yönetin

Şimdi bunların ne tür kaplar olduğunu bulalım. Bu, tüm ortamıyla birlikte bir uygulamadır - esas olarak programın bağlı olduğu kütüphaneler. Bütün bunlar arşivlerde paketlenir ve işletim sisteminden bağımsız olarak çalıştırılabilen, test edilen ve daha fazlası olan bir görüntü biçiminde sunulur. Ancak bir sorun var; çok sayıda ana bilgisayardaki kapsayıcıları yönetmek çok zordur. Kubernetes bu yüzden yaratıldı.

Kapsayıcı görüntüsü, bir uygulamayı ve onun bağımlılıklarını temsil eder. Uygulama, bağımlılıkları ve işletim sistemi dosya sistemi görüntüsü, katman adı verilen görüntünün farklı bölümlerinde bulunur. Katmanlar farklı kaplar için yeniden kullanılabilir. Örneğin bir şirketteki tüm uygulamalar Ubuntu temel katmanını kullanıyor olabilir. Konteynerleri çalıştırırken, tek bir temel katmanın birden fazla kopyasını ana bilgisayarda saklamaya gerek yoktur. Bu, görüntü depolamayı ve dağıtımını optimize etmenize olanak tanır.

Bir konteynerden uygulama çalıştırmak istediğimizde gerekli katmanlar üst üste bindirilerek bir overlay dosya sistemi oluşturulur. Üstüne, konteyner durduğunda kaldırılan bir kayıt katmanı yerleştirilir. Bu, konteyner çalıştırıldığında uygulamanın her zaman değiştirilemeyen aynı ortama sahip olmasını sağlar. Bu, ortamın farklı ana bilgisayar işletim sistemlerinde tekrarlanabilirliğini garanti eder. İster Ubuntu ister CentOS olsun, ortam her zaman aynı olacaktır. Ayrıca konteyner, Linux çekirdeğinde yerleşik mekanizmalar kullanılarak ana bilgisayardan izole edilir. Bir kaptaki uygulamalar ana bilgisayarın ve komşu kapların dosyalarını, işlemlerini görmez. Uygulamaların ana işletim sisteminden bu şekilde izolasyonu, ek bir güvenlik katmanı sağlar.

Bir ana bilgisayardaki kapsayıcıları yönetmek için birçok araç mevcuttur. Bunlardan en popüler olanı Docker'dır. Konteynerlerin tam yaşam döngüsünü sağlamanıza olanak tanır. Ancak yalnızca bir ana bilgisayarda çalışır. Birden fazla ana bilgisayardaki kapsayıcıları yönetmeniz gerekiyorsa Docker, mühendisler için hayatı cehenneme çevirebilir. Kubernetes bu yüzden yaratıldı.

Kubernetes'e olan talep tam olarak birden fazla ana bilgisayardaki konteyner gruplarını bir tür tek varlık olarak yönetme yeteneğinden kaynaklanmaktadır. Sistemin popülaritesi, DevOps'un süreçlerini yürütmek için Kubernetes'in kullanıldığı DevOps veya Geliştirme Operasyonları oluşturma fırsatı sağlar.

Kubernetes: açık kaynak ve satıcıya özel

Şekil 1. Kubernetes'in nasıl çalıştığının şematik gösterimi

Tam otomasyon

DevOps temel olarak geliştirme sürecinin otomasyonudur. Kabaca konuşursak, geliştiriciler depoya yüklenen kodu yazar. Daha sonra bu kod otomatik olarak tüm kitaplıkların bulunduğu bir kapta otomatik olarak toplanabilir, test edilebilir ve bir sonraki aşamaya (Hazırlama) ve ardından hemen Üretime "yayılabilir".

DevOps, Kubernetes ile birlikte bu süreci, geliştiricilerin neredeyse hiç katılımı olmadan gerçekleşecek şekilde otomatikleştirmenize olanak tanır. Bu nedenle, geliştiricinin bunu bilgisayarında yapması gerekmediği için derleme önemli ölçüde daha hızlıdır - yalnızca bir kod parçası yazar, kodu depoya iter ve ardından işlemi içerebilecek boru hattı başlatılır. oluşturma, test etme ve kullanıma sunma. Ve bu her işlemde gerçekleşir, dolayısıyla test sürekli olarak gerçekleşir.

Aynı zamanda, bir konteyner kullanmak, bu programın tüm ortamının tam olarak test edildiği biçimde üretime geçeceğinden emin olmanızı sağlar. Yani “testte bazı versiyonlar vardı, bazıları üretimde ama onları yüklediğimizde her şey düştü” gibi sorunlar olmayacak. Ve bugün mikro hizmet mimarisine doğru bir eğilime sahip olduğumuzdan beri, tek bir büyük uygulama yerine yüzlerce küçük uygulama olduğunda, bunları manuel olarak yönetmek için çok sayıda çalışana ihtiyaç duyulacaktır. Bu yüzden Kubernetes kullanıyoruz.

Artıları, artıları, artıları


Kubernetes'in platform olarak avantajlarından bahsedecek olursak, mikro hizmet mimarisini yönetme açısından önemli avantajlara sahiptir.

  • Birden fazla kopyayı yönetme. En önemli şey, birden fazla ana bilgisayardaki kapsayıcıları yönetmektir. Daha da önemlisi, konteynerlerdeki birden fazla uygulama replikasını tek bir varlık olarak yönetin. Bu sayede mühendislerin her bir konteyner için endişelenmesine gerek kalmıyor. Container'lardan biri çökerse Kubernetes bunu görecek ve yeniden başlatacaktır.
  • Küme ağı. Kubernetes ayrıca kendi adres alanına sahip küme ağına da sahiptir. Bu sayede her kapsülün kendi adresi vardır. Bir alt bölme, konteynerlerin doğrudan başlatıldığı bir kümenin minimum yapısal birimi olarak anlaşılır. Ayrıca Kubernetes, yük dengeleyici ile Hizmet Keşfi'ni birleştiren işlevselliğe de sahiptir. Bu, manuel IP adresi yönetiminden kurtulmanıza ve bu görevi Kubernetes'e devretmenize olanak tanır. Otomatik durum kontrolleri de sorunların tespit edilmesine ve trafiğin çalışan bölmelere yönlendirilmesine yardımcı olacaktır.
  • Konfigürasyon yönetimi. Çok sayıda uygulamayı yönetirken uygulama yapılandırmasını yönetmek zorlaşır. Bu amaçla Kubernetes'in özel ConfigMap kaynakları vardır. Yapılandırmaları merkezi olarak saklamanıza ve uygulamaları çalıştırırken bunları bölmelere çıkarmanıza olanak tanır. Bu mekanizma, en az on veya yüz uygulama kopyasında yapılandırmanın tutarlılığını garanti etmemizi sağlar.
  • Kalıcı Hacimler. Konteynerler doğası gereği değiştirilemez ve konteyner durdurulduğunda dosya sistemine yazılan tüm veriler imha edilir. Ancak bazı uygulamalar verileri doğrudan diskte saklar. Bu sorunu çözmek için Kubernetes'in bir disk depolama yönetimi işlevi vardır - Kalıcı Birimler. Bu mekanizma, veriler için harici depolamayı kullanır ve kalıcı depolamayı, bloğu veya dosyayı kapsayıcılara aktarabilir. Bu çözüm, verileri çalışanlardan ayrı olarak saklamanıza olanak tanır; bu, aynı çalışanların arızalanması durumunda verileri kurtarır.
  • Yük dengeleyici. Kubernetes'te Deployment, StatefulSet vb. gibi soyut varlıkları yönetiyor olsak da, sonuçta konteynerler normal sanal makinelerde veya donanım sunucularında çalışır. Mükemmel değiller ve her an düşebilirler. Kubernetes bunu görecek ve dahili trafiği diğer kopyalara yönlendirecektir. Peki dışarıdan gelen trafikle ne yapmalı? Trafiği sadece çalışanlardan birine yönlendirirseniz, çökerse hizmet kullanılamaz hale gelir. Bu sorunu çözmek için Kubernetes'in Load Balancer gibi hizmetleri vardır. Kümedeki tüm çalışanlar için harici bir bulut dengeleyiciyi otomatik olarak yapılandırmak üzere tasarlanmıştır. Bu harici dengeleyici, harici trafiği çalışanlara yönlendirir ve durumlarını kendisi izler. Bir veya daha fazla çalışanın müsait olmaması durumunda trafik diğerlerine yönlendirilir. Bu, Kubernetes'i kullanarak yüksek düzeyde kullanılabilir hizmetler oluşturmanıza olanak tanır.

Kubernetes, mikro hizmet mimarilerini çalıştırırken en iyi şekilde çalışır. Sistemi klasik mimariye uygulamak mümkün ama anlamsız. Bir uygulama birden fazla kopyada çalışamıyorsa Kubernetes'te olup olmaması ne fark eder?

Açık kaynak Kubernetes


Açık kaynaklı Kubernetes harika bir şey: Onu yükledim ve çalışıyor. Kendi donanım sunucularınıza, kendi altyapınıza dağıtabilir, tüm uygulamaların çalışacağı master ve işçiler kurabilirsiniz. Ve en önemlisi, tüm bunlar ücretsizdir. Ancak nüanslar var.

  • Birincisi, tüm bunları uygulayacak ve destekleyecek yönetici ve mühendislerin bilgi ve deneyim talebidir. Müşteri kümede tam bir hareket özgürlüğü elde ettiğinden, kümenin performansından kendisi sorumludur. Ve burada her şeyi kırmak çok kolay.
  • İkincisi ise entegrasyon eksikliği. Kubernetes'i popüler bir sanallaştırma platformu olmadan çalıştırırsanız programın tüm avantajlarından yararlanamazsınız. Kalıcı Birimler ve Yük dengeleyici hizmetlerini kullanmak gibi.

Kubernetes: açık kaynak ve satıcıya özel

Şekil 2. k8s mimarisi

Satıcının Kubernet'leri


Bir bulut sağlayıcıyla entegrasyon iki seçenek sunar:

  • İlk olarak, bir kişi basitçe "küme oluştur" düğmesine tıklayabilir ve önceden yapılandırılmış ve kullanıma hazır bir küme elde edebilir.
  • İkinci olarak, satıcının kendisi kümeyi kurar ve bulutla entegrasyonu ayarlar.

Burada nasıl oluyor? Kümeyi başlatan mühendis, kaç çalışana ihtiyaç duyduğunu ve hangi parametrelerle (örneğin, her biri 5 CPU, 10 GB RAM ve örneğin 16 GB diske sahip 100 çalışan) belirtir. Bundan sonra önceden oluşturulmuş kümeye erişim kazanır. Bu durumda yükün başlatıldığı çalışanlar tamamen müşteriye devredilir ancak yönetim düzleminin tamamı satıcının sorumluluğunda kalır (hizmet yönetilen hizmet modeline göre veriliyorsa).

Ancak bu planın dezavantajları vardır. Yönetim düzleminin satıcıda kalması nedeniyle satıcı müşteriye tam erişim hakkı vermez ve bu da Kubernetes ile çalışma esnekliğini azaltır. Bazen bir istemcinin Kubernetes'e LDAP aracılığıyla kimlik doğrulama gibi belirli işlevler eklemek istemesi ancak yönetim düzlemi yapılandırmasının buna izin vermemesi mümkündür.

Kubernetes: açık kaynak ve satıcıya özel

Şekil 3. Bir bulut sağlayıcısından alınan Kubernetes kümesi örneği

Ne seçilir: açık kaynak veya satıcı


Peki Kubernetes açık kaynak mı yoksa satıcıya mı özel? Açık kaynaklı Kubernetes'i alırsak kullanıcı onunla istediğini yapar. Ancak kendinizi ayağınızdan vurma ihtimaliniz çok yüksek. Satıcıyla bu daha zordur çünkü her şey şirket için düşünülmüş ve yapılandırılmıştır. Açık kaynaklı Kubernetes'in en büyük dezavantajı uzman gereksinimidir. Satıcı seçeneğiyle şirket bu baş ağrısından kurtulur, ancak uzmanlarına mı yoksa satıcıya mı ödeme yapacağına karar vermesi gerekecektir.

Kubernetes: açık kaynak ve satıcıya özel

Kubernetes: açık kaynak ve satıcıya özel

Artıları belli, eksileri de biliniyor. Değişmeyen bir şey var: Kubernetes, birçok konteynerin yönetimini otomatikleştirerek birçok sorunu çözüyor. Ve hangisini seçeceğiniz, açık kaynak mı yoksa satıcı mı? Herkes kendi kararını verir.

Makale, #CloudMTS sağlayıcısının Containerum hizmetinin baş mimarı Dmitry Krasnov tarafından hazırlandı.

Kaynak: habr.com

Yorum ekle