KVM Host에서 virsh을 통해 CLI 모드만으로 Linux VM을 컨트롤하는 방법을 기술한다.

운영상 원격에서 GUI를 띄우기 힘든 환경에서 CLI 모드를 사용하면 유용하다.

 

본인의 테스트 시스템(테스크탑, Intel i3-8100 기반)에는 VMWare ESXi 6.7 U2가 설치되어 있으며,

이 문서대로 진행 시 위와 같은 VM 스택으로 구성된다. (TYPE 1)

ESXi 위에 CentOS 7 KVM Host VM을 설치 후 virsh를 이용해 CentOS 7 VM을 설치하는 것을 설명한다.

 

1. CentOS 7 KVM Host VM 구성

1.1 ESXi에 CentOS 7 VM을 설치

마이너 버전은 크게 상관없고 여기서는 CentOS 7.7 minimal을 설치 진행함.

ESXi에서 아래와 같은 스펙으로 VM을 생성

  • CPU : 2EA
  • MEM : 8G
  • HDD : 32G
  • NIC : 1EA (Bridged)

OS Install 진행에서 Timezone과 root password 설정해서 설치를 진행한다.

♦ ESXi Host 대신 다른 Hypervisor를 사용해도 무방하다. Linux 기반 KVM도 괜찮다. (아래 TYPE 1-2, TYPE 3의 형태가 되겠다.)

 

1.2 CentOS 7 VM 기본 구성

1) Selinux Disable 처리

2) 네트워크 활성화

⇒ 장치명에 따라 ifcfg-ens192 부분은 수정이 필요할 수 있다.
⇒ 공유기의 dhcp 서버로부터 ip를 자동으로 받는다는 전제로 dhcp client 설정으로 진행. 본인의 네트워크 환경에 따라 static 설정이 필요할 수 있다.

3) 리부팅

 

2. KVM-HOST의 KVM 구성

2.1. KVM 설치 및 환경 구성

1) KVM 인스톨

2) libvirtd 구동 및 시작서비스 등록

⇒ 구동 시 virbr0 이름으로 vNIC이 생성된다. 이 vNIC은 NAT로 동작이 된다. 즉, 생성되는 VM에게 이 vNIC을 통해 NAT IP를 제공한다.

3) VM 이미지 디렉토리 생성

⇒ VM 이미지(qcow, qcow2, raw) 파일이 위치할 곳

4) ISO 저장소 디렉토리 생성

⇒ 해당 디렉토리의 권한이 qemu 유저에게 부족하면 vm install 시 permission 에러가 발생될 수 있다.

 

2.2 환경 구성 및 브릿지 네트워크 구성

1) ISO 파일 업로드

CentOS-7-x86_64-Minimal-1804.iso 파일을 /home/iso에 업로드

2) bridge vNIC 생성

기존 NIC의 config 파일에 설정 추가

br0 vNIC config 파일 생성

⇒ 이렇게 설정 후 network를 restart 하면

아래와 같이 NIC가 확인된다.

⇒ libvirtd를 구동하면 생성되는 virbr0 vNIC (VM NAT 제공용)은 그대로 있고
⇒ ens192 NIC는 사라지고 br0 vNIC가 대신하게 된다. 기존에 dhcp로 받았던 192.168.0.12 ip를 그대로 유지한다.

만약 br0에 static ip로 설정하고 싶다면 아래와 같이 수정을 한다.

 

2.3 vm 설치

1) virt-install 명령을 통해 vm install

⇒ 옵션 설명 :
--graphics none
  이 옵션에 의해 vm을 cli 모드로 설치를 할 수 있다. vnc로 지정하면 vnc를 통해 gui 접근도 가능하다.
  - How to install KVM on CentOS 7 / RHEL 7 Headless Server
  https://www.cyberciti.biz/faq/how-to-install-kvm-on-centos-7-rhel-7-headless-server/

--extra-args="console=tty0 console=ttyS0,115200"
   이 옵션에 의해 cli 모드 이지만 VM의 console로 접근이 가능하다.

--location 옵션 대신 --cdrom 옵션을 줄 수 있지만 --extra-args 옵션을 병행시엔 --location 옵션으로만 설치 가능하다.

그 외 옵션은 virt-install --help 를 통해 확인 가능하다.

2) VM OS 설치 진행

iso를 통해 부팅이 진행된다. (KVM-HOST의 터미널 창에 vm의 콘솔이 자동으로 뜬다.)

그리고 cli 모드의 OS 설치 메뉴가 아래와 같이 뜬다.

⇒ Language settings, Time settings, Installation Destination, Root password 설정을 마치면 OS 설치가 진행된다.

3) vm의 console로 접근

MV OS 설치를 마치고 해당 VM의 Console에 다시 접근하려면

⇒ 엔터를 한번 입력해 준다.
⇒ vm의 콘솔에서 빠져나오려면 Ctrl + ] 키를 입력한다.

⇒ CentOS 7.5 VM의 console로 root/pw 를 입려 후 로긴하면 [root@localhost ~]# 프롬프트가 떨어진다.
⇒ console로 접근 후 ip 설정을 하고서 ssh로 접속을 하여 다른 설정 등을 하면 되겠다.

 

3. kvm (virt) 명령 모음

3.1 virsh

virsh는 bash shell에서 옵션과 함께 명령을 수행하는 것 뿐만아니라 interactive terminal도 제공해 준다.

 

1) running중인 vm 리스트 출력

2) 설치되어 있는 vm 리스트 출력

3) 정상적인 shutdown process를 밟아서 vm OS를 끔

⇒ list --all 옵션으로 확인 시 shutdown을 한 centos75는 shut off로 확인된다.
⇒ 아래 상황에서 shutdown 명령으로 전원이 꺼지지 않는 경우가 발생할 수 있다.
 - vm에 전원 관리 패키지인 acpid가 없어서 (vm에 설치 필요)
 - vm의 OS가 온전하게 부팅되지 않은 상태일 경우

4) 강제로 vm을 끈다.

⇒ 물리 시스템으로 치면 강제로 전원을 내린것과 같다.
⇒ virsh shutdown으로 shut off가 진행되지 않는다면 destory로 강제 shutdown을 수행한다.
⇒ host 시스템에서 실행 중인 vm의 qemu 프로세스를 kill 해도 vm이 강제 종료된다.

5) vm 영구 삭제

⇒ 저장소의 qcow2 파일 및 구성 xml 파일 삭제됨. vm을 종료 후 진행해야 한다.

6) vm xml config 파일 수정

vm의 xml config 파일들은 아래 디렉토리에 위치해 있다.

7) xml dump

기존 xml 파일을 dump 하기

VM을 등록 해제하고, 다시 등록

⇒ 만약 VM의 환경구성을 수정하고 싶으면 xml 파일을 수정한 후 등록한다.
⇒ 이 방법은 VM의 이름을 변경하고자 할때에 쓰면 유용하다. (undefine 후 vm 이름 변경 -> define)

7) 네트워크

⇒ default network (virbr0) dhcp 서버를 통해 vm에 할당된 NAT IP를 표시

8) storage pool

- Verify that the storage pool is defined:
# virsh pool-list
- Destroy the storage pool:
# virsh pool-destroy <pool_name>
- Undefine the configuration for the inactive storage pool:
# virsh pool-undefine <pool_nanme>
- Verify that the storage pool has been removed from the host:
# virsh pool-list

3.2 variant OS list

1) variant OS 리스트 출력

virt-install 명령의 --os-variant 옵션에 적용할 수 있는 OS List를 출력

⇒ 예전에는 아래와 같은 명령으로 OS 리스트가 출력되었던 것으로 보이나 에러가 남. osinfo-query os 명령을 사용할 것.

 

3.3. virt-viewer

⇒ virt-viewer를 통해 vm을 보기 위해서는 아래 조건이 충족되어야 함.
- VM의 모드가 Graphic 이어야 함
- KVM Host에 'X Window System'이 설치되어 있어야함
- 터미널 클라이언트를 통해 virt-viewer를 띄우는 경우 x11-forwarding이 구성되어 있어야 함.

 

4. Remote에서 X 띄우기

KVM Host의 Run Level 3 모드에서 VM을 CLI로 운영할 수 있다.

물론 Windows OS를 Guest VM으로 이용 시 CLI로는 한계가 있다.

그럴 때는 단순히  X Window System만 설치하고 GUI는 Remote에서 띄우는 방식으로도 가능하다.

4.1 X Window 설치

4.2 터미널 프로그램 설정

⇒ putty에 x11 forwading을 xming으로 설정 후 virt-manager X(GUI)를 띄움.
⇒ 또는 xshell, xmanager 조합으로 virt-manager X(GUI)를 띄움.

4.3 터미널 프로그램에서 GUI 실행

실행 후 터미널 프로그램을 통해 GUI 메뉴가 아래와 같이 뜬다.


 

필자는 서버를 최대한 가볍게 운영하는걸 선호한다.

그래서 RHEL(CentOS)를 minimal로 최소로 설치 후 필요시에만 패키지를 추가해서 설치한다.

Run Level 5(GUI 모드)로 돌리면 불필요한 로그들이 로깅되고, 보안 및 패치 검토 등, 운영에 부담이 되기 때문이다.

Using KVM with CLI Mode

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다