Docker cikti, mertlik bozuldu!


Basliktan anlayacaginiz gibi bu yazida docker’a giydiriyoruz 😛 (saka saka) Dikkat ettiyseniz uzun suredir bu blog’da X nasil kurulur, Y nasil konfigure edilir tarzi yazilar yer almiyor ve muhtemelen bundan sonra da almayacak, sebebi Docker 🙂

2014’den beri az cok kullandigim bir tool olan docker, dun 5 yasina basmis,ilk kullanmaya basladigim zamanlar kitematic bile yok (varsa da beta falan), vagrant’in dibine vurdugumuz boot2docker kurcaladigimiz zamanlar…

Yaklasik 1 senedir production’da kullaniyoruz epey memnunuz, hatta son zamanlarda MySQL’i bile docker uzerinde kosturuyoruz, misal ubuntu 16.04 ile birlikte MySQL’in 5.5 gibi eski bir versiyonunu calistirmak istediginizde makine uzerinden calistirmak cile, sahsen 1-2 defa kurmayi denedim sonra bastim imaji. Docker image’i verince SEVE SEVE kosturuyor mecbur.

Docker anıları: INODE Problemi

Prod’ ortamini docker’a gecirdigimizde, baktik alet canavar gibi calisiyor iyi guzel derken ~1 hafta sonra makinelerde sorun yasamaya basladik ve fark ettik ki inode dolmus. “Olamaz kessinlikle olamaz” derken PHP’nin garbage collector’un calismadigini ve bu yuzden zilyon tane session dosyasi oldugunu gorduk. (siz siz olun sessions dizinine gidip ls,ll gibi komutlari calistirmayin)

 

O zamanlar sessions dizinini ana makineye mount etmemistik ve container’a girip farkli turlu (rm -rf’nin yetersiz kaldigi, perl scriplerini vs.. denedigimiz zamanlar) silme girisimlerinde bulunmustuk. Bunlarin bazilari SIGKILL cagrilari ile durduramayacagimiz turden seylerdi… 😱

neyden bahsediyorduk… inode problemi. PHP’nin otomatik olarak garbage collector cagiran bir parametresi var. misal: “session.gc_divisor=100”  her 100.cu reques’te ucurulmaya hazir file varsa temizle diyor kabaca, detayi suradan okuyabilirsiniz. Bizde bu parametre “0” cunku 100.cu request’in runtime’da dosya silerken yavaslamasini ve kullaniciyi bekletmesini istemiyoruz. Normalde ubuntu vs.. dagitimlara PHP kurulumu yaparken gc_divisor kapali ancak bu temizlik isi icin sunucuya cronjob ekliyor. Boylece performansli bir sekilde ve inode doldurmadan calisabiliyor.

Biz bu sorunu, sessions dizinini machine’e mount edip yine machine uzerinde ayarladigimiz cronjob’la cozuyoruz, benzeri bir cozum yapabilirsiniz veya session’u memcached/redis gibi merkezi bir yerde tutun cozum cok… sadece ilk anda gormesi ve icine dustugunuz durumdan kurtulmasi dert olabiliyor yukaridaki ornek gibi 🙂

Boyle aci bir anidan da bahsettikten sonra konuya devam edeyim efem;

Docker sonrasi daha dogrusu container teknolojilerinden sonra artik kurulum yapmak istedigimiz her hangi bir yazilimi kurmak, ayarlamak cok kolay, o yuzden “how to install X on Y” tarzi aramalarin devrini “docker X image” seklinde aramalar aldi bile. Iste burasi docker cikti mertlik bozuldu ani 🙂

Kubernetes’ci tayfa

Kubernetes’i cok seven bir tayfa var, agbii container yoneteceksen kubernetes kullanacaksin, hatta ileri gidip kubernetes kullanmayacaksan docker’in ne anlami var vs.. yaklasiminda bulunuyorlar…

Bence o o sekil kullanir bu bu sekil gun sonunda problemi nasil ve efektif cozdugumuz onemli. Teknoloji secimini hype’dan yana degil ihtiyaca gore secmek lazim, misal 5 kisi’lik yemek icin kazan kullanmazsin gibi…

(bu arada biz docker-compose’u rsync ile deploy edip elle yonetiyoruz, cunku amelelik seviyoruz 😛 )

Bu yazi vesilesi ile docker’a nice seneler dileyerek 🎂  omrumuzden kurtardigi saatler ve sac telleri icin  tesekkur ediyorum 🙂

Reklamlar

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

w

Connecting to %s