# ----------------------------------------------------------------------------- # LXC NOTLARI # ----------------------------------------------------------------------------- Bu sayfada, LXC (Linux Container) notları yer alır. Notlar Debian Jessie'ye göre... # ----------------------------------------------------------------------------- # BRIDGE NETWORK # ----------------------------------------------------------------------------- Host makine bridge ayarları. # Kurulacak paketler apt-get install bridge-utils # /etc/network/interfaces Buradaki ayarlarda container makineler dış networke doğrudan erişebiliyor. eth0 ortak kullanılıyor. # eth0 allow-hotplug eth0 iface eth0 inet manual # bridge auto br0 iface br0 inet dhcp bridge_ports eth0 bridge_stp off bridge_fd 0 bridge_maxwait 0 # Container makineler ayrı IP blogunda olacaksa host makineye de aynı # bloktan bir IP ver. auto br0:0 iface br0:0 inet static address 172.16.244.100 netmask 255.255.255.0 # /etc/network/interfaces Buradaki ayarlarda container makineler dış networke doğrudan erişemiyor. Host makinenin routing yapması gerekiyor. Bridge, fiziksel bir network adaptör ile ilişkilendirilmemiş. "bridge_ports" değeri "none". # eth0 allow-hotplug eth0 iface eth0 inet dhcp # bridge auto br0 iface br0 inet static bridge_ports none bridge_stp off bridge_fd 0 bridge_maxwait 0 address 172.16.244.100 netmask 255.255.255.0 # Network restart Makine reboot edilir veya network servisi yeniden başlatılır. # ----------------------------------------------------------------------------- # LXC KURULUM # ----------------------------------------------------------------------------- # Yüklenecek paketler apt-get install --install-recommends lxc apt-get install iptables # ----------------------------------------------------------------------------- # CONTAINER # ----------------------------------------------------------------------------- # Container oluşturma lxc-create -n test -t debian lxc-create -n test -t debian -- -r surum_adi lxc-create -n jessie -t debian -- -r jessie lxc-create -n buster -t download -- -d debian -r buster -a amd64 # Container klonlama lxc-clone -o template_makine -n yeni_makine # Container klasörünü paketleme cd /var/lib/lxc tar czf makine.tar.gz makine # Container paketini açma (başka bir sunucuda) tar zxf makine.tar.gz --numeric-owner -C /var/lib/lxc/ # Container silme lxc-destroy -n makine # Container listesi lxc-ls lxc-ls -f # Test için çalıştırma lxc-start -n makine # Daemon modda çalıştırma lxc-start -d -n makine # Containeri durdurma lxc-stop -n makine veya "lxc-attach -n makine" ile bağlanı "poweroff" # Makinenin konsoluna bağlanma lxc-attach -n test lxc-console -n test C+a q ile çık # ----------------------------------------------------------------------------- # CONTAINER NETWORK # ----------------------------------------------------------------------------- # Network interface (bridge ile container makineler ayrı networkte) Bazı durumlarda "lxc.network.ipv4" kullanmamak ve IP ayarlarını, container makine içinden yapmak daha iyi sonuç veriyor. Örneğin container içinde bir uygulama, containerın network ayarlarını değiştirecekse... /var/lib/lxc/test/config # eth0 lxc.network.type = veth lxc.network.flags = up lxc.network.link = br0 lxc.network.name = eth0 /var/lib/lxc/test/rootfs/etc/network/interfaces # lo auto lo iface lo inet loopback # eth0 auto eth0 iface eth0 inet static address 172.16.244.101 netmask 255.255.255.0 gateway 172.16.244.100 # Host makine iptables ayarları Henüz iptables kuralı yokken başla. Kural varsa -F ile temizle. iptables -L iptables -L -t nat iptables -t nat -A POSTROUTING -s 172.16.244.0/24 -o br0 -j MASQUERADE iptables -t nat -A PREROUTING -i br0 -p tcp ! -s 172.16.244.0/24 \ --dport 22101 -j DNAT --to 172.16.244.101:22 iptables -L -t nat iptables-save > /etc/iptables.up.rules touch /etc/network/if-pre-up.d/iptables chmod +x /etc/network/if-pre-up.d/iptables vim /etc/network/if-pre-up.d/iptables #!/bin/sh /sbin/iptables-restore < /etc/iptables.up.rules # /etc/sysctl.conf net.ipv4.ip_forward=1 # sysctl ayarlarını aktif hale getir. sysctl -p # ----------------------------------------------------------------------------- # Network interface (bridge kullanılacaksa) /var/lib/lxc/test/config # eth0 (DHCP) lxc.network.type = veth lxc.network.name = eth0 lxc.network.flags = up lxc.network.link = br0 lxc.network.hwaddr = aa:bb:00:00:00:01 lxc.network.ipv4 = 0.0.0.0/24 # eth1 (sabit IP) lxc.network.type = veth lxc.network.name = eth1 lxc.network.flags = up lxc.network.link = br0 lxc.network.hwaddr = aa:bb:00:00:00:02 lxc.network.ipv4 = 192.168.0.100/24 lxc.network.ipv4.gateway = 192.168.0.1 Container için config dosyasından sabit IP verilecekse container içindeki /etc/network/interfaces dosyasına ilgili device'i koyma yoksa açılış yavaşlıyor. DHCP bekliyor. # ----------------------------------------------------------------------------- # Network interface (ethernet adaptör tahsis edilecekse) /var/lib/lxc/test/config lxc.network.type = phys lxc.network.flags = up lxc.network.link = eth1 lxc.network.ipv4 = 0.0.0.0/24 #lxc.network.ipv4 = 10.0.0.99/24 #lxc.network.ipv4.gateway = 10.0.0.1 # ----------------------------------------------------------------------------- # ORTAK ALAN KULLANMA # ----------------------------------------------------------------------------- # Paylaşılacak klasör mkdir -p /var/lib/lxc_shares/data mkdir -p /var/lib/lxc/test/rootfs/data # Klasörün container'a mount edilmesi /var/lib/lxc/test/config lxc.mount.entry = /var/lib/lxc_shares/data /var/lib/lxc/test/rootfs/data none bind 0 0 # ----------------------------------------------------------------------------- # DEB DEPOSUNUN ORTAK KULLANIMI # ----------------------------------------------------------------------------- # Container içindeki archives klasörü boş olacak rm -rf /var/lib/lxc//rootfs/var/cache/apt/archives/* # Container archives klasörünün mount edilmesi /var/lib/lxc//config lxc.mount.entry = /var/cache/apt/archives /var/lib/lxc//rootfs/var/cache/apt/archives none bind 0 0 # /var/lib/lxc//rootfs/root/.zshrc apt-get() { if [[ $1 == "clean" ]] then echo "'apt-get clean' kullanmayın. Depo alani ortak kullaniliyor" else command apt-get $@ fi } # ----------------------------------------------------------------------------- # HOST ADI # ----------------------------------------------------------------------------- /var/lib/lxc/test/config lxc.utsname = host-adi # ----------------------------------------------------------------------------- # KURULACAK PAKETLER # ----------------------------------------------------------------------------- Depo ayarlarını host makineden yap çünkü container içinde henüz editor yok. # /var/lib/lxc/test/rootfs/etc/apt/apt.conf.d/80recommends APT::Install-Recommends "0"; APT::Install-Suggests "0"; # /var/lib/lxc/test/rootfs/etc/apt/sources.list deb http://ftp.tr.debian.org/debian/ jessie main non-free contrib deb-src http://ftp.tr.debian.org/debian/ jessie main non-free contrib deb http://security.debian.org/ jessie/updates main contrib non-free deb-src http://security.debian.org/ jessie/updates main contrib non-free # Kurulacak sıkca kullanılan bazı paketler apt-get install iputils-ping less tmux vim wget zsh apt-get install openssh-server openssh-client apt-get install dnsutils curl htop bmon bwm-ng apt-get install rsync bzip2 man ack-grep apt-get install cron logrotate apt-get install dbus libpam-systemd apt-get install module-init-tools iptables # container'da kural yazılacaksa # Kurulum sonrası deb paketlerinin kaldırılması apt-get clean # ----------------------------------------------------------------------------- # NOTLAR # ----------------------------------------------------------------------------- # Auto start Container config dosyasına lxc.start.auto = 1 # acilista baslar. lxc.start.order = 1 # baslama sirasi. buyuk olan once baslar. lxc.start.delay = 2 # bir sonraki container kac saniye sonra baslasin. lxc.group = onboot # acilis gurubunda. bu gruptakilerin onceligi var. lxc.group = group1 # grup adi. grup adi olanlar, eger ayni zamanda # "onboot" grubunda da degilse acilista baslamaz. # Reboot problemi Wheezy sunucu içinde yer alan container makinelerde reboot yapma. Host makineden halt ve start kullan. # ----------------------------------------------------------------------------- # KAYNAKLAR # ----------------------------------------------------------------------------- # LXC network tipleri http://containerops.org/2013/11/19/lxc-networking/ # cgroups https://www.kernel.org/doc/Documentation/cgroups/cgroups.txt