ວິທີການຕິດຕັ້ງ, ສ້າງແລະຄຸ້ມຄອງ LXC (Linux Containers) ໃນ RHEL/CentOS 7


LXC, ຊື່ຫຍໍ້ ສຳ ລັບ Linux Containers, ແມ່ນການແກ້ໄຂບັນຫາແບບເສີຍໆຂອງ Linux kernel, ເຊິ່ງປະຕິບັດຢູ່ເທິງສຸດຂອງລະບົບປະຕິບັດການ, ຊ່ວຍໃຫ້ທ່ານສາມາດແຈກຢາຍການແຈກຢາຍແບບໂດດດ່ຽວຫຼາຍຄັ້ງໃນເວລາດຽວກັນ.

ຄວາມແຕກຕ່າງລະຫວ່າງ LXC ແລະ KVM virtualization ແມ່ນວ່າ LXC ບໍ່ໄດ້ຮວບຮວມຮາດແວ, ແຕ່ແບ່ງປັນຊື່ namespace ດຽວກັນ, ຄ້າຍຄືກັບ chroot applications.

ສິ່ງດັ່ງກ່າວເຮັດໃຫ້ LXC ເປັນໂຊລູຊັ່ນການແກ້ໄຂບັນຫາການໃຊ້ virtualization ໄດ້ໄວຫຼາຍຖ້າທຽບໃສ່ກັບໂຊລູຊັ່ນການໃຊ້ virtualization ອື່ນໆ, ເຊັ່ນວ່າ VMware.

ບົດຂຽນນີ້ຈະແນະ ນຳ ທ່ານກ່ຽວກັບວິທີທີ່ທ່ານສາມາດຕິດຕັ້ງ, ນຳ ໃຊ້ແລະ ດຳ ເນີນການບັນຈຸ LXC ໃນການ ຈຳ ໜ່າຍ CentOS/RHEL ແລະ Fedora.

ລະບົບປະຕິບັດການ Linux ທີ່ເຮັດວຽກດ້ວຍການຕິດຕັ້ງ ໜ້ອຍ ທີ່ສຸດ:

<

  • ການຕິດຕັ້ງ CentOS 7 Linux
  • ການຕິດຕັ້ງ RHEL 7
  • ການຕິດຕັ້ງ Fedora 23 Server
  • ຂັ້ນຕອນທີ 1: ການຕິດຕັ້ງ LXC Virtualization ໃນ Linux

    1. ການອັດຕະໂນມັດ LXC ແມ່ນສະ ໜອງ ໃຫ້ຜ່ານຫໍສະ ໝຸດ Epel. ເພື່ອຈະໃຊ້ repo ນີ້, ເປີດ terminal ແລະຕິດຕັ້ງຫໍສະ ໝຸດ Epel ໃນລະບົບຂອງທ່ານໂດຍການອອກ ຄຳ ສັ່ງຕໍ່ໄປນີ້:

    # yum install epel-release
    

    2. ກ່ອນທີ່ຈະສືບຕໍ່ຂັ້ນຕອນການຕິດຕັ້ງ LXC, ຮັບປະກັນວ່ານາຍແປພາສາພາສາ Perl, ແລະຊຸດ debootstrap ຖືກຕິດຕັ້ງໂດຍການອອກ ຄຳ ສັ່ງຂ້າງລຸ່ມນີ້.

    # yum install debootstrap perl libvirt
    

    3. ສຸດທ້າຍຕິດຕັ້ງໂຊລູຊັ່ນ virtualization LXC ດ້ວຍ ຄຳ ສັ່ງຕໍ່ໄປນີ້.

    # yum install lxc lxc-templates
    

    4. ຫຼັງຈາກທີ່ບໍລິການ LXC ໄດ້ຕິດຕັ້ງແລ້ວ, ກວດສອບວ່າ LXC ແລະ daemon libvirt ກຳ ລັງເຮັດວຽກຢູ່ບໍ.

    # systemctl status lxc.service
    # systemctl start lxc.service
    # systemctl start libvirtd 
    # systemctl status lxc.service
    
     systemctl status lxc.service
    lxc.service - LXC Container Initialization and Autoboot Code
       Loaded: loaded (/usr/lib/systemd/system/lxc.service; disabled)
       Active: inactive (dead)
    
     systemctl start lxc.service
     systemctl status lxc.service
    lxc.service - LXC Container Initialization and Autoboot Code
       Loaded: loaded (/usr/lib/systemd/system/lxc.service; disabled)
       Active: active (exited) since Fri 2016-04-01 02:33:36 EDT; 1min 37s ago
      Process: 2250 ExecStart=/usr/libexec/lxc/lxc-autostart-helper start (code=exited, status=0/SUCCESS)
      Process: 2244 ExecStartPre=/usr/libexec/lxc/lxc-devsetup (code=exited, status=0/SUCCESS)
     Main PID: 2250 (code=exited, status=0/SUCCESS)
    
    Apr 01 02:33:06 mail systemd[1]: Starting LXC Container Initialization and Autoboot Code...
    Apr 01 02:33:06 mail lxc-devsetup[2244]: Creating /dev/.lxc
    Apr 01 02:33:06 mail lxc-devsetup[2244]: /dev is devtmpfs
    Apr 01 02:33:06 mail lxc-devsetup[2244]: Creating /dev/.lxc/user
    Apr 01 02:33:36 mail lxc-autostart-helper[2250]: Starting LXC autoboot containers:  [  OK  ]
    Apr 01 02:33:36 mail systemd[1]: Started LXC Container Initialization and Autoboot Code.
    

    ແລະກວດເບິ່ງສະຖານະພາບການເຮັດວຽກແບບເສີບຂອງ LXC ໂດຍອອກ ຄຳ ສັ່ງຂ້າງລຸ່ມ.

    # lxc-checkconfig
    
     lxc-checkconfig
    Kernel configuration not found at /proc/config.gz; searching...
    Kernel configuration found at /boot/config-3.10.0-229.el7.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 clone_children flag: enabled
    Cgroup device: enabled
    Cgroup sched: enabled
    Cgroup cpu account: enabled
    Cgroup memory controller: enabled
    Cgroup cpuset: enabled
    
    --- Misc ---
    Veth pair device: enabled
    Macvlan: enabled
    Vlan: enabled
    Bridges: enabled
    Advanced netfilter: enabled
    CONFIG_NF_NAT_IPV4: enabled
    CONFIG_NF_NAT_IPV6: enabled
    CONFIG_IP_NF_TARGET_MASQUERADE: enabled
    CONFIG_IP6_NF_TARGET_MASQUERADE: enabled
    CONFIG_NETFILTER_XT_TARGET_CHECKSUM: enabled
    
    --- Checkpoint/Restore ---
    checkpoint restore: missing
    CONFIG_FHANDLE: enabled
    CONFIG_EVENTFD: enabled
    CONFIG_EPOLL: enabled
    CONFIG_UNIX_DIAG: enabled
    CONFIG_INET_DIAG: enabled
    CONFIG_PACKET_DIAG: enabled
    CONFIG_NETLINK_DIAG: enabled
    File capabilities: enabled
    
    Note : Before booting a new kernel, you can check its configuration
    usage : CONFIG=/path/to/config /usr/bin/lxc-checkconfig
    

    ຂັ້ນຕອນທີ 2: ສ້າງແລະຄຸ້ມຄອງບັນຈຸ LXC ໃນ Linux

    5. ເພື່ອຈົດບັນຈຸບັນຈຸ LXC ທີ່ມີຢູ່ແລ້ວທີ່ຕິດຕັ້ງຢູ່ໃນລະບົບຂອງທ່ານອອກ ຄຳ ສັ່ງຂ້າງລຸ່ມນີ້.

    # ls -alh /usr/share/lxc/templates/
    
    total 344K
    drwxr-xr-x. 2 root root 4.0K Apr  1 02:32 .
    drwxr-xr-x. 6 root root  100 Apr  1 02:32 ..
    -rwxr-xr-x. 1 root root  11K Nov 15 10:19 lxc-alpine
    -rwxr-xr-x. 1 root root  14K Nov 15 10:19 lxc-altlinux
    -rwxr-xr-x. 1 root root  11K Nov 15 10:19 lxc-archlinux
    -rwxr-xr-x. 1 root root 9.7K Nov 15 10:19 lxc-busybox
    -rwxr-xr-x. 1 root root  29K Nov 15 10:19 lxc-centos
    -rwxr-xr-x. 1 root root  11K Nov 15 10:19 lxc-cirros
    -rwxr-xr-x. 1 root root  17K Nov 15 10:19 lxc-debian
    -rwxr-xr-x. 1 root root  18K Nov 15 10:19 lxc-download
    -rwxr-xr-x. 1 root root  49K Nov 15 10:19 lxc-fedora
    -rwxr-xr-x. 1 root root  28K Nov 15 10:19 lxc-gentoo
    -rwxr-xr-x. 1 root root  14K Nov 15 10:19 lxc-openmandriva
    -rwxr-xr-x. 1 root root  14K Nov 15 10:19 lxc-opensuse
    -rwxr-xr-x. 1 root root  35K Nov 15 10:19 lxc-oracle
    -rwxr-xr-x. 1 root root  12K Nov 15 10:19 lxc-plamo
    -rwxr-xr-x. 1 root root 6.7K Nov 15 10:19 lxc-sshd
    -rwxr-xr-x. 1 root root  23K Nov 15 10:19 lxc-ubuntu
    -rwxr-xr-x. 1 root root  12K Nov 15 10:19 lxc-ubuntu-cloud
    

    6. ຂັ້ນຕອນການສ້າງພາຊະນະ LXC ແມ່ນງ່າຍດາຍຫຼາຍ. syntax ຄຳ ສັ່ງໃນການສ້າງພາຊະນະ ໃໝ່ ແມ່ນອະທິບາຍຢູ່ລຸ່ມນີ້.

    # lxc-create -n container_name -t container_template
    

    ໃນບົດຄັດຫຍໍ້ລຸ່ມນີ້, ພວກເຮົາຈະສ້າງພາຊະນະ ໃໝ່ ທີ່ມີຊື່ວ່າ mydeb ອີງໃສ່ແມ່ແບບ debian ທີ່ຈະຖືກດຶງອອກຈາກຫໍສະມຸດ LXC.

     lxc-create -n mydcb -t debian
    debootstrap is /usr/sbin/debootstrap
    Checking cache download in /var/cache/lxc/debian/rootfs-jessie-amd64 ... 
    Downloading debian minimal ...
    W: Cannot check Release signature; keyring file not available /usr/share/keyrings/debian-archive-keyring.gpg
    I: Retrieving Release 
    I: Retrieving Packages 
    I: Validating Packages 
    I: Resolving dependencies of required packages...
    I: Resolving dependencies of base packages...
    ...
    ...
    

    7. ຫຼັງຈາກຊຸດຂອງຄວາມເພິ່ງພາອາໄສແລະແພກເກດທີ່ຈະຖືກດາວໂຫລດແລະຕິດຕັ້ງໃນລະບົບຂອງທ່ານບັນຈຸຈະຖືກສ້າງຂື້ນ ເມື່ອຂະບວນການສິ້ນສຸດຂໍ້ຄວາມຈະສະແດງລະຫັດຜ່ານບັນຊີຮາກເລີ່ມຕົ້ນຂອງທ່ານ. ປ່ຽນລະຫັດລັບນີ້ເມື່ອທ່ານເລີ່ມຕົ້ນແລະເຂົ້າສູ່ລະບົບຄອນເທັນເນີເພື່ອທີ່ຈະປອດໄພ.

    are supported and installed on your system.
    perl: warning: Falling back to the standard locale ("C").
    Failed to read /proc/cmdline. Ignoring: No such file or directory
    invoke-rc.d: policy-rc.d denied execution of start.
    Timezone in container is not configured. Adjust it manually.
    Root password is 'root', please change !
    Generating locales (this might take a while)...
      en_IN.en_IN...character map file `en_IN' not found: No such file or directory
    /usr/share/i18n/locales/en_IN:55: LC_MONETARY: unknown character in field `currency_symbol'
     done
    Generation complete.
    

    8. ດຽວນີ້, ທ່ານສາມາດໃຊ້ lxc-ls ເພື່ອລົງບັນຈຸບັນຈຸຂອງທ່ານແລະ lxc-info ເພື່ອເອົາຂໍ້ມູນກ່ຽວກັບຖັງທີ່ແລ່ນ/ຢຸດ.

    ເພື່ອເລີ່ມຕົ້ນບັນຈຸພາຊະນະທີ່ສ້າງຂື້ນ ໃໝ່ ໃນພື້ນຫລັງ (ຈະໃຊ້ເປັນໂດເມນໂດຍລະບຸຕົວເລືອກ -d ) ອອກ ຄຳ ສັ່ງດັ່ງຕໍ່ໄປນີ້:

    # lxc-start -n mydeb -d
    

    9. ຫຼັງຈາກການບັນຈຸໄດ້ເລີ່ມຕົ້ນແລ້ວທ່ານສາມາດລົງບັນຊີແລ່ນທີ່ໃຊ້ ຄຳ ສັ່ງ lxc-ls --active ແລະໄດ້ຮັບຂໍ້ມູນລະອຽດກ່ຽວກັບພາຊະນະທີ່ແລ່ນ.

    # lxc-ls --active
    

    10. ເພື່ອເຂົ້າສູ່ລະບົບບັນຈຸຄອນເທັນເນີອອກ ຄຳ ສັ່ງ lxc-console ໃສ່ກັບຊື່ບັນຈຸທີ່ ກຳ ລັງແລ່ນ. ເຂົ້າສູ່ລະບົບກັບຜູ້ໃຊ້ຮາກແລະລະຫັດຜ່ານທີ່ຜະລິດໂດຍຄ່າເລີ່ມຕົ້ນໂດຍຜູ້ຄວບຄຸມ lxc.

    ເມື່ອເຂົ້າສູ່ລະບົບບັນຈຸແລ້ວທ່ານສາມາດເອີ້ນໃຊ້ ຄຳ ສັ່ງ ຈຳ ນວນ ໜຶ່ງ ເພື່ອກວດສອບການແຈກຢາຍໂດຍການສະແດງເນື້ອຫາເອກະສານ /etc/issue.net , ປ່ຽນລະຫັດລັບຮາກໂດຍການອອກ ຄຳ ສັ່ງ passwd ຫຼືເບິ່ງລາຍລະອຽດກ່ຽວກັບອິນເຕີເຟດເຄືອຂ່າຍກັບ ifconfig .

    # lxc-console -n mydeb
    # cat /etc/issue.net
    # ifconfig
    # passwd
    
     lxc-console -n mydcb
    
    Connected to tty 1
    Type &ltCtrl+a q> to exit the console, <Ctrl+a Ctrl+a> to enter Ctrl+a itself
    
    Debian GNU/Linux 8 mydcb tty1
    
    mydcb login: root
    Password: 
    Last login: Fri Apr  1 07:39:08 UTC 2016 on console
    Linux mydcb 3.10.0-229.el7.x86_64 #1 SMP Fri Mar 6 11:36:42 UTC 2015 x86_64
    
    The programs included with the Debian GNU/Linux system are free software;
    the exact distribution terms for each program are described in the
    individual files in /usr/share/doc/*/copyright.
    
    Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
    permitted by applicable law.
    [email :~# cat /etc/issue.net
    Debian GNU/Linux 8
    [email :~# ifconfig
    eth0      Link encap:Ethernet  HWaddr 00:16:3e:d9:21:d7  
              inet6 addr: fe80::216:3eff:fed9:21d7/64 Scope:Link
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:107 errors:0 dropped:0 overruns:0 frame:0
              TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000 
              RX bytes:5796 (5.6 KiB)  TX bytes:648 (648.0 B)
    
    lo        Link encap:Local Loopback  
              inet addr:127.0.0.1  Mask:255.0.0.0
              inet6 addr: ::1/128 Scope:Host
              UP LOOPBACK RUNNING  MTU:65536  Metric:1
              RX packets:0 errors:0 dropped:0 overruns:0 frame:0
              TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:0 
              RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
    
    [email :~# passwd root
    Enter new UNIX password: 
    Retype new UNIX password: 
    passwd: password updated successfully
    

    11. ເພື່ອຖອດລະຫັດຄອນເທັນເນີແລະກັບໄປທີ່ຄອນໂຊນໂຮດຂອງທ່ານໂດຍເຮັດໃຫ້ຖັງບັນຈຸຢູ່ໃນສະຖານະການເຄື່ອນໄຫວ, ກົດ Ctrl + a ແລ້ວ q ຢູ່ເທິງແປ້ນພິມ.

    ເພື່ອຢຸດບັນຫາພາຊະນະທີ່ແລ່ນຢູ່ບັນດາ ຄຳ ສັ່ງຕໍ່ໄປນີ້.

    # lxc-stop -n mydcb
    

    12. ເພື່ອສ້າງພາຊະນະ LXC ໂດຍອີງໃສ່ແມ່ແບບຂອງ Ubuntu, ໃຫ້ໃສ່ໄດເລກະທໍລີ /usr/sbin/ ແລະສ້າງ link link debootstrap ຕໍ່ໄປນີ້.

    # cd /usr/sbin
    # ln -s debootstrap qemu-debootstrap
    

    13. ແກ້ໄຂເອກະສານ qemu-debootstrap ກັບບັນນາທິການ Vi ແລະແທນທີ່ສອງສາຍ MIRROR ຕໍ່ໄປນີ້:

    DEF_MIRROR=”http://mirrors.kernel.org/ubuntu”
    DEF_HTTPS_MIRROR=”https://mirrors.kernel.org/ubuntu”
    

    ສຳ ລັບການອ້າງອີງ, ເບິ່ງເນື້ອໃນຕໍ່ໄປນີ້ແລະວາງສອງແຖວຂ້າງເທິງດັ່ງທີ່ໄດ້ກ່າວໄວ້:

    ....
    MAKE_TARBALL=""
    EXTRACTOR_OVERRIDE=""
    UNPACK_TARBALL=""
    ADDITIONAL=""
    EXCLUDE=""
    VERBOSE=""
    CERTIFICATE=""
    CHECKCERTIF=""
    PRIVATEKEY=""
    
    DEF_MIRROR=”http://mirrors.kernel.org/ubuntu”
    DEF_HTTPS_MIRROR=”https://mirrors.kernel.org/ubuntu”
    

    14. ສຸດທ້າຍສ້າງຖັງ LXC ໃໝ່ ໂດຍອີງໃສ່ແມ່ແບບ Ubuntu ອອກ ຄຳ ສັ່ງ lxc-create ດຽວກັນ.

    ເມື່ອຂັ້ນຕອນການຜະລິດຕູ້ຄອນເທັນເນີຈົບຂໍ້ຄວາມຈະສະແດງຂໍ້ມູນການເຂົ້າສູ່ລະບົບຂອງທ່ານໃນຕອນຕົ້ນຂອງການບັນຈຸດັ່ງທີ່ສະແດງຢູ່ໃນ ໜ້າ ຈໍຂ້າງລຸ່ມນີ້.

    # lxc-create -n myubuntu -t ubuntu
    
    Checking cache download in /var/cache/lxc/precise/rootfs-amd64 ... 
    Installing packages in template: ssh,vim,language-pack-en
    Downloading ubuntu precise minimal ...
    

    15. ເພື່ອສ້າງພາຊະນະສະເພາະໂດຍອີງໃສ່ແມ່ແບບທ້ອງຖິ່ນໃຊ້ syntax ຕໍ່ໄປນີ້:

    # lxc-create -n container_name -t container_template -- -r distro_release -a distro_architercture 
    

    ນີ້ແມ່ນບົດຄັດຫຍໍ້ຂອງການສ້າງຖັງ wheezy debian ທີ່ມີສະຖາປັດຕະຍະ ກຳ ຂອງລະບົບ amd64.

    # lxc-create -n mywheezy -t debian -- -r wheezy -a amd64
    
    debootstrap is /sbin/debootstrap
    Checking cache download in /var/cache/lxc/debian/rootfs-wheezy-amd64 ... 
    Downloading debian minimal ...
    W: Cannot check Release signature; keyring file not available /usr/share/keyrings/debian-archive-keyring.gpg
    I: Retrieving Release 
    I: Retrieving Packages 
    I: Validating Packages 
    I: Resolving dependencies of required packages...
    I: Resolving dependencies of base packages...
    I: Found additional required dependencies: insserv libbz2-1.0 libdb5.1 libsemanage-common libsemanage1 libslang2 libustr-1.0-1 
    I: Found additional base dependencies: adduser debian-archive-keyring gnupg gpgv isc-dhcp-common libapt-pkg4.12 libbsd0 libclass-isa-perl libedit2 libgdbm3 libgssapi-krb5-2 libk5crypto3 libkeyutils1 libkrb5-3 libkrb5support0 libncursesw5 libprocps0 libreadline6 libssl1.0.0 libstdc++6 libswitch-perl libusb-0.1-4 libwrap0 openssh-client perl perl-modules procps readline-common 
    I: Checking component main on http://http.debian.net/debian...
    I: Retrieving libacl1 2.2.51-8
    I: Validating libacl1 2.2.51-8
    I: Retrieving adduser 3.113+nmu3
    I: Validating adduser 3.113+nmu3
    I: Retrieving apt 0.9.7.9+deb7u7
    I: Validating apt 0.9.7.9+deb7u7
    I: Retrieving libapt-pkg4.12 0.9.7.9+deb7u7
    I: Validating libapt-pkg4.12 0.9.7.9+deb7u7
    I: Retrieving libattr1 1:2.4.46-8
    I: Validating libattr1 1:2.4.46-8
    I: Retrieving base-files 7.1wheezy9
    I: Validating base-files 7.1wheezy9
    I: Retrieving base-passwd 3.5.26
    ...
    

    16. ຍົກຕົວຢ່າງ, ພາຊະນະສະເພາະ ສຳ ລັບການເຜີຍແຜ່ແລະສະຖາປັດຕະຍະ ກຳ ທີ່ແຕກຕ່າງກັນກໍ່ສາມາດສ້າງຈາກແມ່ແບບທົ່ວໄປເຊິ່ງຈະຖືກດາວໂຫລດມາຈາກຫໍສະມຸດ LXC ຕາມທີ່ສະແດງໃນຕົວຢ່າງຂ້າງລຸ່ມນີ້.

    # lxc-create -n mycentos6 -t download -- -d centos -r 6 -a i386
    

    ນີ້ແມ່ນບັນຊີລາຍຊື່ຂອງສັບປ່ຽນລະຫັດ ຄຳ ສັ່ງ lxc-create :

    -n = name 
    -t = template
    -d = distibution
    -a = arch
    -r = release
    

    17. ພາຊະນະບັນຈຸສາມາດຖືກລຶບອອກຈາກເຈົ້າພາບຂອງທ່ານດ້ວຍ ຄຳ ສັ່ງ lxc-destroy ທີ່ອອກຕໍ່ກັບຊື່ບັນຈຸ.

    # lxc-destroy -n mywheezy
    

    18. ຕູ້ຄອນເທນເນີສາມາດຖືກລອກອອກຈາກພາຊະນະທີ່ມີຢູ່ແລ້ວໂດຍການອອກ ຄຳ ສັ່ງ lxc-clone :

    # lxc-clone mydeb mydeb-clone
    

    19. ແລະສຸດທ້າຍ, ພາຊະນະທີ່ຖືກສ້າງຂື້ນທັງ ໝົດ ແມ່ນຢູ່ໃນລະບົບ /var/lib/lxc/. ຖ້າບາງເຫດຜົນທ່ານ ຈຳ ເປັນຕ້ອງດັດປັບການຕັ້ງຄ່າພາຊະນະບັນຈຸດ້ວຍຕົນເອງທ່ານຕ້ອງແກ້ໄຂເອກະສານ config ຈາກແຕ່ລະບ່ອນບັນຈຸ.

    # ls /var/lib/lxc
    

    ນີ້ແມ່ນພຽງແຕ່ສິ່ງພື້ນຖານທີ່ທ່ານຕ້ອງການຮູ້ເພື່ອເຮັດວຽກຂອງທ່ານຮອບ LXC.