Yayın dünyasında türünün ilk örneği olan Netflix, işletmelerin rekabet üstünlüğünü korumak için en son teknolojiyi nasıl entegre ettiğini canlı bir şekilde gösteriyor.
Netflix, hizmetlerinin bir kısmını konteynerlere taşırken birkaç zorlukla karşılaştı ve bu da konteyner yönetimi platformu Titus'un geliştirilmesine yol açtı.
Netflix artık video akışı, içerik kodlama, öneriler, makine öğrenimi, stüdyo teknolojisi, büyük veri ve dahili araçlar gibi hizmetleri günde toplam 200.000 küme ve yarım milyon kapsayıcıda çalıştırıyor.
Kuruluşlar, sürekli değişen dijital pazara ayak uydurmak için yeni uygulamalar geliştirmek ve mevcut uygulamaları iyileştirmek için konteynerleştirmeyi benimsiyor. IBM® anketine göre, konteyner kullanıcılarının yaklaşık %61'i son iki yıl içinde yeni uygulamalarının en az yarısı için konteynerleri kullandıklarını söylerken, %64'ü önümüzdeki iki yıl içinde mevcut uygulamalarının yarısından fazlasını konteynere almayı planlıyor. Kurumsal uygulama modernizasyon çözümleri bu geçişte hayati önem taşıyor ve işletmelerin rekabetçi ve çevik kalmasına yardımcı oluyor.
Bu blog, uygulama kapsayıcılaştırmanın zorluklarını, faydalarını ve kullanım örneklerini tartışacaktır. Ayrıntılara girmeden önce konteynerizasyonu tanımlayalım.
Uygulama Konteynerizasyonu, yazılım uygulamalarının konteyner adı verilen ayrı paketlerde yürütülmesidir. Uygulama kapsayıcıları, dosyalar, kitaplıklar ve ortam değişkenleri de dahil olmak üzere bir uygulamayı çalıştırmak için gereken her şeyi depolar. Yani uygulamalar, hangi işletim sisteminde bulunursa bulunsun, uyumluluk sorunları yaratmadan sorunsuz bir şekilde çalışır.
Uygulamaların kapsayıcıya alınması, geliştirmeyi hızlandırır, verimliliği artırır ve bunları donanım ve diğer yazılım bağımlılıklarından ayırarak güvenliği artırır. Konteynerler izole edilmiş durumdayken herhangi bir ana bilgisayar işletim sisteminde çalışabilir. Kapsayıcılar Google Arama, YouTube ve Gmail gibi önemli hizmetleri destekler. Google ayrıca kapsayıcıları ve uygulamaları yönetmek için popüler açık kaynaklı platformlar olan Kubernetes ve Knative'i de geliştirdi.
Kapsayıcılar, tek bir sistemde yazılan kodun temsillerini, ilgili konfigürasyonları, bağımlılıkları, kütüphaneleri vb. ile birlikte oluşturur. Bu temsiller, çeşitli platformlarla uyumlu konteyner motorları olarak işlev görür.
Konteynerlerin temel amacı, programlanmış yazılımı çeşitli bilgi işlem ortamlarından ayırmaktır. Bu, geliştirme ortamlarındaki ve uygulamalarındaki farklılıklardan bağımsız olarak farklı platformlarda tutarlı kod yürütülmesini kolaylaştırır.
Ayrıca, konteynerleştirme teknolojisi bir ana işletim sistemi görevi görür. Bununla birlikte, daha önce tartışıldığı gibi ana işletim sistemlerinden farklıdırlar.
Çağdaş iş ortamlarında, konteynerler programları barındırmak için sıklıkla kullanılır ve özellikle aşağıdaki kullanım durumlarında iyi çalışırlar:
Mikro hizmetler
Mikro hizmetlere dayalı uygulamalar, çoğu konteynerlerin içine yerleştirilmiş çok sayıda ayrı parçadan oluşur. Çeşitli kapsayıcılar birlikte organize bir uygulama oluşturur. Bu uygulama tasarımı tekniği, etkili ölçeklendirme ve yükseltmeye fayda sağlar. Artan yükü işlerken uygulamanın tamamı değil, en yüksek yüke sahip konteynerler ölçeklendirilmelidir. Benzer şekilde, programın tamamı yerine bireysel kaplar değiştirilebilir.
CI/CD İşlem Hatları
Container mimarisine alınmış uygulamalar, ekiplerin uygulamaları paralel olarak test etmesine ve Sürekli Entegrasyon/Sürekli Teslimat (CI/CD) işlem hatlarını hızlandırmasına olanak tanır. Ek olarak, kapsayıcıya alınmış bir uygulamanın bir test ortamında test edilmesi, kapsayıcılar ana sistemler arasında taşınabilir olduğundan üretimdeki performansının yakın bir temsilini sağlar.
Tekrarlayan İşler
Toplu ve veritabanı işleri, konteynerlerle iyi çalışan periyodik arka plan görevleridir. Her operasyon konteynerler sayesinde diğer eş zamanlı işlere müdahale etmeden çalışabilmektedir.
DevOps
Bir uygulamanın tutarlı ve hafif çalışma zamanı ortamı, kapsayıcıya alınmış uygulamalarla hızlı bir şekilde oluşturulabilir. Bu, DevOps ekiplerinin uygulamaları diledikleri gibi oluşturmalarına, test etmelerine, başlatmalarına ve hatta yinelemelerine yardımcı olur.
Son derece faydalı olmasına rağmen konteynerlerin bazı sınırlamaları vardır:
Ad alanları, bir ana bilgisayardaki her bir kapsayıcının, ana bilgisayar işletim sisteminden tahsis edilen kaynakları almasına ve kapsayıcının içinde çalışan işlemleri dışındakilerden ayırmasına olanak tanır. Ana bilgisayar işletim sistemindeki herhangi bir güvenlik açığı, aynı işletim sistemi üzerinde çalıştıkları için tüm konteynerleri için tehdit oluşturabilir. Üstelik ağ ayarlarının tehlikeye atılması durumunda bir konteynere erişim sağlayan bir saldırgan, diğer konteynerlere veya ana bilgisayara da kolaylıkla erişebilir.
Çalışan bir konteynerin içerdiği veriler, durdurulduğunda kaybolacaktır. Verileri kaydetmek için kalıcı bir dosya sistemi gereklidir. Çoğu düzenleme aracı kalıcı depolamayı mümkün kılarken satıcıların ürünleri kalite ve uygulama açısından farklılık gösterir.
Konteynerlerin hızlı oluşturulması faydalı olsa da, konteynerlerin yönetilmeyen yayılmasına ve idari karmaşıklığın artmasına da yol açabilir.
Ekipler, hızlı bir şekilde yukarı ve aşağı doğru döndükleri için genellikle çalışan konteynerleri takip etmekte zorlanırlar. Manuel izleme kapsayıcıları sağlamdır çünkü normal ana bilgisayarlardan 12 kat daha hızlı geçiş yaparlar.
Uygulama kapsayıcılaştırma, çeşitli işlevleri donanım bağımlılıklarından ve diğer yazılım bileşenlerinden yalıtarak hızı, verimliliği ve güvenliği artırır. Container mimarisine alınmış uygulamalar aşağıdakileri içeren bir dizi avantaj sunar:
Konteynerli uygulamalar, diğer uygulamalardan ve sistem bileşenlerinden uzakta izole bir ortamda bulunduğundan, bir uygulamada meydana gelen sorunlar diğerlerini veya temeldeki sistem bileşenlerini etkilemez. Bu sınırlama, potansiyel hata olaylarının kapsamını etkili bir şekilde sınırlandırır.
Konteynerli uygulamalar, işletim sisteminden bağımsız oldukları için sunucular, sanal makineler, geliştiricilerin bilgisayarları ve bulut gibi farklı ortamlarda taşınabilir.
Konteynerler, işletim sisteminin tamamını taşımadıkları ve daha hafif oldukları için sanal makinelere göre daha verimlidirler.
Konteynerli uygulamalar, bilgi işlem yeteneklerini ve uygulama katmanlarını paylaşarak bir makinenin kaynaklarını etkili bir şekilde kullanır ve birden fazla konteynerin aynı makinede veya sanal ortamda aynı anda çalıştırılmasına olanak tanır.
Artan uygulama taleplerini karşılamak için konteyner örneklerinin arttırılması, uygulama konteynerleştirmesinde sorunsuz bir süreçtir.
VM'ler ve kapsayıcılar belirli bir hesaplama kaynağını 'sanallaştırmaya' odaklanırken, kapsayıcılar genellikle VM'lere göre tercih edilir. Bunun nedeni, VM'lerin konteynerizasyon teknolojileriyle karşılaştırıldığında daha fazla ek yük gerektirmesidir.
İşletim sistemi ne olursa olsun, sanal makinelerin (VM'ler) desteklediği bir diğer avantaj, bunun bir şirketin birden fazla sunucuyu sanal olarak bir veya daha fazla sistemden çalıştırmasına olanak sağlamasıdır. Konteynerler ise bir uygulamayı yönetir ve hafif oldukları için örnekleri saniyeler içinde açıp kapatabilirler.
Konteynerleştirmenin şirketlerin maliyetleri düşürmesine nasıl yardımcı olduğunu anlamak için örneklere bakalım.
Zorluk : Spotify, platformun aktif kullanıcı sayısında bir artış yaşandığında ve aylık 200 milyonun üzerinde aboneye ulaştığında artan iş yükünü yönetmede zorluklarla karşılaştı.
Çözüm : Bunu halletmek için Spotify-
Daha önce sanal makinelerde (VM'ler) çalışan mikro hizmetlerini kapsayıcı hale getirdi.
Daha sonra Helios olarak adlandırılacak bir konteyner düzenleme platformu geliştirildi. Bu değişiklikler geliştirme hızını artırmayı ve maliyetleri düşürmeyi amaçlıyordu.
Sonuç : Uygulama açısından şirket -
Konteynerleştirme aracılığıyla yönetilen iş yükleri, kümeler ve örnekler.
Tüm Spotify kapsayıcılarını ve sunucularını yönetmek için Docker tabanlı bir orkestrasyon platformu kuruldu. Helios, konteynerleri barındıran sunucularla etkileşim kurmak için bir HTTP API'sine sahipti.
Geliştirme ve operasyonel görevleri hızlandırmak için Docker ile entegre Kubernetes.
Zorluk : Gazete devi Financial Times, platformunda muazzam içerikle uğraştı. Ekibin hedefi AWS sunucularının işletimiyle ilgili maliyetleri en aza indirmekti.
Çözüm : Bunu, çerçevelerini yükselterek ve konteynerlere geçerek başardılar, bu da bulut sunucusu yönetim maliyetlerinde %80'lik bir azalma sağladı. Docker'ı konteyner olarak kullanırken kullandıkları bazı stratejiler şunlardır:
Sonuç : Geliştirme ekibi, teknoloji kümesinin sağlığını desteklemeye ve sunucu maliyetlerini en aza indirmeye odaklandı. Sonuç olarak onlar-
Kubernetes'i temel alan özel bir konteyner düzenleme platformu oluşturuldu.
150 mikro hizmetten oluşan teknoloji yığınını kapsayıcıya aldı.
Zorluk : Pinterest, sitede yayınlanan çok sayıda görsel için ek çalışma ve barındırma maliyetleriyle uğraşmak zorunda kaldı. Uygun yatırımlar yapabilmek için yeni teknoloji arayışına girdi.
Çözüm : Ekibin amacı:
Sonuç : İşte Pinterest'in uzun vadede ağır harcamalardan kaçınmasına yardımcı olan konteynerleştirilmiş süreçler:
Hizmete özgü tüm bağımlılıklar, hizmet kapsayıcıları olarak adlandırdıkları şeye entegre edildi. Bu yöntem, tüm geliştirme sistemleri arasında yalnızca bir AMI'nin aktarılmasını sağlar.
Gerektiğinde konteynerleri başlatmak ve durdurmak için Telefig adında bir araç geliştirildi. Araç, kapsayıcıyı etkileyen tüm bağımlılıkların yönetilmesine yardımcı olur.
Konteyner düzenleme metodolojileri uygulandı. Toplu görevleri birleştirmek için çok kiracılı bir küme sistemi kurar.
Yukarıdaki örnekler, konteynırlaştırmanın maliyetleri azaltabileceğini ve üretkenliği artırabileceğini göstermektedir. Spotify, Financial Times ve Pinterest gibi ana akım şirketler, ek iş yükleri ve operasyonel maliyetlerin üstesinden gelmenin yanı sıra geliştirme ve teslimat süreçlerinin verimliliğini artırmanın getirdiği zorlukların üstesinden gelmek için kapsayıcıları kullandı. Konteynerleştirme yalnızca kaynak yönetiminin etkili bir yolu olmakla kalmaz, aynı zamanda karmaşık ortamlarda değişimi ve büyümeyi de destekler.
Container mimarisine alınmış uygulamalara yönelik popüler platformlardan bazıları şunlardır:
Liman işçisi
Docker, ortak bir işletim sistemi (OS) üzerinde sanallaştırılmış uygulama kapsayıcılarının yanı sıra ilgili araçlardan oluşan bir ağ oluşturmak, dağıtmak ve denetlemek için kullanılan açık kaynaklı bir yazılım platformudur.
LXC
LXC, araçlar, şablonlar, kitaplıklar ve dil bağlantılarından oluşan bir Linux kapsayıcı çalışma zamanıdır. Oldukça basit, son derece uyarlanabilir ve yukarı akış çekirdeği tarafından desteklenen neredeyse tüm koruma özelliklerini içeriyor.
rkt
Rocket olarak da adlandırılan rkt, konteynerli uygulamalarınız üzerinde size daha fazla esneklik ve kontrol sağlarken, bireysel konteynerleri yönetmenize veya Docker konteynerleriyle çalışmanıza olanak tanıyan bir konteyner motorudur.
CRI-O
Konteyner yönetimi platformu için Container Runtime Interface (CRI), OCI uyumlu çalışma zamanlarına olanak tanır. Kubernetes ile Docker konteynerleri yerine sıklıkla kullanılmaktadır.
Standart konteynerli uygulama kurulumunun temel bileşenleri üç ana unsurdan oluşur:
Konteyner Motorları
Docker konteyneri, CRI-O, Containerd ve Windows Containers gibi araçlar, uygulamaları yönetmek için gereken yönetim giderlerini azaltır ve bunların başlatılmasını ve ortamlar arasında geçiş yapılmasını kolaylaştırır.
Konteyner Orkestratörleri
Kubernetes ve OpenShift gibi platformlar çok sayıda konteyneri yönetir, dağıtımı otomatikleştirir ve sorunsuz çalışmayı garanti eder.
Yönetilen Kubernetes Hizmetleri
Amazon EKS ve Google GKE gibi platformlar Kubernetes'in yönetimini kolaylaştırır. Daha az deneyime sahip kuruluşlar için bile kurulum ve işletimi basitleştirirler.
Konteynerleştirme, DevOps'un sorunsuz ve başarılı bir şekilde uygulanmasında çok önemli bir rol oynar ve bir sistem üzerinde yerel olarak oluşturulması zor olabilecek uygulamaların geliştirilmesini destekler. İster startup ister büyük bir kuruluş olsun, konteynerleştirme çeviklik, taşınabilirlik, esneklik ve hız sunar. Konteynerler geliştirme, test etme ve üretim gibi çeşitli ortamları aynı hale getirir. Dolayısıyla farklı sunucuların aynı yazılımı çalıştırdığından emin olmak için operasyon ekiplerine güvenmenize gerek yok.
Docker, yazılım geliştiricilerin uygulamalarını standartlaştırılmış izole kaplar halinde paketlemesine olanak tanıyan, yaygın olarak kabul edilen bir konteynerleştirme biçimidir. Docker, temel altyapısından bağımsız olarak herhangi bir sistemde uygulama yürütmeyi basitleştirir.
Teorik olarak çoğu uygulama kapsayıcıya alınabilir ancak stratejinin başarılı olup olmayacağı uygulamanın tasarımı, bağımlılıkları ve kaynak gereksinimleri gibi faktörlere bağlıdır. Bu nedenle, konteynerleştirmenin uygulanıp uygulanamayacağını ve faydalarını belirlemek için her uygulamanın kontrol edilmesi gerekir. Web uygulamaları, mikro hizmetler, durum bilgisi olmayan uygulamalar, geliştirme ve test ortamları ve CI/CD işlem hatları, kapsayıcıya alınabilecek uygulamalara örnektir.
Konteynerizasyon teknolojisi gelişiyor ve hızla genişliyor. DevOps alanında Kubernetes ve Docker, pazar taleplerini karşılamak için güncellenmeye devam ettikleri için geliştiriciler arasında ilgi görüyor. Mikro hizmet mimarisi ivme kazandıkça bu araçlar ekiplerin konteynerleri ve altyapıyı yönetmesini kolaylaştırıyor. Başka bir deyişle, yeni özellikler daha hızlı bir şekilde kullanıma sunularak devam eden geliştirme ve teslim sürecine sorunsuz bir şekilde uyum sağlayabilir.