#network #virtualization #namespace #cgroups
Virtualization
OS = 하드웨어 virtualization S/W
- Physical 하드웨어를 사용하는 데에서 생기는 제한을 인식하고 모든 하드웨어 자원을 virtualize 할 필요가 있다
- OS는 driver를 사용하여 하드웨어를 구동하는데 driver는 S/W이다
- driver가 실제로 하드웨어 자원을 접근하는 대신 두 단계로 나누어서
- 하위층 driver는 그대로 하드웨어 자원에 접근하되 , OS에게 보여주고 서비스하는 상위층 driver는 하드웨어의 일부를 독립적으로 구분하고 떼어내거나 혹은 다수의 하드웨어처럼 사용할 수 있도록 virtualize
VM : virtualize machine
CPU, DRAM, Storage : 실제 하드웨어의 자원을 나누어 서로 영향 주지 않게 독립적으로 사용
-> virtualization이 간단
Network Interfaces : 하나의 하드웨어 인터페이스를 여러 개 있는 것처럼 제공하고 원래의 하드 웨어가 제공하는 해당 network 계층의 기능 외에 상위 계층의 기능도 제공 -> virtualization이 보다 복잡함
virtualization의 필요성 : 별도의 하드웨어 추가 없이 서로 완전히 독립적으로 사용할 수 있는 환경이 필요
VLAN(macvlan과 ipvlan) in Linux
- Underlay network drivers : network virtualization의 기반을 제공
- ethernet interface와 같은 하드웨어에 직접 접근하는 네트워크 가상화 드라이버
bridge => virtualized L2 switch
macvlan / ipvlan => MAC 계층 / IP 계층 virtualized driver
- 하나의 physical network interface에 다수의 MAC 주소 배정
- 하나의 MAC 주소에 다수의 IP 주소 배정
VXLAN , NVGRE
- underlay network와 container/VM사이를 연결하는 overlay 가상화 드라이버
Namespaces and Cgroups in Linux
- 기본적으로 OS는 투명하다
- 일반 user가 시스템의 모든 자원, 다른 사용자, PID, 파일 시스템 마운트, 메모리 등등을 모두 다 볼 수 있음
- 독립적으로 서로 구분된 시스템 view가 필요한 경우에는 부적절
- Linux kernel 은 시스템 환경을 가상화 하는 다양한 lightweight tool들을 구성하는 cgroups 와 namespaces를 제공
- Docker가 cgroups 과 namespaces 위에 구축한 대표적인 프레임워크
- Namespaces는 process trees, network interfaces, user IDs, filesystem mounts 등 시스템 요소들을 경계를 긋고 제한하는 mechanism
Linux의 다양한 namespaces
- Mount namespaces : 프로세스가 보는 mount구조를 다른 프로세스 들과 분리
- UTS(unix time sharing) namespaces : 호스트와 도메인 이름을 다른 uts와 분리
- IPC namespaces : 서로 다른 프로세스 그룹 사이에서 IPC를 서로 분리
- PID namespaces : 임의의 프로세스가 자신이 init 프로세스처럼 PID1이 되는 process tree를 구성할 수 있도록 하여 분리
- Network namespaces : Network protocol services와 interfaces를 가상화 , 각 network namespace는 자신만의 가상화된 네트워크 장치로 구성
- User namespaces : 서로 다른 namespace에 속한 user들은 다른 namespace의 user들의 존재를 모름
- Cgroup namespaces : /proc/self/cgroup file의 내용을 가상화, 한 cgroup namespace에 속한 프로세스들은 자기 namespace 내의 자원에만 접근
Control groups (cgroups)
- 각 프로세스 그룹에 OS 자원을 배정하고, 측정하는 커널 장치
- Cgroups를 사용하여 CPU time, network, memory, block io 같은 자원을 배정
- 각 cgroup마다 다른 권한을 부여 가능
- namespaces에 cgroups를 적용하여 일단의 프로세스들 container로 구성하여 해당 프로세스들만의 virtual 시스템을 구현
- Linux 에 구현된 namespace system calls : clone(2) , setns(2) , unshare(2)
728x90
'CS(Computer Science) > 소프트웨어공학' 카테고리의 다른 글
8. Ansible - Configuration Management (0) | 2023.02.06 |
---|---|
7. KUBERNETES (0) | 2023.02.06 |
5. Docker3 (4) | 2023.02.06 |
4. Docker2 (0) | 2023.02.06 |
3. Docker (0) | 2023.02.06 |