LXC, Linux Konteyner altyapısı olarak bilinen bir servistir. Bu servis tam olarak Docker benzeri bir yapıya sahiptir. Linux konteynırları, tek bir Linux çekirdeği üzerinde tek bir kontrol ana bilgisayarında aynı anda birden çok sanal birimi çalıştıran hafif "sanallaştırma" yöntemleridir.
Linux çekirdeği, herhangi bir sanal makinenin başlatılmasına gerek duymadann kaynak izolasyonu (CPU, bellek, blok G/Ç, ağ vb.) için Cgroups olarak adlandırılan gruplar içerir.
Cgroups ayrıca işlem ağaçları, ağlar, kullanıcı kimlikleri ve bağlı dosya sistemleri dahil olmak üzere işletim ortamının uygulama görünümünü tamamen izole etmek için isim alanı yalıtımı (namespace isolation) sağlar.
Konteyner kapsayıcıları ise, konteyner tarafından kullanılmak istenen yani kapsanan bir alanı bölmek için isim alanları, cgroups grupları, chroot adı verilen kök sistem değişim yöntemini ve çekirdek özelliklerini kullanır.
LXC'de bir konteyner kapsayıcısıdır, herhangi bir sanallaştırma yöneticisi veya hiperyönetici (hypervisor) olmadan linux içerisinde konteyner oluşturmayı sağlar.
Bu yazımda CentOS ve RHEL üzerinde LXC kurulumunu anlatacağım. Başlayalım.
Ön Gereksinimler
Her kurulumda olduğu gibi bu kurulum için de güncellemeleri yaparak başlayalım:
sudo yum update
LXC kurulumu esnasında kaynak kodu derlemek için gcc
ve make
programlarına ihtiyaç duyacağız. Yani LXC kurulumu için geliştirme araçları bize sıkça gerekmekte. Bu yüzden Development Tools grubunu kuralım:
sudo yum groupinstall "Development tools"
Ardından LXC için kullanılacak bağımlılıkları ayarlayalım. LXC iki kitaplığa bağlıdır; libpcap ve libcgroup. LXC aynı zamanda busybox ve bridge-utils yardımcı programlarını da gerektirir.
Şimdi bu paketleri kuralım:
sudo yum install libcap-devel libcgroup busybox bridge-utils
Son olarak hala wget indirme yöneticisine sahip değilsek ona da ihtiyacımız olacağını belirteyim. Kurulumu ise şu şekilde yapılmaktadır.
sudo yum install wget
LXC Kurulumu
Şimdi süperkullanıcı olalım ve LXC'yi kuralım.
sudo su
Ayrıca süperkullanıcı olarak dosya işlemi yapacakken, kendi kişisel ev dizinimizden ayrılmamızda yarar var:
cd
LXC'nin son sürümü olan lxc-4.0.x'i indireceğim şimdi:
wget https://linuxcontainers.org/downloads/lxc/lxc-4.0.10.tar.gz
Şimdi dosyaları çıkartalım:
tar xvf lxc-4.0.10.tar.gz
cd lxc-4.0.10/
Şimdi yapılandırmaya başlayalım:
./configure
Başarılı bir yapılandırma bir çıktı şu şekilde olmalı:
...
...
config.status: creating src/python-lxc/setup.py
config.status: creating src/lua-lxc/Makefile
config.status: executing depfiles commands
config.status: executing default commands
----------------------------
Environment:
- compiler: gcc
- distribution: centos
- init script type(s): sysvinit
- rpath: no
- GnuTLS: no
- Bash integration: yes
Security features:
- Apparmor: no
- Linux capabilities: yes
- seccomp: no
- SELinux: no
- cgmanager: no
Bindings:
- lua: no
- python3: no
Documentation:
- examples: yes
- API documentation: yes
- user documentation: no
Debugging:
- tests: no
- mutex debugging: no
Paths:
- Logs in configpath: no
Şimdi de LXC'yi derleyelim:
make
Başarılı bir inşanın bir çıktı şu şekilde olmalı:
...
Building full member lists recursively...
Adding members to member groups.
...
Generating style sheet...
Generating index page...
Generating page index...
Generating example documentation...
Generating file sources...
Generating code for file /root/lxc-4.0.10/src/lxc/attach_options.h...
Generating code for file /root/lxc-4.0.10/src/lxc/lxccontainer.h...
Generating code for file /root/lxc-4.0.10/src/lxc/lxclock.h...
Generating file documentation...
Generating docs for file /root/lxc-4.0.10/src/lxc/attach_options.h...
...
Generating file member index...
make[2]: Leaving directory `/root/lxc-4.0.10/doc/api'
make[2]: Entering directory `/root/lxc-4.0.10/doc'
...
Making all in hooks
make[1]: Entering directory `/root/lxc-4.0.10/hooks'
make[1]: Nothing to be done for `all'.
Şimdi de yine make ile kuralım:
make install
Başarılı bir kurulumun sonucu aşağıdaki gibi görünmelidir.
...
Making install in hooks
make[1]: Entering directory `/root/lxc-4.0.10/hooks'
/bin/mkdir -p '/usr/local/share/lxc/hooks'
/usr/bin/install -c clonehostname mountecryptfsroot ubuntu-cloud-prep squid-deb-proxy-client '/usr/local/share/lxc/hooks'
...
/bin/mkdir -p /usr/local/var/lib/lxc
/bin/mkdir -p /usr/local/var/cache/lxc
/bin/mkdir -p '/usr/local/lib/pkgconfig'
/usr/bin/install -c -m 644 lxc.pc '/usr/local/lib/pkgconfig'
...
Bridged Adaptörü Yapılandırması
LXC konteynerlerine internet bağlamak için internet köprüsü oluşturmamız gerekecek ki bunu da bridged düzenleyerek yapacağız. Aşağıdaki ifcfg-eth0 örneğinde gösterildiği gibi köprü bağdaştırıcı için statik IP'yi yapılandıracağız:
cd /etc/sysconfig/network-scripts
Şimdi şu içeriği oluşturalım. Ancak ifcfg-br0
dosyasının olmadığına emin olun. Önceki yapılandırmalar için kullanıldıysa veya haricinde başka bir uygulama için kullanılıyorsa sıkıntı çıkarabilir. Ayrıca aşağıda benim xxx.xxx.xxx.xxx
olan IP adresi ile NetMask'ı kendiniz için düzenleyin.
cat > ifcfg-br0 << "EOF"
DEVICE="br0"
BOOTPROTO="static"
IPADDR="xxx.xxx.xxx.xxx"
NETMASK="255.255.255.xxx"
ONBOOT="yes"
TYPE="Bridge"
NM_CONTROLLED="no"
EOF
Örneğin benim için bu dosya şu şekilde idi:
cat > ifcfg-br0 << "EOF"
DEVICE="br0"
BOOTPROTO="static"
IPADDR="10.32.4.31"
NETMASK="255.255.224.0"
ONBOOT="yes"
TYPE="Bridge"
NM_CONTROLLED="no"
EOF
Son adımlar
Son adımlarda LXC için bazı soft-link'ler oluşturmamız gerekecek. Bu linkler lxc'nin düzgün çalışması için önem arzetmekte.
Örneğin lxc'yi deneyelim:
# lxc-info --name test
test doesn't exist
Yukarıdaki lxc-info --name test
komutu için çıktı normal ancak eğer bizim shared object bazlı bir sorunumuz varsa çıktı biraz daha değişik olacaktır. Örneğin:
# lxc-info --name test
lxc-info: error while loading shared libraries: liblxc.so.4: cannot open shared object file: No such file or directory
Bu durumda, bunu düzeltmek için, aşağıda gösterildiği gibi libxc.so.4 adında bir bağlantı oluşturmamız ve bu bağlantıyı, liblxc.so.xxx dosyasının doğru sürümüne bağlamamız gerekecektir.
ln -s /usr/local/lib/liblxc.so.4.0.10 /lib64/liblxc.so.4
LXC Kurulumunu Doğrulamak
En son adımda, lxc ortamınızın doğru kurulduğunu doğrulamak için lxc-checkconfig
'i çalıştıralım.
Bu script kurulumla alakalı dört farklı bölümde çıktılar verecektir, Bunlar:
1) İsim Alanları
2) Kontrol Grupları
3) Çeşitli ve
4) Kontrol Noktası/Geri Yükleme.
Sisteminizde her şey düzgün yapılandırılmışsa, yukarıdaki çıktıda, yukarıdaki gruplardaki tüm seçenekler “etkin” yazmalıdır. Örneğin:
# lxc-checkconfig
Kernel configuration not found at /proc/config.gz; searching...
Kernel configuration found at /boot/config-4.18.0-80.el8.x86_64
--- Namespaces ---
Namespaces: enabled
Utsname namespace: enabled
Ipc namespace: enabled
Pid namespace: enabled
User namespace: enabled
Network namespace: enabled
Multiple /dev/pts instances: enabled
-------- Control groups ---
Cgroup: enabled
Cgroup namespace: enabled
Cgroup device: enabled
Cgroup sched: enabled
Cgroup cpu account: enabled
..
-------- Misc ---
Veth pair device: enabled
Macvlan: enabled
Vlan: enabled
Bridges: enabled
Advanced netfilter: enabled
..
-------- Checkpoint/Restore ---
CONFIG_EVENTFD: enabled
CONFIG_EPOLL: enabled
..
Note : Before booting a new kernel, you can check its configuration
usage : CONFIG=/path/to/config /usr/local/bin/lxc-checkconfig
Bu kılavuzda da LXC kurmuş olduk. İyi çalışmalar...
Top comments (0)