상단

Virtualization(가상화)을 정리 합니다.

 

가상화 인프라


 
  • CPU 가상화

    • VT (Virtualization Technology)를 지원하는 CPU

    • Intel-VT, AMD-V

     
  • Windows에서 CPU가 VT를 지원하는지 확인하는 방법

 
 

700px|VirtualizationIntel.png

 
  • Linux에서 CPU가 VT를 지원하는지 확인하는 방법

 
 
 grep --color vmx /proc/cpuinfo
 grep --color svm /proc/cpuinfo
 egrep '(vmx|svm)' --color=always /proc/cpuinfo
 
  • CPU가 VT를 지원하는데 활성화 되어 있지 않은 경우

    • Windows를 새로 기동하면서 F2 키를 눌러 BIOS 설정 화면을 표시 합니다.

    • SysInfo 탭에서

 
 
 CPU VT (VT-X)                      Supported
 
  • Advanced 탭에서

 
 
 Intel vPro Configuration
 MEBx Entry Hot-Key             [Disabled](Disabled.md)
 
 CPU VT (VT-x)                  [Enabled](Enabled.md)
 Intel VT-d                     [Enabled](Enabled.md)
 Intel TxT                      [Disabled](Disabled.md)
 

가상화 기술의 종류


 

'''가상화 기술의 종류'''

 

{| border="1" cellspacing="0" cellpadding="2" style="width: 100%;" 
|- | style="text-align: center; background-color: rgb(241, 241, 241);" rowspan="1" colspan="2" | 가상화 기술

| style="text-align: center; background-color: rgb(241, 241, 241);" | 상세 
|- | style="text-align: center;" rowspan="4" | 서버 가상화 | Bare-metal Virtualization |

  • 하드웨어와 호스트 운영체제 사이에 Hypervisor가 위치

  • Hypervisor : 물리적 서버 위에 존재하는 가상화 레이어를 통해 운영체제가 수행하는데 필요한 하드웨어 환경을 가상으로 생성. VMM (Virtual Machine Monitor)

 
 

|- 
|     - Full Virtualization
    (전 가상화)

 

|

  • CPU, Memory, Storage, Network 등 모든 자원을 Hypervisor가 직접 제어, 관리하기 때문에 어떤 운영체제라도 수정하지 않고 설치 가능

 
 

|- 
|     - Para Virtualization
    (반 가상화)
 
|

  • Privileged 명령어(Hypercall)는 Hypervisor가 하드웨어로 명령을 수행

  • I/O call 등은 Hypervisor를 거쳐 driver를 사용하여 수행

  • *Monolithic 방식 : Driver가 Hypervisor에 있음

  • *Microkernel 방식 : Driver가 각 Guest에 있음

  • 20% 정도 Guest 운영체제 수정

 
 

|- 
| Hosted Virtualization |

  • Host와 Guest 사이에 Hypervisor가 위치

 
 

|- 
| style="text-align: center;" | 데스크탑 가상화 |
 
|

  • VDI (Virtual Desktop Infrastructure)

 
 

|- 
| style="text-align: center;" | 애플리케이션 가상화 |
 
|

  • 가상 운영 환경 (Virtual Server Environment)을 추가하여 운영체제 가상화

 
 

|- 
| style="text-align: center;" rowspan="2" | 리소스 가상화 |
 
|

  • 스토리지 : 가상 디스크 어댑터

 
 

|- 
|
 
|

  • 네트워크 : 가상 이더넷, 공유 이더넷 어댑터

 
 

|}

 
 
 

'''Hypervisor별 가상화 방식'''

 

{| border="1" cellspacing="0" cellpadding="2" style="width: 100%;" 
|- | style="text-align: center; background-color: rgb(241, 241, 241);" | Hypervisor

| style="text-align: center; background-color: rgb(241, 241, 241);" | 상세 
|- | style="text-align: center;" | KVM

 

VMware

 

|

  • Full Virtualization

  • VT (Virtualization Technology)를 지원하는 CPU가 필요함

  • *HVM (Hardware Virtual Machine)

  • *Intel-VT, AMD-V

  • *ARM (Cortex-A 15 이후)

  • 현재는 Para Virtualization도 지원함

 
 

|- 
| style="text-align: center;" | Xen |

  • Para Virtualization

  • 현재는 Full Virtualization도 지원함

 
 

|}

 

Linux Namespace


 

Linux에서 제공하는 lightweight 가상화 기술로 격리된 환경을 제공 합니다.

 

'''Namespace 분류'''

 

{| border="1" cellspacing="0" cellpadding="2" style="width:100%;" 
|- | style="text-align: center; width: 126px; background-color: rgb(153, 153, 153);" | 분류

| style="text-align: center; width: 640px; background-color: rgb(153, 153, 153);" | 상세 
|- | style="text-align: center; width: 126px;" | UTS

| style="width: 640px;" | Hostname 분할 
|- | style="text-align: center; width: 126px;" | IPC

| style="width: 640px;" | Process 분할 
|- | style="text-align: center; width: 126px;" | PID

| style="width: 640px;" | PID (Process ID) 분할 
|- | style="text-align: center; width: 126px;" | NS

| style="width: 640px;" | File system의 mount 지점 분할 
|- | style="text-align: center; width: 126px;" | NET

| style="width: 640px;" | Network resource 분할
사례) Global namespace에 veth0를 zzns namespace에 veth1을 만들어 통신을 합니다.
ip netns add zzns                                      #--- zzns Namespace 생성
ip netns list zzna
ip link add veth0 type veth peer name veth1   #--- veth0, veth1 Veth (Virtual Ethernet) 생성
ip link list
ip link set veth1 netns zzns                          #--- veth1을 zzns namespace에 추가
'''ip netns exec''' zzns ip link list
 
|- | style="text-align: center; width: 126px;" | USER | style="width: 640px;" | User와 Group ID 분할 |}

 

'''참고 문헌'''

 
 
 

Cgroups


 

Linux Resource의 독점을 방지
CPU, Memory, Block I/O, Network 등을 할당

 

'''Subsystem'''

 

blkio – control/limit IO from block devices
cpu - uses the kernels scheduler to control access to cpu resource
cpuacct – reporting of cpu usage
cpuset – assignment of cpu and memory nodes

 
  • cpusets.cpus (mandatory)

  • cpusets.mems (mandatory)

  • others optional

 
 

devices – allow or deny device access
freezer – suspend or resume tasks
hugetlb – controls and reporting on hugepages
memory – limit and report on memory usage by tasks
net_cls – tags network packets with class id
net_prio – by network interface set priority of network traffic
ns – namespace subsystem

 

vi  /etc/cgconfig.conf

mount {
    cpuset = /cgroup/~;
}
group zzgroup {
    cpu { ~ }
    memory { ~ }
​}

vi  /etc/cgrules.conf

mount {
    cpuset  = /cgroup/cpuset;
    cpu     = /cgroup/cpu;
    cpuacct = /cgroup/cpuacct;
    memory  = /cgroup/memory;
```
    devices = /cgroup/devices;
```
    freezer = /cgroup/freezer;
    net_cls = /cgroup/net_cls;
    blkio   = /cgroup/blkio;
​}

vi  /usr/lib/systemd/system/~.service
systemctl daemon-reload
systemctl restart ~.service

 

service cgconfig start
chkconfig cgconfig on

 

'''Sample'''

yum -y install libcgroup
mkdir -p /service_group
mount -t cgroup -o cpu,memory,nodev /service_group
cd /service_group
  #--- cgcreate -g subsystem: path
cgcreate -g cpu,memory /service_group/web      #--- cgroup 생성
cgset -r cpuset.cpus='0,2,4,6,8,10,12,14' web  #--- cgroup parameter 설정
cgset -r cpuset.mems = '0' httpd               #--- cgset -r parm=value cgroup_path
cgcreate -g cpu,memory /service_group/db
cgset -r cpuset.cpus='1,3,5,7,9,11,13,15' db
cgset -r cpuset.mems = '1' db
lscgroup -g cpu:/docker                        #--- Group 조회
lssubsys ~                                     #--- Sussystem 조회
cgget ~                                        #--- cgroup parameter 조회
  #--- cgexec -g subsystem:cgroup command
cgexec ~                                       #--- cgroup 정보를 가지고 process 시작
  #--- cgdelete [-r](-r.md) subsystem: path
cgdelete
  #--- cgclassify -g subsystem:cgroup pid
cgclassify                                     #--- process를 cgroup에 할당
cgsnapshot
systemd-cgls
systemd-cgtop
ps -eO cgroup
  

'''참고 문헌'''

 
 
 

VLAN


 

LAN : Local Area Network, L2 Switch로 연결된 network

 

Virtual LAN

 

'''802.1Q Tagged VLAN'''

 

IEEE 802.1Q VLAN

 

802.1Q Tagged port (Trunk port, Tagged link)

 

VLAN Tag : 4 bytes

 
  • TRID : 16 bits : Tag Protocol Identifier (0x8100, 0x9100, 0x9200, ...)

  • Priority : 3 bits : Priority levels (0 ~ 7)

  • CFI : 1 byte : Cononical Fromat

  • *0 : canonical MAC

  • *1 : non-canonical MAC

  • VID : 12 bytes : Unique VLAN identifier (0 ~ 4095)

  • *Reserved VID : 0, 4095

 
 

Ethernet Frame : http://cafe.naver.com/neteg/80475

 

'''Untagged VLAN (Native VLAN)'''

 

가장 많은 Traffic이 있는 VLAN 트래픽에 Tag를 붙이지 않도록 하여 사용

 

Tagged port에서 오직 한개만 사용 가능

 

'''Access VLAN'''

 

Switch 장비에서 VLAN 설정하는 방식으로
Access port에 1개의 VLAN Tag를 지정해 주는 방식으로 동작

 

Switch의 Access port별로 VLAN Tag가 지정이 되므로 untagged VLAN으로 동작 합니다.

?                                #--- 도움말
conf t                           #--- configure terminal
int range fa0/1-3                #--- port 1번에서 3번 지정
switchport mode access
switchport access vlan 10        #--- VLAN Tag 지정
exit
int range fa0/4-6
switchport mode access
switchport access vlan 20
exit
end
  
​show vlan brief

'''참고 문헌'''

 
 
 

VDI


 

VDI (Virtual Desktop Infrastructure)의 display protocol

 
  • RDP, RDP 7/8 for windows

  • NX : for linux

  • SPICE for linux, windows

  • VNC

 
 

참고 문헌


 
최종 수정일: 2024-09-30 12:26:18

이전글 :
다음글 :