이전글 :
2012/09/03 - [Skills/가상화(VMware,Xen)] - 가상화 시스템에서 자원컨트롤에 대한 신요소! Linux Container - 1부
지난번에 이어 2부이다. 미리 예고했듯이, 이 LXC 를 이용한 가상 머신을 구동하는 방법과,
네트워크 설정, 그리고 자원 컨트롤 방법에 대해서 간략하게나마 다뤄보도록 하겠다.
1. Network Setting
1.1 Virtual Bridge
- Virtual Bridge Interface 를 이용하여, 가상머신이 외부로의 통신이 가능하도록 할 것이다.
1.1.1 DHCP
# ifconfig
eth0 Link encap:Ethernet HWaddr 00:21:F6:00:00:17
inet addr:10.179.118.119 Bcast:10.179.119.255 Mask:255.255.252.0
inet6 addr: fe80::221:f6ff:fe00:17/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:4751677 errors:0 dropped:154088 overruns:0 frame:0
TX packets:1794208 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:3033643916 (2.8 GiB) TX bytes:317963037 (303.2 MiB)
Interrupt:73
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:16436 Metric:1
RX packets:22 errors:0 dropped:0 overruns:0 frame:0
TX packets:22 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:1460 (1.4 KiB) TX bytes:1460 (1.4 KiB)
Virtual Bridge 추가
[root@Test-Mirr mnt]# vi /etc/sysconfig/network-scripts/ifcfg-virbr0
DEVICE="virbr0"
TYPE="Bridge"
BRIDGE_FORWARDDELAY="0"
PROMISC="yes"
NM_CONTROLLED="no"
ONBOOT="yes"
BOOTPROTO="dhcp"
Bridge 멤버 설정
[root@Test-Mirr mnt]# vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0"
HWADDR="00:21:f6:00:00:17"
NM_CONTROLLED="no"
ONBOOT="yes"
BOOTPROTO="none"
TYPE="Ethernet"
USERCTL="no"
PEERDNS="yes"
IPV6INIT="no"
BRIDGE="virbr0"
[root@Test-Mirr mnt]# service network restart
1.2 Static Setting
- Virbr0 에 IP 와 Subnet, Gateway 를 추가해 주면 된다.
[root@Test-Mirr mnt]# vi /etc/sysconfig/network-scripts/ifcfg-virbr0
DEVICE="virbr0"
TYPE="Bridge"
BRIDGE_FORWARDDELAY="0"
PROMISC="yes"
NM_CONTROLLED="no"
ONBOOT="yes"
BOOTPROTO="static"
IPADDR="{IP address}"
PREFIX="24"
GATEWAY="{gateway}"
HWADDR="{MAC_ADDRESS}"
[root@Test-Mirr mnt]# service network restart
2. Start the Container
[root@Test-Mirr mnt]# lxc-start -n ol5-test1
INIT: version 2.86 booting
Welcome to Oracle Linux Oracle Linux Server release 5.7
Press 'I' to enter interactive startup.
기본 키맵 (us)을 읽어오는 중: [ OK ]
호스트이름 ol5-test1을 설정 중: [ OK ]
raidautorun: unable to autocreate /dev/md0
파일시스템을 확인하는 중
[ OK ]
mount: can't find / in /etc/fstab or /etc/mtab
로컬 파일시스템을 마운트하는 중: [ OK ]
로컬 파일시스템 쿼타를 활성화 중: [ OK ]
/etc/fstab 스왑을 활성화함: [ OK ]
INIT: Entering runlevel: 3
비대화식 시작모드를 시작함
sysstat (을)를 시작 중: Calling the system activity data collector (sadc):
[ OK ]
배경 readahead를 시작 중: [ OK ]
(snip)
sshd (을)를 시작 중: [ OK ]
cups (을)를 시작 중: [ OK ]
xinetd (을)를 시작 중: [ OK ]
crond (을)를 시작 중: [ OK ]
Starting xfs: [ OK ]
anacron (을)를 시작 중: [ OK ]
atd (을)를 시작 중: [ OK ]
yum-updatesd를 시작 중: [ OK ]
Regenerating SSH host keys.
sshd 를 정지 중: [ OK ]
SSH1 RSA 호스트 키를 생성 중: [ OK ]
SSH2 RSA 호스트 키를 생성하는 중: [ OK ]
SSH2 DSA 호스트 키를 생성하는 중: [ OK ]
sshd (을)를 시작 중: [ OK ]
Regenerating up2date uuid.
Changing password for user root.
New UNIX password:
[root@Test-Mirr mnt]# lxc-start -n ol6-test1
INIT: version 2.86 booting
Welcome to Oracle Linux Oracle Linux Server release 6.2
Press 'I' to enter interactive startup.
(snip)
3. Logging in to Containers
- 만들어진 Linux Container 들에 접속하기 위한 방법으로, Console 접속을 하는 방법이다.
[root@Test-Mirr ~]# lxc-console --help
Usage: lxc-console --name=NAME [--tty NUMBER]
[root@Test-Mirr ~]# lxc-console -n ol6-test1
Type <Ctrl+a q> to exit the console
Oracle Linux Server release 6.2
Kernel 2.6.39-200.24.1.el6uek.x86_64 on an x86_64
ol6-test1 login:root
Password:
[root@ol6-test1 ~]#
4. Container 추가하기
[root@Test-Mirr ~]# lxc-create -n ol6-test2 -t ol6
[root@Test-Mirr ~]# lxc-ls
ol6-test1 ol6-test1
ol6-test2
[root@Test-Mirr ~]# lxc-info -n ol6-test1
state : RUNNING
pid: 10171
5. 모니터링 및 Contianer 종료하기
5.1 Container Listing
[root@Test-Mirr ~]# lxc-ls
ol6-test1 ol6-test1
ol6-test2
5.2 Container 정보보기
[root@Test-Mirr ~]# lxc-info -n ol6-test1
state : RUNNING
pid: 10171
5.3 일시중단 및 재개하기
[root@Test-Mirr ~]# lxc-freeze -n ol6-test1
[root@Test-Mirr ~]# lxc-info -n ol6-test1
state : FROZEN
pid: 10171
[root@Test-Mirr ~]# lxc-unfreeze -n ol6-test1
5.4 Container 종료
[root@Test-Mirr ~]# lxc-shutdown -n ol6-test1
[root@Test-Mirr ~]# lxc-kill -n ol6-test1
5.5 Monitoring
[root@Test-Mirr ~]# lxc-monitor -n ol6-test1
'ol6-test1' changed state to [STARTING]
'ol6-test1' changed state to [RUNNING]
5.6 lxc-wait
[root@Test-Mirr ~]# lxc-wait -n %CTR -s ABORTING && lxc-wait -n $CTR -s STOPPED && echo "Container $CTR terminated with an error."
- 상태에 대한 변경이 될때까지 대기를 하도록 하는 명령어.
6. Resource 컨트롤
- LXC 는 CGroup 을 이용하여 간단하게, 그리고 바로 자원의 조절이 가능하다.
6.1 Cpu Controll
6.1.1 Cpu (Core) 개수 보기
[root@Test-Mirr ~]# lxc-cgroup -n ol6-test1 cpuset.cpus
0-7
6.1.2 Cpu 할당
[root@Test-Mirr ~]# lxc-cgroup -n ol6-test1 cpuset.cpus 0,1
[root@Test-Mirr ~]# lxc-cgroup -n ol6-test1 cpuset.cpus
0-1
6.1.3 CPU time 조절 ( CPU 공유 자원 25% 로 제한 )
[root@Test-Mirr ~]# lxc-cgroup -n ol6-test1 cpu.shares
1024
[root@Test-Mirr ~]# lxc-cgroup -n ol6-test1 cpu.shares 256
[root@Test-Mirr ~]# lxc-cgroup -n ol6-test1 cpu.shares
256
6.2 BlkIO 조절 ( Access 공유 50% 로 제한 )
[root@Test-Mirr ~]# lxc-cgroup -n ol6-test1 blkio.weight 500
[root@Test-Mirr ~]# lxc-cgroup -n ol6-test1 blkio.weight
500
6.3 Memory
6.3.1 Swappiness 조절
[root@Test-Mirr ~]# lxc-cgroup -n ol6-test1 memory.swappiness
60
[root@Test-Mirr ~]# lxc-cgroup -n ol6-test1 memory.swappiness 0
[root@Test-Mirr ~]# lxc-cgroup -n ol6-test1 memory.swappiness
0
6.3.2 Task 별 메모리 튜닝.
[root@Test-Mirr ~]# lxc-cgroup -n ol6-test1 memory.limit_in_bytes
9223372036854775807
[root@Test-Mirr ~]# lxc-cgroup -n ol6-test1 memory.limit_in_bytes 1G
[root@Test-Mirr ~]# lxc-cgroup -n ol6-test1 memory.limit_in_bytes
1073741824
[root@Test-Mirr ~]# lxc-cgroup -n ol6-test1 memory.memsw.limit_in_bytes
9223372036854775807
[root@Test-Mirr ~]# lxc-cgroup -n ol6-test1 memory.memsw.limit_in_bytes 2G
[root@Test-Mirr ~]# lxc-cgroup -n ol6-test1 memory.memsw.limit_in_bytes
2147483648
[root@Test-Mirr ~]# lxc-cgroup -n ol6-test1 memory.soft_limit_in_bytes
9223372036854775807
[root@Test-Mirr ~]# lxc-cgroup -n ol6-test1 memory.soft_limit_in_bytes 512M
[root@Test-Mirr ~]# lxc-cgroup -n ol6-test1 memory.soft_limit_in_bytes
536870912
6.4 Permenant Setting
- /etc/lxc/{Container Name}/config 파일에 CGroup 을 영구적으로 설정 가능.
[root@Test-Mirr ~]# vi /etc/lxc/ol6-test1/config
# Permanently tweaked resource settings
lxc.cgroup.cpu.shares 256
lxc.cgroup.blkio.weight 500
lxc.cgroup.memory.limit_in_bytes 1G
lxc.cgroup.memory.memsw.limit_in_bytes 2G
lxc.cgroup.memory.soft_limit_in_bytes 512M
7. Deleting Containers
- 간단한 명령으로 Container 는 삭제가 가능하지만,
BtrFS의 서브볼륨은 직접 지워줘야 하는 번거로움이 있다.
[root@Test-Mirr ~]# lxc-destroy -n ol6-test1
[root@Test-Mirr ~]# btrfs subvolume delete /container/ol6-test1
자.. 이렇게 두번에 걸쳐 간단하게 Linux Container 에 대해서 알아보았다.
VirtualBOX 나 RHEV 의 이미지들또한 이걸 이용해 손쉽게 운영할 수 있으며,
이것을 이용하여 메인 Hypervisor 의 장애로 인해 긴급하게나마 VM 을 임시로라도
운영하기 위해서 사용할 수도 있을것이다.
DR 에 대한 간단한 긴급 복구 Policy 로도 사용이 가능한 부분이 있다는것을 명심해두자..
BtrFS 의 스냅샷 기능과 Rsync 등의 동기화 툴들을 이용하면 불과 5분여만에
동일한 가상머신이 쉽게 복제되어 구동되기 때문에, 활용도는 매우 높을것으로 보여진다.
다음에는 HugeTLB.. 즉 HugePage 의 사용법등에 대해서 한번 정리해 볼 계획이다.
오라클에서 많이 쓰이는 영역이기~ 때문에~ ㅋㅋ
'Skills > 가상화(Hypervisors)' 카테고리의 다른 글
LXC 를 이용해 Legacy OS 환경 구성하기 (0) | 2014.03.09 |
---|---|
Oracle 에서도 Desktop Virtualization Infrastructure 가 있다는거 아니? (0) | 2013.08.22 |
가상화 시스템에서 자원컨트롤에 대한 신요소! Linux Container - 1부 (0) | 2012.09.03 |
IBM Developerworks 의 KVM 관련 글. (0) | 2011.07.15 |
virt-manager 및 가상화 관련 라이브러리들에대한 깨알정보 (0) | 2011.05.12 |