Kubernetes, eski ve yeni?

Takip etmek için tıklayın InfoQ , Yapışkan resmi hesap

Programcının teknik kahvaltısını alın

Yazar Zhang Jianfeng

Düzenle Xiaozhi

Monolitten mikro hizmetlere, kurumsal düzeyde uygulama sunucusunun mikro hizmet altyapısı tasarımına evrimi üzerine

Mimari sorunlar

Bir yazılım mühendisi veya sistem mimarı olarak, büyük bir uygulama sistemi kurarken, geliştirilecek uygulama sisteminin yazılım mimarisini göstermek için genellikle bir mimari diyagram çizmemiz gerekir.

Sanırım birçok yazılım geliştiricinin şu sorusu var: Sektör son yıllarda mikro hizmetler ve konteynerizasyondan bahsediyor, bu tür teknolojik değişikliklerin nedenleri nelerdir? Yeni veya orijinal yazılım sistemi ne tür bir teknik mimari sistemi kullanmalıdır? Değiştirilmesi gerekiyorsa ne yapmalıyım?

Umarım bu makaleyi okumak size biraz ilham verir.

teknik arka plan

Uygulama sunucusu, son on yıldaki uygulama geliştirme için ana dağıtım ortamıdır. Örnek olarak Java dil topluluğunu ele alalım. Java EE uygulama sunucusu, Weblogic, Websphere ticari ürünleri, JBoss AS (Wildfly), Glassfish açık kaynak ürünleri, Tomcat, Jetty ve diğer Servlet konteyner sunucuları, Spring dahil olmak üzere yazılım ara yazılım geliştirme alanındaki ana üründür Çerçeve uygulama çerçevesi vb. Bunlar birlikte ticari iş yazılımlarının en önemli parçasını oluşturur.

Container Docker, kapsayıcı düzenleme Kubernetes, vb. Bir kapsayıcı mikro hizmet yazılım teknolojisi dalgası getirmiştir.İnternet şirketleri öncüdür ve yurtiçi ve yurtdışında yazılım tasarım yöntemlerinin reformuna öncülük etmektedir. Cloud Native, mevcut yazılım tasarımında dikkate alınması gereken bir unsur haline gelmiştir.

Peki "geleneksel" uygulama sunucuları ile Kubernetes arasında teknik bir bağlantı var mı? Eğer öyleyse, iç bağlantıları nedir?

Benzerlikler

Profesyonel teknoloji web sitesinde Wildfly uygulama sunucusu etki alanı modelinin eksiksiz JavaEE uygulaması ve kubernetes mimarisi sistem şeması olan iki resim buldum.

Resim kaynağı:

https://kb.novaordis.com/index.php/Wildfly_Domain_Mode_Concepts

Resim kaynağı:

https://x-team.com/blog/introduction-kubernetes-architecture/

Yukarıdaki iki resim, bu iki ürünün tüm teknik mimari detaylarını gösteremez, ancak mimari özelliklerini ve bileşenler arasındaki ilişkiyi tam olarak göstermeyi başarmışlardır.

İki mimarinin birçok benzerliği olduğunu bulduk:

  • Bir ana düğüm var. Kubernetes, Ana Düğüm olarak adlandırılır ve Wildfly'deki etki alanı denetleyicisinin ana bilgisayarı1, ana düğüm olarak da işlev görür.

  • Ana düğüm aracılığıyla birden çok çalışma düğümünü yönetin. Kubernetes'in iki adet Çalışan Düğümü vardır ve Wildfly grafiğinde ayrıca iki çalışan düğümü de host2 ve host3 bulunur.

  • Yönetici, yönetim arabirimi (Rest API) aracılığıyla tüm sistemi yönetir. Kubernetes, API sunucusuna kubectl aracılığıyla erişir, Wildfly, jboss-cli aracı aracılığıyla yönetim arabirimine erişir ve sunucu işleme bileşeni, etki alanı denetleyicisidir. Tabii ki, aynı zamanda grafiksel yönetim araçları da sağlarlar.

  • Çalışan düğümlerde kontrol süreçleri vardır. Kubernetes, kubelet ve kube-proxy'dir ve Wildfly, ana bilgisayar denetleyicisi ve işlem denetleyicisidir. Kubelet ve ana bilgisayar denetleyicisi benzer işlevlere sahiptir. Her ikisi de çalışan düğüm ile ana düğüm arasındaki iletişim rolünü oynar ve düğüm iş sürecini yönetir .

  • Her çalışan düğümünde birden çok çalışan işlem vardır, ancak Kubernetes konteyner tarafından yönetilen bir Kapsüldür ve Wildfly bir JVM süreç yönetimi iş parçacığıdır.

  • Ek olarak, şemada gösterilmemiştir ve mantıksal kavramlar benzerdir:

  • Kubenetes'teki denetleyici yöneticisi, çeşitli işlevlere sahip denetleyici modülleri içerir. Wildlfy'de benzer işlevsel modüller vardır ve etki alanı denetleyicisinde hepsi ölçeklenebilirliğe sahiptir.

  • Rest API'nin harici arayüzü, basit ve anlaşılması kolay Json formatını benimser. Yüksek verimlilik için, her düğüm arasındaki iletişim modu bir ikili veri akışıdır ve şifreleme modu yapılandırılabilir.

  • Çalışan süreçte, Pod ve iş parçacığı farklıdır. Ancak mantık açısından da benzerlikleri vardır: hepsi bağımsız çalışma konularıdır; hepsinin tam bir yaşam döngüsü vardır; Bölmeler ağı, depolamayı ve diğer bilgileri paylaşır ve iş parçacıkları bağlamı geçebilir. Ben şahsen Pod'u bir veya yarım boyut daha yüksek ve daha iyi izolasyona sahip bir "işçi iş parçacığı havuzu" olarak düşünmeyi tercih ediyorum.

  • Farklı düğümlerdeki veya süreçlerdeki hizmet iş birimleri dinamik olarak hizmet grupları oluşturabilir. Wildfly'da bir Sunucu Grubu kavramı vardır, Sunucu Grubunun tüm çalışma birimlerine aynı anda bir uygulama dağıtılabilir; Tanımlanan Etiket üzerinden Kubernetes Podlar seçilebilir, yani belirli işaretlere sahip Podlar filtrelenerek hizmet grubu olarak sağlanabilir. hizmet.

  • Kubernetes, hizmet sağlamak için Hizmete sahiptir. Hizmet tüketicileri için, sonraki Kapsül hizmet sağlayıcılarının bilgileri şeffaftır ve Ingress, hizmet yeteneklerini harici uygulamalara daha da açık hale getirir. Wildfly, hizmet bileşenleri için ters proxy olarak Wildfly-cluster sağlar.Hizmet gibi iptables'ın temelindeki mekanizma aracılığıyla ağ erişim portlarını doğrudan eşleyemese de, aynı zamanda yük kapasitesine göre yönlendirme taleplerinin miktarını ayarlama gibi güçlü bir özelliğe sahiptir. Ingress'in rolüne.

  • Kubernetes, StatefulSet aracılığıyla Persistent Volumes ekleyerek ve başlangıçta aynı durumda çalışma konteynerlerini yeniden oluşturarak durum bilgisi olan bileşenleri destekler. Stateful SessionBean, Servlet oturumu vb. Dahil olmak üzere Wildfly'daki durum yönetimi, durumu birden çok düğüme kopyalamak için Infinispan'ın dağıtılmış mekanizması aracılığıyla gerçekleştirilir. Ayrıca, Kubernates'in durum yönetimi ile mantıksal olarak tutarlı olan uzak bir Infinispan yapılandırma yöntemi vardır.

  • Ana kontrol düğümünün güvenlik yönetimi için, her ikisinde de eksiksiz bir RBAC kullanıcı yönetimi kimlik doğrulama ve yetkilendirme mekanizmasının yanı sıra eksiksiz bir şifreleme yöntemi, anahtar yapılandırma yönetimi ve diğer işlevler bulunur.

  • Java EE teknolojisi her zaman tam bir geliştirme ekosistemi olmuştur. Benzer şekilde, Kubernetes hızla daha büyük bir ekosistem oluşturmuştur. Geliştirme için bazı önemli hususları analiz ediyoruz.

  • JavaEE, kavanozlar oluşturmak, bunları uygulama savaşlarında birleştirmek ve ardından bunları kurumsal eksiksiz uygulamalar kulağına paketlemek gibi bir dizi standart paketleme yöntemine sahiptir. Kubernetes, kapsayıcıları yönetmek için docker paketleme mekanizması olan kapsayıcı görüntülerini kullanır. Docker'ın yanı sıra Kubernetes, Pod konseptini önerir. Genel uygulama dağıtımı için Kubernetes topluluğu şu anda dümen aracı ve grafik paketi formatını sağlamaktadır. Tabii ki, yum aracı tarafından yönetilen rpm formatına da benzer.

  • Kubernetes dinamik genişlemesi, yani ReplicaSets tarafından tanımlanan belirli sayıda örnek oluşturmanın Kubernetes'in en önemli özelliklerinden biri olduğu söylenebilir. JavaEE tarafından tanımlanan Durumsuz SessionBean, uygulama sunucusu uygulamasında, birden çok örneği somutlaştırmak için bir havuz oluşturulur. Örneklerin sayısı çok hassas bir şekilde kontrol edilmese de, örneklerin sayısı konsol aracılığıyla da tanımlanabilir. Örnek havuzu, konteyner tarafından sağlanır. Mevcut örnek sayısını garanti edin.

  • Kubernetes, yapılandırma bilgilerini tanımlamak için ConfigMap'i ve güvenlik yapılandırma bilgilerini tanımlamak için Gizli Anahtarları kullanır. JavaEE, Resource ve Securtiy ek açıklaması gibi benzer tanımlara da sahiptir. Uygulama sunucusu uzantısı açısından, Wildfly kendi xml şemasını tanımlayabilir, kolay ve okunabilir xml yapılandırma bilgileri sağlayabilir ve güvenlik yapılandırma bilgilerini tanımlamak için Security Domain / Realm sağlayabilir.

  • Kubernetes CRD'ye (Özel Kaynak Tanımları) dayalı, orijinal Coreos (daha sonra Red Hat tarafından edinilmiştir) tarafından tanımlanan Operatör Çerçevesi, uygulamaları paketleme, dağıtma ve yönetme için eksiksiz bir yöntem seti tanımlar. Böyle bir araçla, ilki Üçlü yazılım ürünleri, nispeten "standart" bir şekilde kapsayıcıya alınmış ürünler sağlayabilir. Özel Kaynak Tanımları, Kubernetes'in genişletme mekanizmasıdır.Kubernetes'in üç partili uzantısının mantar gibi ortaya çıkacağı öngörülebilir. Buna uygun olarak, Wildfly, işlevlerini genişletmek için Wildfly sunucusunun çekirdeğinde geliştirilebilen bir alt sisteme (alt sistem genişletme mekanizması) sahiptir.Wildfly'nin tüm Java EE'si bir alt sistem aracılığıyla uygulanır. Hepsi Denetleyicinin işlevlerini genişletir ve yönetim komutlarını API sunucusuna bağlar. Tasarım fikirleri şaşırtıcı derecede tutarlıdır!

  • Wildfly çalışan düğümlerinin yönetimi, bilgileri açığa çıkararak veya dağıtılmış veri merkezine veri göndermek için JMX, Java aracısı, Interceper vb. Kullanılarak ana düğüme gönderilebilir (örneğin, jolokia yüklenebilir) ve ardından bağımsız veya birleşik Yönetilecek konsol. Benzer şekilde Istio projesi, trafik dağıtımı, güvenlik yönetimi ve ilke ayarları gibi işlevleri tamamlayan ve konsol tarafından yönetilen kapsül çalışma sürecine bir elçi modülü eklemek için sepet modunu da kullanır.

  • Kubernetes, konteyner düzenleme ürünü olarak bilinir. Sözde düzenleme, farklı uygulama bileşenlerini uygulama tanımlı kurallara göre çalıştırmak ve bağımlılıklarına göre işlemleri başlatmak ve sağlam bir şekilde çalışabilmelerini sağlamaktır. Çeşitli Java EE spesifikasyonları arasında da bağımlılıklar vardır.Örneğin, Webservice Servlet'e dayanır ve Wildfly, bileşenler arasındaki bağımlılıkları da yöneten DeploymentFramework adlı bir bileşene sahiptir.Sunucu, uygulama tarafından tanımlanan son durumu bildirecek ve kendi bağımlılık ilkesini izleyecektir. Uygulamanın nihayet kullanılabilir olduğundan emin olmak için her hizmeti tek tek başlatın.

  • Teknik fark

    Sonuçta Kubernetes, birçok yeni özelliğe sahip gelişmiş bir teknolojidir:

  • Depolama özellikleri açısından Kubernetes, sıradan dosya sistemleri, NFS, bulut S3 ve açık kaynak depolama çözümleri Ceph dahil olmak üzere çeşitli depolamayı bağlayabilir. Wildfly hala standart işletim sistemi dosyalarını ve dizinlerini kullanır. Kubernetes, kapsayıcıları kullanarak dosya kotalarını ve kaynak kullanımını daha rahat bir şekilde tanımlayabilir ve kısıtlayabilir.

  • Ağ özellikleri için Wildfly, ağ IP'sini, bağlantı noktasını, ofset değerini vb. Ayarlayabilen ağ arayüzü yapılandırma özelliklerini tanımlar. Ancak bunlar, Kubernetes'e kıyasla kovada sadece bir düşüş. Hizmet katmanında, Kubernetes, ağ isteklerini eşlemek için iptables ve diğer yöntemleri kullanır ve ticari Kubernetes ürünleri, SDN (yazılım tanımlı ağ) çözümüne katılacaktır. Ağ yönetimi, uygulama sisteminin önemli bir parçası haline gelmiştir.

  • Kubernetes'deki çok önemli bir bileşen zamanlayıcıdır.Bu bileşen Wildfly'da aynı işleve sahip değildir, çünkü kurumsal uygulamaların küme dağıtımı bir grup olarak konuşlandırılmıştır. Wildfly, farklı düğümlere dağıtmak için konsol araçları sağlar. Bu işlem otomatikleştirilebilir ve hatta bazı akıllı bileşenleri "planlamaya" dahil edebilir, ancak yine de Kubernetes tarafından sağlanan programlama yeteneklerinden uzaktır.

  • Çalışma düğümlerinin yönetim ölçeği farklıdır. Kurumsal uygulama sunucularının kümeleri genellikle düzinelerce civarındadır; bu, İnternet'teki binlerce sunucudan birkaç kat daha kötüdür. İşlemler için tutarlılık gereksinimleri de farklıdır ve bunların dağıtılmış dağıtımında ve durum bilgisi için çoğaltma yöntemlerinde farklılıklar vardır.

  • Kurumsal düzeydeki uygulama sunucuları için, uygulama bağlam bilgileri işlemler ve güvenlik gibi bilgileri içerir ve iş parçacıkları arasında aktarılır. Uygulama dağıtıldıktan sonra, güvenlik ve işlem bilgileri mikro hizmetler arasında iletilmeli ve OIDC / Jwt ve TCC / Saga gibi dağıtılmış çözümler kullanılmalıdır. İş hedefleri aynıdır, ancak uygulama yöntemleri çok farklıdır ve ayrıca yazılım mimarisi tasarımına çok yüksek gereksinimler getirir.

  • Özet ve görünüm

    Hiç şüphe yok ki Kubernetes konteyner savaşını kazandı ve hatta konteyner teknolojisindeki en önemli açık kaynaklı ürün olarak docker'ın yerini aldı. Geliştirme mühendisleri ve mimarların da mikro hizmet teknolojisindeki değişikliklere uyum sağlaması ve uygulamaları buluta dağıtması gerekiyor. Bu eğilim çoktan başladı. Aynı zamanda, Kubernetes ve ekolojisi de uygulama geliştirme, işletim ve bakım için daha yüksek gereksinimler ortaya koymaktadır. Bir kuruluş yazılım uygulamaları geliştirirken, uygulama karmaşıklığı, erişim hacmi, işlem gereksinimleri, işletim ve bakım yetenekleri vb. Dahil olmak üzere birçok yönü de göz önünde bulundurmalıdır. Ardından teknik çözümleri ve ara yazılım ürünlerini / bulut bilişim platformlarını seçin. Yazılım tasarımı hiçbir zaman sihirli bir değnek olmadı ve en uygun olanı en iyisidir.

    Bugünün Tavsiyesi

    Okumak için aşağıdaki resme tıklayın

    Orta yaşlı programcılar ne düşünüyor?

    18 Ağustos'ta Pekin'deki teknik insanlar için bir blockchain konferansı düzenleyeceğiz.Konferans, blockchain alanındaki mevcut en son teknolojilere ve uygulamalara odaklanıyor ve yurtiçi ve yurtdışındaki birinci sınıf teknik uzmanları sizinle bloğu değiş tokuş etmeye, paylaşmaya ve keşfetmeye davet edecek. Daha fazla zincir teknolojisi olanağı! Konferansın% 40 indirimli son gününde sıcak işe alımlar devam ediyor! Tıklamak Orijinali okuyun En son sayıları görüntülemek için resmi web sitesine gidin.

    1 Nisan Şakası Günü'nde köpek maması yaymayı unutmayın! Lu Han Guan Xiaotong aynı süveteri giyiyor, idol dramasına benzeyen görünmez şov
    önceki
    Rip van Winkel'in gelini
    Sonraki
    "Evrim": Sürekli teslimat, tüm Ar-Ge sisteminin verimliliğini artırmanın anahtarıdır
    Ekibin küçük bir toplantısı olduğunu "biliyor musun", Xiao Tao pembe etekli bir periye dönüşüyor ve Sheng Baba tıraşlı bir kafayla yakışıklı ve şık.
    Rebecca geri döndü! "Resident Evil" CG filminin çıkış tarihi açıklandı
    "TFBOYS" "Paylaş" 190327 Olaylardan önemli koordinatlara, Yi Yang Qianxi güç toplar ve çiçek açar
    "Her Şey Güzel" ilk tur telif hakkı 14,5 milyon bölüm için satıldı, öğlen güneşi arkasındaki en büyük kazanan oldu
    Hiç rüzgarı duydum
    "EXO" "News" 190327, baş şarkıcının sevecen cazibesine eridi, Zhong Da'nın "Nisan, Çiçek" seçmelerinde ses kaynağı sürprizi yayınlandı!
    Oğlunun yaşamasına yardım eden ve kızını Lehua Seven'ın performansını izlemeye götüren Hong Xin "yıldızların peşinde" neşe dolu
    Mei'an Kasabasında Huangshantou aranıyor
    "Black Mirror Bandersnatch": Gelecek film oyunlaştırması olacak mı?
    Honor Magic 2 büyük pozlama: tam ekran kaydırın + ön ve arka altı lens
    200'den fazla teknik usta için açıklık stratejisi QCon Shanghai 2018 Büyük Açılışı
    To Top