Windows Containers – Overview

By | 02 October 2017

Merhaba,

Uzun zaman önce yazmak istediğim bir makale serisine başlayacak enerjiyi sonunda kendimde buldum. Daha önceden bu konuya ilişkin bir webcast yapmıştım. Ancak temel seviyede bilgi veren bir webcast olmuştu. Bu makale serisinde en ince ayrıntısına kadar elimden geldiğince windows container mimarisini anlatmaya çalışacağım.

Container temel olarak OS katmanında yapılan bir sanallaştırmadır.

Daha önce bildiğimiz ve yoğun olarak kullandığımız sanallaştırma mimarisi hardware sanallaştırma mimarisidir. Donanım kaynakları sanallaştırılmaktadır. Containerda ise aynı OS katmanını kullanan birbirinden izole edilmiş yapılar bulunmaktadır. Bu birbirinden izole containerların her birisi uygulamanın çalışması için gerekli binary’lere sahiptir.

Container’ları sanal makineler ile karşılaştırmak istersek yada Vm yerine neden container seçilmeli sorusuna cevap ararsak, aşağıdaki maddeleri bu sorulara verilecek cevaplar olarak düşünebiliriz.

  • VM’lerin her biri ayrı ayrı yönetim gerektirir.
  • VM’ler çalışması için önceden tanımlanmış kaynaklara ihtiyaç duyarlar.
  • Çalıştırılacak VM sayısına göre host kaynakları da belirlenir. Bu da maliyete yansır.
  • Container’lar oldukça esnek ve VM’e göre çok daha küçük footprint’e sahiptir.
  • Footprint çok küçük olduğundan VM lifecycle’ı için gerekli yönetim iş yükü de ortadan kalkar.
  • Scale-out vm’e göre daha efektiftir.
  • Isolation buradaki anahtar noktadır. Çünkü bu izolasyon sayesinde container içerisindeki her uygulama CPU,memory,filesystem ve diğer gerekli bileşenler açısından kendi OS view’ine sahiptir.
  • Container’lar kullanılacak uygulamaya bağlı olarak belli bir OS type’ına bağlı kalmayı sağlar. Bu lisanslama ve destek maliyetlerinin belirlenmesini basitleştirir. (Çok efektif bir madde değil ama etkisi var :) )
  • Enterprise seviyede yapılan migration path’lerini kolaylaştırır. Çünkü Docker ve Windows host os kullanan bir platformda yapılandırılan containerlar docker ve windows host os kullanan tüm providerlarda herhangi bir konfigürasyon yapmadan çalışırlar. (Burada container’lar mobility bakımından VM’den çok daha efektif)
  • Container mimarisine geçmeden önce uygulamaların container’lar içerisinde çaışacak şekilde modifiye edilmesi gerekir. Bu sebeple container mimarisine geçişte uygulamaların modernize edilmesi de burada göz ardı edilmeyecek bir iş yüküdür.

Temel olarak container’ın tercih edilme sebeplerinden bahsetmiş olduk. Tabi buradaki önemli nokta şu. Container VM’den iyidir diyemeyiz. İkisinin de farklı noktalarda önde olduğu durumlar var ancak container anlattığım için işe biraz daha container tarafından bakacağım :)

Aslında aşağıdaki resim container ve VM’ler için anahtar noktaları ve özellikleri çok basit şekilde göz önüne getiriryor.

Containerları günümüzde uygulamalarımızı moderleştirmemizde aslında bir tetikleyici olarak görebiliriz. Waterfall mimarisinde yazılmış eski uygulamaların N-tier modern microservice mimarisine geçilmesinde uygun bir platform olarak göze çarpmaktadır. Yani Modern microservice mimarisinde yazılan uygulamaları kolaylıkla container’lar içerisinde çalıştırabilirsiniz.

Windows server üzerinde container’ları iki şekilde çalıştırabilirsiniz. Bu iki şekil izolasyon bakımından biraz farklılık göstermektedir.

  1. Windows Server Container:

Bu container tipinde vm yada fiziksel bir windows server host üzerinde (Aynı işletim sisteminde) containerlar birbirlerinden izole şekilde çalışırlar. Ancak aynı OS kernel’ını paylaşırlar. Dolayısıyla güvenlik anlamında tam anlamıyla bir izolasyon yoktur.

  1. Windows Server Container with HyperV Isolation:

Bu mimaride ise containerlar birbirlerinden izole olarak hyperV ortamındaki farklı VM’ler içerisinde çalışırlar. Bu sebeple her biri kendi OS kernel’ına sahip olurlar. Bu hem %100’lük bir izolasyon sağlarken hemde performans anlamında diğer mimariye göre daha öndedir. Bir bakıma izolasyon donanım seviyesine taşınmış olur.

Container mimarisinde belli başlı bazı kavramlar var. Öncelikle bu kavramlardan biraz bahsetmek istiyorum. Çünkü terminolojinin anlaşılabilmesi için bu kavramların netleşmesi önemli.

Container Host:

Container host container’ları üzerinde çalıştıracak yapıdır. Az önce bahsettiğim gibi Windows Server Container yada Windows Server Container with HyperV Isolation tipini kullanmaya göre farklı şekillerde konfigüre edilebilir. Hatta bu mimarileri birbiri ile iç içe de kullanabilirsiniz. Yani sanal bir Hyper-V VM container host olarak yapılandırılabilir. Hatta bu VM yukarıda bahsettiğim iki tipte konfigüre edilerek host olarak yapılandırılabilir.

Container Management:

Windows Server container mimarisinde(HyperV Isolated olsun yada olmasın farketmez) containerların yönetimi için Docker engine kullanılır. (Docker konusuna ilerleyen bölümlerde değineceğim) Docker en önde gelen container platformlarından birisidir. Aynı zamanda şirkete de ismini vermiştir. Windows Server 2016 ile gelen container mimarisi bu önde gelen docker engine’ini kullanmaktadır.

Docker client ve docker engine standart bir API aracılığı ile her iki tipteki windows server container’larını yönetir.

Çok fazla yazıyı tek bir makalede vermek istemiyorum. Bir sonraki bölümde container imajları, container networkleri ve container security bileşenlerinden bahsedeceğim.

Bir sonraki bölümde görüşmek üzere.

Kaynak: Introduction to Containers Ebook.

Kaynak 2: https://docs.microsoft.com/en-us/virtualization/windowscontainers/

Fırat

Leave a Reply