Arşiv

Archive for the ‘Docker’ Category

235: vSphere Docker Volume v0.10

Konteyner yapılarının en verimli olduğu kullanım alanları, üzerlerinde veri tutmayan, kullanılıp atılabilen (disposable) uygulama parçalarını barındırdığı senaryolar. Ancak her konteyner bileşeni için bu durum elbette geçerli olamayacaktır, hatta çoğu senaryoda konteyner yaşam döngüsü ile verilerin yaşam döngüsü birbirinden bağımsız olması gerekecektir. Bu ihtiyacı gidermek amacı ile Docker, 1.8.0 versiyonu ile birlikte “volume plugin” mekanizmasını hayata geçirdi. Bu sayede, ilgili konteyner yok olsa bile verilerin devamlılığı sağlanabiliyor.

Volume plugin mekanizamasını hayata geçirirken, Docker kendi sürücüsünü varsayılan olarak entegre etti, ancak üçüncü parti firmaların da geliştirmeleri sonucunda kendi sürücülerini de sisteme dahil edebilmelerine de olanak sağladı (örnek: Flocker, ConvoyRex-Ray, vb). Eğer Docker’ın kendi standard sürücüsünü kullanmak istersek, aşağıdaki şekilde bir konteyner çalıştırabiliriz.

docker run –rm -it -v /kaynak_klasor:/hedef_klasor busybox

Bu komut sonrasında shell açılacaktır ve host üzerinde yer alan kaynak_klasor, konteyner içerisinde hedef_klasor olarak mount edilecektir. Shell’den çıktığımızda ise konteyner yok olacak ancak klasör üzerinde yapmış olduğumuz değişiklikler saklanacaktır. Bu etkili bir yöntem olmakla birlikte önemli bir dezavantajı vardır, üzerinde çalışılan hosta bağımlıdır, bu da konteynerlerin en önemli avantajı sayılabilecek taşınabilirlik özelliğini kaybetmesine sebep olacaktır.

docker-volume-vsphere0vSphere Docker Volume, vSphere üzerinde oluşturulan Docker konteynerler için persistent volume oluşturabilmek amacı ile ilerleyen açık kaynak bir projedir ve şu anda 0.10 versiyonundadır. vSphere üzerinde vSAN, VMFS ve NFS gibi tanımlı diskler üzerinde tanımlanabilir ve bu sayede erişilebilirlik ve yedeklilik unsurlarını beraberinde Docker ekosistemine taşıyabilir. Temel olarak yaptığı, docker komutları ile bir VMDK oluşmasını tetiklemek ve konteynerlerin bu VMDK’e erişimini sağlamak.

Sistemin çalışabilmesi için üç adet bileşene ihtiyacımız var.

  • vSphere Data Volume Driver: ESXi üzerine VIB paketi olarak kurulur.
  • vSphere Docker Volume Plugin: Docker Host üzerinde RPM paketi olarak kurulur.
  • Docker Host üzerinde vmtools servisinin kurulmuş olması gerekir.

docker-volume-vsphere1

Paketleri indirmek için, projenin GitHub üzerinde bulunan sürüm sayfasını kullanabiliriz. ESXi 6.0 ve PhotonOS kullanacağınız senaryoda indirmemiz gereken paketler aşağıdaki gibi olacaktır.

VIB paketinin kurulumu: İndirdiğimiz offline bundle paketini esxi sunucusunun erişebileceği bir yere kopyalar ve esxcli komutu ile kurabiliriz. Bu paket imzalanmamış olduğundan dolayı –no-sig-check parametresini kullanmamız gerekecektir. Restart gerektirmeyecektir ve servis otomatik başlayacaktır.

esxcli software vib install -d /tmp/vmware-esx-vmdkops-0.10.04f085b.zip –no-sig-check -f
/etc/init.d/vmdk-opsd status

RPM paketinin kurulması: PhotonOS senaryosunda vmtools kurulu geldiğinden sadece rpm paketinin kurulması yeterli olacaktır. Docker versiyon gereksinimi 1.9 ve ötesidir ancak PhotosOS ile birlikte 1.11 versiyonu geldiğinden dolayı sorun olmayacaktır.

rpm –install docker-volume-vsphere-0.10.04f085b-1.x86_64.rpm
systemctl status docker-volume-vsphere

Tüm hazırlıklar tamamlandıktan sonra docker komutları ile vmdk seviyesinde persistent disk yaratabilir durumdayız. İlgili komut dizilimi ve önemli olabileceğini düşündüğüm parametreler aşağıdaki gibidir. İsim ve sürücü haricindeki parametreler zorundu değildir.


docker volume create --name=YeniVolume --driver=<vmdk|photon> \
-o size=boyut<mb|gb|tb> \
-o diskformat=<zeroedthick|thin|eagerzeroedthick> \
-o vsan-policy-name=politika_ismi \
-o attach_as=<independent_persistent|persistent> \
-o access=<read-only|read-write> \
-o clone-from=BaskaVolume

Gereksinimleri tamamlayıp, temel yapısı üzerinde de durduktan sonra, artık PhotonOS bir sunucu üzerinde volume oluşturabiliriz. Aşağıdaki komut, VMFS01 isimli datastore üzerinde bir vmdk oluşturacaktır. ls ve inspect komutları ile de detaylarını görebiliriz.

docker volume create –driver=vmdk –name=vol1@VMFS01 -o size=1gb

docker-volume-vsphere2

Artık bu volume içerisine veri yazabiliriz. Aşağıdaki komut bir adet photon imajı açacak, vol1 isimli volume /klasor1 olarak mount edecek, hosts dosyasını kopyalayacak ve sonrasında oluşturulan konteyneri yok edecektir. Normal şartlarda imajın yazılabilir katmanına yazılan verinin silinmesini bekleriz ancak docker volume üzerine yazdığımız bu veri varlığını koruyacak ve yeni, sıfır bir konteyner oluşturduğumuzda veri erişilebilir olacaktır. Bir sonraki komutta ise yeni bir konteyner oluşturup, bu sefer /klasor2 olarak mount edeceğiz ve verinin erişilebilir olduğunu göreceğiz.

docker run –rm -v vol1:/klasor1 demoharbor.demo.local/library/photon:1.0 cp /etc/hosts /klasor1/deneme
docker run –rm -v vol1:/klasor2 demoharbor.demo.local/library/photon:1.0 cat /klasor2/deneme

docker-volume-vsphere3

vSphere tarafındaki görüntüsü ise, VMFS01 datastore’u içerisinde, vol1 isimli bir vmdk dosyası olacaktır.

docker-volume-vsphere4

Kategoriler:Docker, VMware Etiketler:

213: Kurumsal ortamlarda docker çalıştırmak

Kurumsal bir ortam içerisinde container yapılarından faydalanmak istediğiniz durumda, akla ilk gelen mantıklı çözüm lokal bir registry oluşturmak ve imajlarınızı buradan pull/push etmek olacaktır. Ancak bu yazıda, konuyu daha basitten alıp, ilerleyen zamanlarda bu entegrasyonlardan söz etmeyi planlıyorum.

Proxy tanımlamaları:

Kurumsal bir ortamda, docker hostlarımızın muhtemelen docker hub’a direk bir erişimi olmayacaktır, Bu yüzden ilk olarak docker servisi için proxy tanımı yapmamız gerekir. Aşağıdaki tanımlamalar, Photon OS için geçerli olacaktır ve farklı işletim sistemlerinde farklılık gösterebilir.

Öncelikle bu ekstra tanımlama için yeni bir klasör ve altında konfigürasyon dosyası oluşturulur.

mkdir /etc/systemd/system/docker.service.d
touch /etc/systemd/system/docker.service.d/http-proxy.conf
vi /etc/systemd/system/docker.service.d/http-proxy.conf

Dosya içerisine aşağıdaki satırlar eklenir.

[Service]
Environment=”HTTP_PROXY=http://username:password@proxy.domain.com:8080/”
Environment=”NO_PROXY=localhost,*.domain.com”

Dosya kaydedildikten sonra, docker servisi yeniden başlatılır.

systemctl daemon-reload
systemctl restart docker

Tanımladığımız environment parametrelerini aşağıdaki komut ile görebiliriz.

systemctl show –property Environment docker

Tarball olarak taşımak:

docker-portabilityAncak belirli senaryolarda proxy üzerinden bile public repository’lere erişim belirli kurumlar tarafından yasaklı olabilir. Bu durumda uygulayabileceğimiz tek çözüm, container yapılarının taşınabilirlik özelliklerinden faydalanmak.

Container yapılarının bir çok faydasını sayabiliriz ancak piyasa üzerinde bu karar popülarite kazanmasının başlıca sebeplerinde biri, portability ve mobility özelliklerinin üst düzeyde olması. Elbette VM’ler için de aynı şeyi söyleyebiliriz, bir VM’i export edip OVF formatı ile taşıyabilir ve istediğimiz yere import edebiliriz. Ancak bu GB’lar (hatta onlarca GB) mertebesinde olacaktır. Container imajlarının ayakizi çok daha küçük olduğundan (çoğu zaman MB mertebelerinde) dolayı çok daha kolay taşınabilir bir yapıları vardır. İmajların içerisinde de uygulamanın kendisi ile birlikte tüm bağımlılıkları da bulunduğundan dolayı, çalışırlılığından emin olabiliriz.

Bunu gerçekleştirebilmek için uygulanması gereken, docker hub erişimi olan bir sunucu üzerinde ilgili imajı pull etmek, sonra bu sunucu üzerinde tarball formatında export edip, aklınıza gelebilecek her hangi bir yöntem ile (USB, scp, vb) asıl docker host sunucunuza göndermek ve orada import edip çalıştırmak. Şimdi gerekli komutları listeleyelim;

Host1 -> docker pull vmware/powerclicore
Host1 -> docker save -o /tmp/PowerCliCore.tar vmware/powerclicore
Host1 -> scp /tmp/PowerCliCore.tar root@Host2:/tmp
Host2 -> docker load -i /tmp/PowerCliCore.tar
Host2 -> docker run –rm -it vmware/powerclicore

docker-portability2

Örnekte kullandığım powerclicore imajı yaklaşık 400MB idi ve bu bile bir çok imaj için büyük sayılabilecek bir boyut. Sonuç olarak, her hangi bir ortamda hazır oluşturulmuş bir imajı çalıştırmak istiyorsanız, size engel olabilecek çok fazla birşey yok. Keyfini çıkarın :)

 

Kategoriler:Docker, VMware Etiketler:,

209: PowerCLI ve çoklu platform desteği

powerclicoreVMworld 2016 sonrası yazılacak çok fazla konu var ancak neden bilmiyorum SDK takımının gerçekleştirdiklerinin bende hep ayrı bir yeri var. Keynote lansmanları esnasında, amiral gemisi olarak nitelendirebileceğimiz ürünlerin yanında yer bulmaya başlamaları da bir diğer gelişme. Bu yüzden bir önceki yazıda, kısaca kaldığımız yerden devam edeceğim. Asıl konuları da, yakın zamanda daha detaylı bir şekilde kaleme alacağım.

Yakın zamanda, Photon OS üzerinden bir docker container olarak powershell kullanabilir olduğumuzu görmüştük. Şimdi ise SDK takımı konuyu bir kademe ileriye taşıdı ve PowerCLI’ın core bileşenlerini de, hem Linux/MacOS üzerinde, hem de docker container olarak çalışabilir hale getirdi. Container olarak da, daha öncekilerinden farklı olarak, Ubuntu yerine Photon OS imajı kullanıldı.

Photon OS üzerinde aşağıdaki iki komutu kullanarak, hızlı bir şekilde, PowerCLI ortamını canlandırabilirsiniz.

docker pull vmware/powerclicore

docker run –rm -it –entrypoint=’/usr/bin/powershell’ vmware/powerclicore

Powershell ve beraberinde PowerCLI artık gerçek anlamla çoklu platform desteği sağlamış görünüyor ve aynı zamanda container ile taşınabilirlik özelliklerini. Windows, Linux, Mac OS, Docker, Photon OS…. Peki geriye ne kaldı? Belki mainframe :)

powerclicore2

Özelikle docker tarafını önemli buluyorum. Neden mi? Sadece farklı platformlarda bir scripti çalıştırmanın, evet, çok büyük bir esprisi yok. Ancak, normalde bir sunucu üzerinde silo halinde tutup çalıştırdığımız PowerCLI scriptlerin veya fonksiyonların, artık bir codebase içerisinde, bir event ile tetiklenip, beraberinde bir container oluşturup, çalışıp, sonuç üretip, işi bittikten sonra da container ile birlikte yok olan ve bu şekilde hem verimlilik hem de yönetilebilirlik avantajları getirecek bir nesile evrimleşmesi mümkün görünüyor. Elbette bunun için önümüzde daha zaman var ancak IT dünyasında zamanın nasıl hızlı geçebildiğini hepimiz iyi biliyoruz.

PowerCLICore lansmanı yapıldığında aklıma gelen bir diğer konu ise, bunu bir noktada VCSA veya vMA üzerinde görüp göremeyeceğimiz oldu ve bu konuyu vCenter Product Management ekibinden birisine sorma şansını yakaladım. Zannedersem biraz fazla gizli bilgi içerecek bir konu olduğundan net bir cevap alamadım ancak edindiğim izlenim olumluya yakın bir “neden olmasın” idi :)

Son olarak, paketlere fling sayfasından da erişebilirsiniz.

PowerCLI Core Fling

Kategoriler:Docker, VMware Etiketler:, ,

208: PhotonOS ile Powershell

11.10.2016 1 yorum

Bugün yazacağım konu kısa bir konu olacak ancak çarpışan dev galaksilerin açığa çıkardığı enerjinin maddeye dönüşmüş hali benzeri bir durum söz konusu ve bunu görmüş olmak bile insana heyecan veriyor. Konu, Linux kernele sahip minimal bir işletim sistemi (Photon OS) üzerinde docker container olarak Powershell çalıştırmak. 2001 yılında Steve Ballmer’ın Linux’u kanser olarak nitelendirdiği günlerden nerelere geldiğimizin net bir örneği.

Son dönemlerdeki Microsoft-Linux evliliği elbette Powershell ile sınırlı değil. DotNet, Visual Studio Core, hatta SQL sunucularının Linux versiyonlarını da göreceğiz. Diğer taraftan Ubuntu bash’ini de Windows 10 üzerinde çalıştırabilir durumdayız. Yani gerçek anlamda galaksiler çarpışıyor ve oluşacak olan görsel şölenin izlenmeye değer olacağını düşünüyorum.

Konumuza geri dönmek gerekirse, elimizde çalışan bir Photon OS ve docker servisi olduğunu varsayıyorum. Docker hub içerisinde arama yaptığımızda aslında birçok imajın hazırlanmış olduğunu görebiliriz.

powershell1

Hangi imajı kullanacağımızı seçtikten sonra aşağıdaki komut ile container olarak çalıştırabiliriz;

docker run -it centos/powershell

powershell2

Burada kullanılan powershell alpha versiyonu olacaktır (6.0.0-alpha.9). Elbette üretim ortamlarında kullanılmaya hazır değil ancak ileride neler yapabileceğimizin güzel bir göstergesi olduğunu düşünüyorum. Yakın zamanda Powershell yanında powerCLI’ın da hazırlanacağını biliyorum. Kim bilir, belki de Linux üzerinde Powershell desteğini ileride vCenter Appliance üzerinde de görürüz ve aşina olduğumuz powerCLI scriptlerini artık vCenter üzerinden tetikleyebilir noktaya geliriz.

 

 

Kategoriler:Docker, VMware Etiketler:, ,

207: PhotonOS docker güncellemeleri

docker-vmwarePhoton OS içerisinde docker güncellemelerinden bahsettiğimiz durumda aslında iki adet senaryodan bahsedebiliriz, container olarak çalışan uygulamalar ve docker servisinin kendisi.

Öncelikle docker servisine değinelim. Normal birçok Linux dağıtımında YUM (Yellowdog Updater, modified) kullanılır. Yum komut satırı üzerinden kullanılan, açık kaynak bir paket yönetim aracıdır ve RPM Package Manager kullanır. Bunun üzerine, Fedore 18 ile birlikte DNF (Dandified Yum) kullanılmaya başlandı. DNF, YUM’un yeni jenerasyon versiyonu olup, YUM’da yaşanan performans, kaynak yönetimi, yavaşlık gibi problemleri çözmek amacı ile geliştirildi. Photon OS üzerinde ise TDNF (Tiny DNF) kullanılmaktadır. TDNF, VMware tarafından geliştirilen, minimal Photon OS üzerinde varsayılan gelen, yum ile uyumlu, DNF’in sadeleştirilmiş bir versiyonudur, dolayısı ile çok daha düşük bir ayakizine sahiptir.

Aşağıdaki komutlar basit operasyonları gerçekleştirmeniz için yeterli olacaktır;

  • tdnf repolist: Kullanılan repository’leri listeler
  • tdnf list: Tüm paketleri listeler
  • tdnf check-update: Paketler içerisinde güncellenebilecek olanları listeler
  • tdnf update docker: Docker servisini günceller.

Docker servisinin güncellenmesinden sonra servisi aşağıdaki şekilde yeniden başlatır ve test edebiliriz.

  • systemctl daemon-reload: Sistem dosyalarının yeniden yüklenmesini sağlar.
  • systemctl restart docker: Docker servisini yeniden başlatır.
  • docker run hello-world: Servisin çalışır olduğunun en kolay yoldan testi.

docker-update

Diğer güncelleme noktası ise çalışan docker imajların güncellenmesidir. Docker imajları prensipte sabit (immutable) olması gerektiğinden dolayı, yum, dnf veya tdnf benzeri araçlar ile güncellenmesi tavsiye edilmez, bir anti-pattern olarak kabul edilir. Container uygulamaları, repository üzerinde yer alan güncel versiyonlarından “pull” edilir.

  • docker pull nginx
  • docker stop nginx-container
  • docker rm nginx-container
  • docker run –name nginx-updated-container -p 8080:80 -d nginx

Tüm imajları daha sofistike bir şekilde güncellemek istiyorsanız, aşağıdaki komut işinizi görecektir.

docker images | awk ‘/^REPOSITORY|\<none\>/ {next} {print $1}’ | xargs -n 1 docker pull

docker-update2

Kategoriler:Docker, VMware Etiketler:, ,
%d blogcu bunu beğendi: