0부터 시작하는 가상머신과 네트워크 공부 - 가상머신이란?

- Devops는 파이프라인 환경을 만들어 개발자가 배포를 쉽게 할 수 있게 해준다
1. VMWARE 설정

- VMWARE 실행

- C드라이브에 VM 폴더 생성

- 생성한 폴더를 Workspace로 지정한다

- change settings에 들어간다

- vmnet0의 브릿지를 변경하고 apply만 누른다. 이는 Len card 드라이버로 PCIe는 사용하는 포트명, Gbe는 기가바이트를 지원한다는 의미이다

- vmnet1의 서브넷을 변경하고 apply만 누른다. vmnet은 네트워크 어뎁터로 허브라고 생각하면 된다

- vmnet 두개를 생성하고 서브넷을 설정하고, vmnet8을 host only로 바꾼다. host only는 외부 네트워크와 연결 없이 vmware끼리만 통신이 가능하게 한다

- vmnet10을 생성하고 설정한다. 그 후 apply 및 ok를 누른다

- 다음과 같이 설정되면 된다

- 실습에 사용할 파일 다운
2. VMWARE와 가상머신

- OS는 물리 자원에 접근하며, 외부 사용자가 물리 자원에 접근할때 Kernel의 기능( 미리 내장된 코드 )을 통해 처리시켜준다. Kernel은 os의 핵심으로 각종 기능이 내장된 코드로 구현되어있다
- nic : network interface card로 랜카드다
- unix는 메인프레임에서 사용. 이 unix는 처음 나왔을때 가상화가 존재했었지만, 메인프레임에서만 가능했었다. 이를 vmware에서 다른 컴퓨터들도 사용가능한 가상화 기능을 만들었다. 요즘은 가상화가 다 지원된다
- VT-X : Kernel의 내장된 기능으로 물리 자원을 통해 가상 자원을 만들어준다. 가상 자원을 요청하면 kernel은 물리자원들에 접근하여 가상자원을 만들어 사용자에게 전달한다

- 우리는 컴퓨터의 vt-x를 통해 vmware(가상머신)을 만들고, vmware의 vt-x를 통해 가상 머신을 만들어 중첩 가상화를 할 수 있다
- Hypervisor : vmware workstation은 hypervisor로 가상 머신을 만드는 논리적 플랫폼 / 소프트웨어다. Hypervisor는 xml 파일의 자원 할당 정보를 확인하고, os의 kernel의 VT-X을 통해서 물리자원을 추상화해서 가상자원을 만들고, 이를 통해 가상 머신을 제작한다
- Full virtualization : 전 가상화는 모든 명령어를 가상화하는 것으로, vmware는 전 가상화를 한다
- Para-Virtualization : 반 가상화는 꼭 필요한 명령어만 가상화를 하며, 이를 위해 Kernel을 수정해야한다
- 사용자는 가상 자원을 만들때 kernel에 접근하여, kernel에서는 자신에게 내장된 기능을 탐색하여, 해당 요청을 처리할 수 있는지 판단하고, 처리할 수 있다면, 물리자원에 접근하여 가상자원을 만든다
- 가상화 : 물리 자원을 추상화하여 가상 자원을 만들고, 추상화한 자원을 묶어서 묶은 가상 자원끼리 통신하게 하는 것으로 추상화 계층을 구축해주는 프로세스다
- 물리 자원들의 성능을 나눠서 가상 자원으로 할당해준다. 실제로는 하나의 물리자원이지만, 이 하나의 자원의 성능을 나눠서 여러 가상자원을 만들어 주는 것이다
- 본 컴퓨터의 OS는 HOST OS이고, 가상 자원의 OS는 GUEST OS다
- 가상 머신은 이 가상자원, Guest os, app을 묶은 것이다
- 클라우드에서는 템플릿을 만들어서 이와같은 다수의 가상머신을 쉽게 만들어줄수 있다. 인스턴스의 개념을 가상머신에 더한 것이다. 즉, 템플릿을 만들어 인스턴스 ( 인스턴스 vm, 가상머신 )을 제공하는 것이다
3. 클라우드에서의 가상머신

- 클라우드에서는 이미지들을 POOL ( AWS에서는 AMI )에 저장해놓고, 이 이미지들의 정보를 DB TABLE에 저장해놓는다. 이를 통해, 사용자 요청에 따라 원하는 이미지를 DB TABLE을 통해 조회해서 POOL에 접근해 이미지를 선택하고, 자원들을 가상화해서 인스턴스를 자동으로 쉽게 생성해준다
- 이미지란? 어플리케이션 실행에 필요한 프로그램 본체+라이브러리+관련 미들웨어+OS/네트워크 설정값 등을 모아서 만든 하나의 객체
- Iso 이미지란? CD 또는 DVD와 같은 광 디스크에있는 동일한 데이터 사본. 여기서는 OS 설치를 위해 필요한 데이터들의 사본이다
4. 가상머신 자원

- 물리자원의 성능을 나눠서 가상자원을 만드는 것이다.
- CPU가 4개가 있다면 각 가상머신에 4개의 CPU까지 줄 수 있다. 성능을 나눠서 주는 것으로, 각 가상머신에 4개까지 줄 수 있지만, 한 개의 가상머신에 4개 이상의 CPU를 제공하는 것은 불가능하다. 본 물리자원의 퍼포먼스를 나누는 것이기 때문에 본 물리자원 이상의 자원은 줄 수 없다. 가상머신이 3개라면 4/3/4는 가능하다. 이는 성능을 나눠서 주는 것이기에 가능하다
- Ram은 정해진 Ram 용량 이상을 할당할 수 없다. 16기가라면 가상머신들의 총 Ram 용량이 16기가를 넘으면 안된다. 단, 사용하는 정도에 따라 유동적으로 각 가상머신에 할당된 용량을 변동시키는 벌루닝 기술을 사용할 수 있다
- 벌루닝 기술 : 동작을 멈추고 있는 (Idle) 상태인 가상머신에 할당한 vram 용량을 회수하여 다른 가상머신에 할당해주는 기술
- DISK는 THIN과 THICK 방식이 있으며, THICK은 단순히 사용할 공간을 물리적 스토리지로부터 정확히 용량을 나누어 할당하는 것이고, THIN은 실제 사용하는 만큼 할당해주는 것이다. 따라서 THIN방식을 사용하면 DISK는 가상머신들의 총 DISK 용량 합이 본 물리자원의 DISK 용량을 넘을 수 있다
- THIN은 사전에 디스크 공간을 확보하지 않고, 초기에 필요한 용량만 확보하여 필요에 따라 공간을 확보하여 사용하는 방식으로 디스크 활용도가 높으나 속도가 느리다
- THICK은 두가지 인데 Lazy zeored는 사전에 확보한 공간의 값들을 사용하면서 삭제하는 방식이다. 이는 디스크 쓰기마다 사용되지 않는 공간의 기존 데이터를 삭제하는 작업을 수행해야 하므로 성능이 떨어진다
- THICK의 Eager zeored는 사전에 확보된 공간에 0값을 채워 포맷시키고 사용하는 방식으로 프로비저닝( 초기 설정시 )이 느리지만, 데이터 쓰기 성능은 좋다
- 프로비저닝이란? 사용자의 요구에 맞게 시스템 자원을 할당, 배치, 배포해 두었다가 필요 시 시스템을 즉시 사용할 수 있는 상태로 미리 준비해 두는 것
- NIC를 추상화하면 하나의 독립적인 네트워크가 생성된다. 이 추상화된 독립적인 네트워크끼리 통신이 가능하게할 수 있다
5. 가상머신 생성

- 새 가상머신을 생성한다

- 다운받은 CENTOS를 선택해준다

- 전부 test로 입력해준다

- 본 컴퓨터에서는 가상머신을 폴더에 저장해 관리한다. 가상머신은 하나의 컴퓨터지만 본 컴퓨터에서는 하나의 애플리케이션이기에 본 컴퓨터 OS와 겹치면 안된다. 따라서 폴더에 저장해준다
- 우리는 VM폴더안에 CentOS1폴더에 이 가상머신을 저장한다

- customize hardware는 가끔 설정이 적용 안될 수 있기에, 생성 후 시작하는 옵션을 해제하고 Finish해준다

- Ram 수정

- CPU CORE 수정

- CD/DVD 지우기. CD/DVD2는 지우면 안된다

- Network 설정

- 나머지 삭제한다

- enter를 입력하면 설치전 점검을 한다

- 시간 설정을 해준다

- sr0는 리눅스에서 dvd롬이다. 위에는 로컬에 설치용이고, 밑에 network는 network에 저장된 설치 파일을 통해 설치하는 것이다

- 가벼운 GUI 환경으로 설정한다. 더 가벼운 환경은 Minimal install이다. 더 무거운 환경은 GNOME Desktop이다

- Configure 눌러준다

- Automatic 체크

- Address외에는 동일하게 설정하고 Save해준다. 가상머신의 Ip와 게이트 웨이 주소를 설정한다

- 잘 접속이 된다
6. Volumn이란

- 본 컴퓨터의 자원을 바꿀때나 문제가 생기면 가상머신을 종료하고, 본 컴퓨터를 종료해야하기에, 가상머신에서 실행되는 애플리케이션이 종료된다.
- 클라우드에서는 할당한 Local Disk에 서버를 설치하지 않는다. 위와 같은 상황이 일어나서 종료를 하게 되면 서버의 서비스가 중단이 되어 클라우드에서 치명적이기에, Local Disk에 설치를 하지 않고, Shared Storage에서 할당한 Volumn을 mount해서 이 Volumn에 설치한다
- 이떄, Xml 파일의 Disk에 location을 지정하여 해당 Volumn의 주소를 입력해준다
- Volumn을 mount하면, 실제 local에 disk가 존재하는 것이 아닌, Shared Storage에 존재한다. Volumn에 서버를 설치하면, 이 공유 Storage의 Volumn에 저장되기에, Local에서 문제가 생겨도 서버에는 이상이 없으며, 다른 컴퓨터에 mount해서 실행중인 서버를 옮길 수 있다
- ISCSI 프로토콜을 사용하여 mount를 한다. ISCSI는 STORAGE PROTOCOL로 TCP에서의 데이터 전송을 도와주는 인터페이스이다
- 클라우드의 특징 1. ON-DEMAND : 서비스를 요청하면 바로 제공해준다
- 클라우드의 특징 2. LIVE Migration(지역간 이동) : 실행중인 서버를 다른 컴퓨터에 옮길 수 있다