LXC konteynerinde PostgreSQL

July 26, 2018   

LXC postgresql container

LXC Nedir?

LXC, işletim sistemi emülatörü olan sanal makinelerden farklı olarak tamamen soyut bir makine yerine soyut bir işletim sistemi seviyesinde sanallaştırma sağlayan konteyner çeşitlerinden biridir.

Bu yazımda bir LXC konteyneri nasıl kurulur, ağ yapılandırması nasıl yapılır ve kurulacak olan bu konteynerde postgresql nasıl kurulur, bunlardan bahsedeceğim.

LXC Kurulumu

Sahip olduğum işletim sistemi:

Distributor ID: Ubuntu
Description:    Ubuntu 18.04 LTS
Release:    18.04
Codename:   bionic

Sistemimize LXC kurmak için:

$ sudo apt install lxc1

komutunu çalıştıralım. Konteynerimizi yaratmak için hazırız. Bu yazımda postgres-cont isimli bir konteyner oluşturacağım ancak siz konteynerinize -n parametresiyle istediğiniz ismi verebilirsiniz. Root seviyesi izni ile:

$ sudo lxc-create -n postgres-cont -t download

komutunu çalıştırıyoruz. Bu komut bizi konteynerimize kurabileceğimiz işletim sistemlerini detaylarıyla birlikte seçebileceğimiz bir ekrana götürecektir:

gif

İnternet kalitenize bağlı olarak konteyner yaratılırken geçen süre değişebilir, sabırlı olun :)

Sıradaki komut varolan konteynerleri gösterir:

$ sudo lxc-ls --fancy 

Çıktı:

    NAME          STATE   AUTOSTART GROUPS IPV4 IPV6    
    postgres-cont STOPPED 0         -      -    -    

Ancak konteynerimiz çalışır durumda değil (STOPPED). Şimdi oluşturduğumuz konteyneri çalıştırma zamanı. Şunu yazın ve çalıştırın:

$ sudo lxc-start -n postgres-cont

Tekrar konteynerlerimizi listelediğimizde:

$ sudo lxc-ls --fancy

Çıktı olarak artık:

    NAME          STATE   AUTOSTART GROUPS IPV4      IPV6 
    postgres-cont RUNNING 0         -      10.0.3.98 -  

Konteynerimizin çalışır durumda olduğunu görebiliyoruz (RUNNING). Artık konteynerimize erişebiliriz. Bunun için şu komutu çalıştırıyoruz:

$ sudo lxc-attach -n postgres-cont

Konteynerimize kurmamız gereken şeylerin başında net-tools geliyor:

$ sudo apt-get install net-tools

Varsayılan olarak Vi editör geliyor ancak ben Nano kullanmayı tercih ettiğim için nano kuracağım:

$ sudo apt-get install nano

Ve tabiki postgreSQL:

$ sudo apt-get install postgresql

Artık postgresql konteynerimizde kullanılmaya hazır. Şu komut ile:

$ sudo -u postgres psql

postgresql konsoluna ulaşmış oluyoruz:

gif

Aslında az önce çalıştırdığımız komutta psql komutunu postgres kullanıcısı ile çalıştırdık. Bunun nedeni PostgreSQL postgres dışındaki herhangi bir sistem kullanıcısı ile erişilemez olması. Yani eğer biz konteynerimizin root kullanıcısıyla psql komutunu çalıştırsaydık hata alacaktık:

gif


LXC Konteynerinden Ana Makineye Dosya Aktarımı

lxc-create komutu ile oluşturduğumuz konteynerimizin kök(root) dosya sistemine varsayılan olarak /var/lib/lxc dizininden ulaşabiliriz. Bu sayede ana makinemiz ile konteynerimiz arasında dosya aktarımı da sağlayabiliriz.

Bu konuyla alakalı konteynerimizde oluşturacağımız test.txt isimli dosyayı ana makinemizden erişip ana makinemize taşıyacağımız küçük bir örnek:

gif


LXC Ağ Konfigürasyonu

dnsmasq.conf

Oluşturduğumuz konteynerimize /etc/default dizinindeki lxc-net isimli dosyada tanımlanmış LXC_DHCP_RANGE isimli değişkenin değer aralığında rastgele olarak bir IPv4 adresi tanımlanır:

    LXC_DHCP_RANGE="10.0.3.2,10.0.3.254"

Bu rastgeleliği ortadan kaldırmak ve oluşturacağımız konteynerimizin IPv4 adresini kendimiz belirlemek istiyorsak bir kaç konfigürasyon yapmamız gerekiyor.

Öncelikle lxc-net isimli dosyayı düzenleyelim:

    #LXC_DHCP_CONFILE=/etc/lxc/dnsmasq.conf

Varsayılan olarak comment edilmiş bu satırı uncomment ediyoruz ve /etc/lxc dizininde dnsmasq.conf isimli bir dosya oluşturuyoruz:

$ sudo touch /etc/lxc/dnsmasq.conf

Oluşturduğumuz dosyaya şu satırı ekliyoruz, kaydedip çıkıyoruz:

    dhcp-host=postgres-cont,10.0.3.190

lxc-net isimli dosyadaki LXC_DHCP_RANGE isimli değişkenin değer aralığında herhangi bir IP adresi girebilirsiniz ancak ben bu yazım için 10.0.3.190 adresini kullanacağım.

Yapılan değişikliklerin uygulanması için konteynerimizi durdurup lxc-net servisini yeniden başlatmamız gerekiyor:

$ sudo lxc-stop -n postgres-cont
$ sudo service lxc-net restart

Şimdi konteynerimizi tekrar çalışır duruma getirdiğimizde manuel olarak tanımlanan 10.0.3.190 IPv4 adresini alacaktır.

$ sudo lxc-start -n postgres-cont
$ sudo lxc-ls --fancy

Çıktı:

    NAME          STATE   AUTOSTART GROUPS IPV4       IPV6  
    postgres-cont RUNNING 0         -      10.0.3.190 -  

Konteynerimizi 10.0.3.190 adresine sabitlemiş olduk.

gif


Sonuç olarak elimizde içerisinde PostgreSQL barındıran, sabit IPv4 adresli çalışan bir LXC konteyneri var. Bir sonraki yazım, bir LXC konteynerindeki PostgreSQL’e konteyner dışından erişim hakkında olacak. PyCharm ile konteyner içerisindeki PostgreSQL’e ulaşacağız.