Google'daki Container'lar

Uygulama geliştirmenin ve dağıtmanın daha iyi bir yolu

Ücretsiz Deneyin Belgeleri Göster
Google'ın Tarzı

Gmail'den YouTube'a ve Arama'ya kadar, Google'da her şey container'larda çalışır. Container kullanmak, geliştirme ekiplerinizin hızlı bir şekilde hareket etmesini, yazılımları verimli bir şekilde dağıtmasını ve benzersiz bir ölçekte çalışmasını sağlar. Her hafta, iki milyardan fazla container'la işe başlıyoruz. Geçtiğimiz on yıl boyunca, üretimde container'a alınmış iş yüklerini çalıştırma hakkında birçok bilgi edindik ve topluluğumuzla bu bilgileri paylaştık. Edindiğimiz bilgileri Linux çekirdeğine cgroup'lar eklediğimiz ilk yıllardan, şirket içi araçlarımızın tasarımlarını Kubernetes projesi olarak açık kaynaklı bir şekilde yayınladığımız günlere kadar paylaşmaya devam ettik. Geliştiricilerin ve her büyüklükten işletmenin en son container yeniliklerinden yararlanması için bu uzmanlıkları Google Cloud Platform'da bir araya getirdik.

Bulut içine gömülü container'ları olan kargo gemisi. Arka planda bir balina yüzüyor.
Container'lar 101: Container nedir?

Container'lar, uygulamaların gerçekte çalıştığı ortamdan soyutlanabileceği mantıksal bir paketleme mekanizması sunar. Bu ayırma; hedef ortamın özel bir veri merkezi, herkese açık bulut veya geliştiricinin kişisel dizüstü bilgisayarı olup olmamasından bağımsız olarak container tabanlı uygulamaların kolay ve tutarlı bir şekilde dağıtılmasını sağlar. Container kullanmak, görevlerin açıkça birbirinden ayrılmasına imkan tanır. Geliştiriciler uygulama mantığına ve bağımlılıklara odaklanırken, BT operasyon ekipleri özel yazılım sürümleri ve uygulamaya özgü yapılandırmalar gibi uygulama ayrıntılarıyla ilgilenmek zorunda kalmadan dağıtıma ve yönetime odaklanabilir.

Sanallaştırılmış ortamlarda çalışanlara göre container'lar genellikle sanal makinelerle (VM'ler) karşılaştırılır. Sanal makineleri muhtemelen biliyorsunuzdur. Bu makinelerde Linux veya Windows gibi konuk işletim sistemi, temel donanıma sanallaştırılmış erişim sağlayarak ana makinenin işletim sisteminin üzerinde çalışır. Sanal makinelerde olduğu gibi, container'lar da uygulamanızı kitaplıklar ve diğer bağımlılıklarla birlikte paketlemenizi sağlar. Böylece yazılım hizmetlerinizi çalıştırmanız için size izole ortamlar sunulur. Yine de aşağıda da görebileceğiniz üzere container'lar, geliştiriciler ve BT operasyon ekipleri için çok daha hafif bir birim sunduğundan ve pek çok avantaj içerdiğinden benzerlikler bunlarla sınırlı kalır.

Sanal Makineler ve Container'ların karşılaştırıldığı şema.
Sanal Makinelerde şu birimler bulunmaktadır (görselleştirme için üst üste dizilmiştir): Uygulama, Kutular/Kitaplıklar, Konuk İşletim Sistemi, Hipervizör, Ana İşletim Sistemi, Altyapı. Container'larda şu birimler bulunmaktadır (görselleştirme için üst üste dizilmiştir): Uygulama, Kutular/Kitaplıklar, Container Çalışma Zamanı, Ana İşletim Sistemi, Altyapı.
Neden Container'lar?

Container'lar, donanım grubunu sanal makine yaklaşımıyla sanallaştırmak yerine işletim sistemi seviyesinde sanallaştırarak birden fazla container'ın doğrudan işletim sistemi çekirdeğinin üzerinde çalışmasını sağlar. Böylece container'ların çok daha hafif olması sağlanır. İşletim sistemi çekirdeğini paylaşır, çok daha hızlı bir şekilde başlatılır ve bir işletim sisteminin tamamını önyüklemek yerine belleğin yalnızca belirli bir oranını kullanır.

Birçok container biçimi mevcuttur. Docker; Google Cloud Platform ve Google Kubernetes Engine'de desteklenen, popüler ve açık kaynaklı bir container biçimidir.

Peki neden Korumalı Alan?

Container'lar, aralarında açıkça bağlantı kurmadığınız sürece birbirlerinden uygulamalar depolar. Böylece bağımlılık veya kaynakların çakışması hakkında endişelenmenize gerek kalmaz. Her bir hizmet için açık kaynak sınırları ayarlarsınız. Daha da önemlisi, uygulamalarınız doğrudan ana makinenin işletim sisteminde çalışmadığından ek bir güvenlik katmanı sağlanır.

Tutarlı Ortam

Container'lar, geliştiricilere diğer uygulamalardan izole edilmiş tahmin edilebilir ortamlar oluşturma olanağını sağlar. Container'lar, programlama dili çalışma zamanlarının veya diğer yazılım kitaplıklarının belirli sürümleri gibi uygulamanın ihtiyaç duyduğu yazılım bağımlılıklarını da içerebilir. Geliştiricinin bakış açısından her şeyin, uygulamanın dağıtıldığı yerden bağımsız olarak tutarlı olacağı garanti edilmiştir. Bunların tümü verimliliğe katkıda bulunur: Geliştiriciler ve BT operasyon ekipleri ortamlardaki farklılıklarla ilgili hataları ayıklarken ve teşhis ederken daha az zaman, kullanıcılar için yeni işlevler sunarken ise daha fazla zaman harcar. Böylece geliştiriciler, geliştirme ve test ortamlarında, üretim sırasında kesinlikle hayata geçecek varsayımlarda bulunabileceğinden daha az hatayla karşılaşılır.

Her Yerde Çalıştırın

Container'lar, neredeyse her yerde çalışarak geliştirme ve dağıtımı büyük ölçüde kolaylaştırır. Linux, Windows ve Mac işletim sistemlerinde, sanal makinelerde veya çıplak bilgisayarda, geliştiricinin makinesinde ya da şirket içindeki veri merkezlerinde ve elbette herkese açık bulutta çalışabilir. Container'lar için Docker görüntü biçiminin popüler olması, taşınabilirliği daha da kolay hale getirir. Yazılımınızı nerede çalıştırırsanız çalıştırın, container'ları kullanabilirsiniz.

İzolasyon

Container'lar, CPU, bellek, depolama alanı ve ağ kaynaklarını işletim sistemi seviyesinde sanallaştırarak geliştiricilere işletim sisteminin, diğer uygulamalardan izole edilmiş korumalı alanlı bir görünümünü sunar.

  Container'ın Avantajları Sanal Makinenin Avantajları
Tutarlı Çalışma Zamanı Ortamı
Uygulama Korumalı Alanı
Diskte Az Yer Kaplama  
Düşük Ek Yük  
Koddan Uygulamalara

Container'lar, uygulamanızı ve bağımlılıklarını, sürüm kontrollü olabilecek tek bir kısa manifest'te paket haline getirmenizi sağlar. Böylece uygulamanız, ekibinizde geliştiriciler ve kümenizdeki makineler arasında kolayca çoğaltılabilir.

Yazılım kitaplıklarının kod parçalarını paket haline getirmesi ve böylece geliştiricilerin mantığı kullanıcı kimlik doğrulamasına ve oturum yönetimine benzer şekilde soyutlaması gibi, container'lar uygulamanızın bir bütün olarak paketlenmesini sağlayarak işletim sistemini, makineyi ve kodun kendisini soyutlar. Hizmet tabanlı bir mimariyle bir araya geldiğinde, geliştiricilerin gerekçelendirmesi istenen birimin tamamı daha küçük hale gelir ve böylece daha fazla çeviklik ve verimlilik sağlanır. Bunların tümü, uygulamalarınızın geliştirilmesini, test edilmesini, dağıtılmasını ve genel olarak yönetimini kolaylaştırır.

Monolitik ve Hizmet Tabanlı Mimari

Container'lar, en iyi hizmet tabanlı mimarilerde çalışır. IO'dan uygulama işlemeye ve oluşturmaya kadar uygulamanın her parçasının birbirine geçtiği monolitik mimarilere karşılık, hizmet tabanlı mimariler bu parçaları farklı bileşenlere ayırır. Bu ayırma ve iş bölümü, hizmetlerinizin diğer hizmetler çökse bile çalışmaya devam etmesini sağlayarak uygulamanızın tamamını daha güvenilir kılar.

Bileşenlere ayırma, daha hızlı ve daha güvenli geliştirme imkanı da sağlar. Daha küçük kod tabanları daha kolay bir şekilde yönetilir ve hizmetlerin ayrılması sayesinde çıkışlar için belirli girişleri test etmek kolaylaşır.

Container'lar, her container'ın durumunu kontrol edebildiğiniz, her hizmeti belirli kaynaklarla sınırlayabildiğiniz ve hizmetleri birbirlerinden bağımsız olarak başlatıp durdurabildiğiniz için hizmet tabanlı uygulamalarda harika bir seçenektir.

Container'lar, kodu soyutlaştırdığından ayrı hizmetleri kara kutular olarak değerlendirmenizi sağlar ve böylece geliştiricinin ilgilenmesi gereken alan daha da küçülür. Geliştiriciler birbirlerine bağlı olan hizmetler üzerinde çalıştığında, doğru ortamı ayarlamak ve sorunları önceden gidermek üzere zaman harcamak zorunda kalmadan belirli bir hizmet için kolayca container başlatabilir.

Kubernetes: Üretim Düzeyinde Container Düzenleme

Şirket içi küme yönetim sistemimiz olan Borg'dan o kadar memnun kaldık ki öğrendiklerimizi alıp açık kaynaklı bir proje olan Kubernetes'e dahil ettik. Artık siz ve diğer şirketler, uzun yılların verdiği deneyimlerimizden yararlanabilirsiniz. “k8s” olarak da bilinen Kubernetes, container'ın otomatik olarak düzenlenmesini, yani makinelerinizin ve hizmetlerinizin sizin için yönetilmesine imkan tanıyarak güvenilirliğinizi artırır ve DevOps için harcamanız gereken süreyi ve kaynakları azaltır. Ayrıca, bu görevlerin getirdiği baskılardan da uzak kalmanızı sağlar.

Kubernetes, uygulamanızı dağıtmak ve yönetmekle ilişkili her şeyi daha kolay hale getirir. Kubernetes, kullanıma sunma ve geri alma işlemlerini otomatik hale getirir ve işler kötüye gitmeden önce bir öğeyi hatalı bir şekilde kullanıma sunmanızı önlemek için hizmetlerinizin durumunu izler. Hizmetleriniz için sürekli olarak durum kontrolleri de çalıştırır, çökmüş veya durmuş container'ları yeniden başlatır ve hizmetleri yalnızca başarıyla çalıştıklarını onayladıktan sonra istemcilere sunar. Ayrıca Kubernetes, kullanıma göre hizmetlerinizi otomatik olarak yukarı veya aşağı ölçeklendirecek ve böylece yalnızca ihtiyacınız olan şeyi, ihtiyacınız olduğu anda çalıştırmanızı sağlayacaktır. Container'larda olduğu gibi, Kubernetes de kümenizi bildirimli olarak yönetmenize imkan tanıyarak kurulumunuzun sürüm kontrollü olmasını ve kolayca yönetilmesini sağlar.

Kubernetes'in Özellikleri
  • Otomatik kullanıma sunma ve geri çekme işlemleri
  • Hizmet durumu izleme
  • Otomatik hizmet ölçeklendirme
  • Bildirimli yönetim
  • Karma dağıtımlar dahil, her yerde dağıtım

Belki de en önemlisi, Kubernetes'in her yerde kullanılacak şekilde tasarlanmasıdır. Böylece yerinde dağıtımlarda, herkese açık bulutlarda ve bunlardan oluşturulan karma dağıtımlarda düzenleme yapabilirsiniz. Bu, her şeyi ihtiyaçlarınıza uygun hale getirerek altyapınızın kullanıcılara bulundukları yerde ulaşmasını, uygulamalarınızın daha yüksek kullanılabilirliğe sahip olmasını ve şirketinizin güvenlik ve maliyetle ilgili konuları dengelemesini sağlar.

Kubernetes karma bulut: Uygulamanız Kubernetes'te çalışır ve Diğer Bulutlara, GCP'ye ve Veri Merkezinize dağıtılabilir.
Google'daki Kümeniz

Elbette Kubernetes, en iyi Google Cloud Platform'da çalışır. Google Kubernetes Engine, hızla ayarlarınızı yapıp üretime hazır hale gelmenizi sağlayan, birinci sınıf bir yönetilen Kubernetes çözümüdür.

Kubernetes Engine, tümüyle container'ları en iyi tanıyan Google güvenilirlik mühendisleri tarafından yönetilir. Böylece kümeniz yüksek oranda kullanılabilir ve güvenilir olur. Stackdriver Monitoring, Logging ve teşhis gibi tüm GCP hizmetleri, Identity and Access Management ve Google'ın sınıfının en iyisi ağ iletişimi altyapısıyla sorunsuz bir şekilde entegre edilir.

Kubernetes Engine Özellikleri
  • Yönetilen açık kaynaklı Kubernetes
  • %99,5 HDS ve entegre çok bölgeli dağıtımlarla yüksek kullanılabilirlik
  • Diğer GCP hizmetleri ile sorunsuz entegrasyon
  • Sektördeki en iyi fiyat performans oranı
  • Esneklik ve şirket içi kümeleriniz veya diğer bulut sağlayıcılarla birlikte çalışabilme
  • Google kalitesinde yönetilen altyapı

Ama biz size seçenekler sunmayı seviyoruz. Google Cloud Platform, container'larınızı çalıştırmanız için size kapsamlı seçenekler sunar. Google Cloud Run ile tümüyle yönetilen ortam, Kubernetes Engine ile küme yönetimi ve birinci sınıf fiyat performans oranına sahip Google Compute Engine ile kendi başınıza kullanıma sunabileceğiniz altyapı gibi birçok seçenekle Google Cloud Platform'da container'ları çalıştırmak için kendi ideal çözümünüzü bulabilirsiniz.

Eksiksiz Container Çözümü

Dahası da var. Google Cloud Platform, geliştirmeden üretime container'ları kullanmak için ihtiyacınız olan araçları da sağlar. Cloud Build ve Container Registry, Google'ın yüksek güvenlik standartlarından ve birinci sınıf ağından yararlanarak Docker görüntüsünün depolanmasını ve yönetilmesini sağlar. Google'ın Container İçin Optimize Edilmiş İşletim Sistemi, Docker ve Kubernetes çalışma zamanlarının önceden yüklenmiş olarak sunulduğu basit ve son derece güvenli bir işletim sistemi sağlar. Container yönetimi, tamamen GCP'de gerçekleşir.

Derleme: Container Builder, Depolama: Container Registry, Çalıştırma: Container İçin Optimize Edilmiş İşletim Sistemi, Düzenleme: Kubernetes Engine

"Container yönetim sistemleri oluştururken on yıl boyunca elde ettiğimiz deneyimler bize çok şey öğretti ve öğrendiklerimizin çoğunu Kubernetes'e, yani Google'ın en son container yönetim sistemine entegre ettik. Sistemin hedefi, programcının verimliliğinde önemli artışlar sağlamak ve hem manuel hem de otomatik sistem yönetimini kolaylaştırmak için container'ların olanaklarını geliştirmektir."

"Borg, Omega ve Kubernetes: On yılda üç container yönetim sisteminden öğrendiklerimiz" Google LLC, 2016