0. 들어가기 전에
시작하기 전에 항상 SElinux 확인 , NFS Mount 확인 , libvirtd Status 확인을 하자
iso 이미지 & 클라우드용 이미지 다운
wget http://mirror.kakao.com/centos/7.9.2009/isos/x86_64/CentOS-7-x86_64-Minimal-2009.iso
wget http://cloud.centos.org/centos/7/images/CentOS-7-x86_64-GenericCloud-2003.qcow2.xz
- 위 코드를 통해 iso 이미지 ( 상단 코드 ) 와 클라우드 용 이미지 ( 하단 코드 ) 를 다운 받자. KVM 에서는 /remote 디렉터리, 즉, storage 의 cloud 디렉터리에 다운 받자
Hyper Visor 의 Type
Migration
- xml 영역만 migrate 하는 것을 live migration 이라고 한다. 이는 공유 storage 에 disk 를 두고 사용할 때 가능하다
- disk 영역을 옮기는 것을 storage migration 이라고 한다. 만약, disk 를 local disk 로 사용했을 때, migration 한다면, 지연 시간 및 패키지 손실이 일어날 수 도 있다
VIRBR0 의 역활
- VIRBR0 는 NAT 를 해준다. 이를 통해, 다수의 가상 머신이 있을 때, 이 가상 머신들이 외부와 통신을 할때, VIRBR0 를 통해 NAT 되어 ETH 0 으로 가서 외부로 나간다
실습 전 환경 확인
- 시작할 때는 NFS 서버를 먼저 시작하고, 종료할 때는 NFS 서버를 마지막에 종료하자
- Mount 정보를 확인 하자
- 네트워크를 확인 하자
- Storage 의 경우 외부 연결이 필요 없다. 따라서, 특별한 경우가 아니라면 인터넷 연결용 인터페이스는 비활성화 시켜두어야 한다
1. VM / 인스턴스 생성 방법
-
- ISO 를 이용한 방법 : ISO 이미지는 설치 파일로 안에 파일과 디렉터리가 들어있다. 이 ISO 이미지를 디스크에 집어 넣어 부팅 시키면, 설치 마법사가 시작된다. 이렇게 설치가 끝나면, 디스크에 OS 가 설치된 상태가 된다. 허나, 이 상태로는 동작할 수 없기에, 여기에 컴퓨팅 자원이 정의된 XML 영역을 붙이면 하나의 가상 머신으로 동작할 수 있다
- 가상 머신의 디스크는 가상 머신이 보기에는 디스크지만, HOST 에서 보기에는 파일 이다. 이 파일 포멧에는 QCOW 2 , RAW , VMDK 등이 있다
- 볼륨을 재사용하여, 컴퓨팅 자원을 import 하여 제공하는 것이 인스턴스를 배포하는 것 이다. 이는 2번 방법을 봐보자
-
- qcow 2 파일을 이용한 배포 : OS 가 설치된 디스크 파일인 qcow 2 파일을 copy 하여, 사용자가 원하는 만큼의 컴퓨팅 자원에 따라 xml 파일을 붙여서 배포할 수 있다. 이는 위의 방법보다 빠르므로, 클라우드에서는 이 방법을 사용한다
- 허나, 이 방법은 디스크의 용량이 제한된다는 단점이 필요하다
-
- 디스크 확장을 이용한 배포 : 각 사용자 / VM / 인스턴스 별로 Key-Pair 를 만들어, 원하는 디스크 용량에 따라 확장이 가능하다. 이는 Virt-Builder 로 가능하다
2. ISO 이미지 를 이용한 인스턴스 생성
kvm 1
- 사용할 디스크를 미리 준비하고 설치할 것 이다
- 준비된 디스크와 컴퓨팅 자원을 이용하여 설치하기
- 이미지의 이름을 축소 시키자
- 디스크를 하나 생성했다
- 10G 라고 설정했지만, 현재 -l 로 확인하면, 실제 사용하는 용량 만큼만 나타낸다. 이는 10G 까지 사용할 수 있다
- 위와 같이 설치하자. 우리는 설치 과정을 vnc 를 통해 gui 환경에 연결하여 볼 수 있기에 이를 vmm 에 가서 확인해보자
- vnc port 는 5900 번 이므로, port 번호가 이와 겹치면 안된다. 따라서 kvm 1 에는 5901, kvm 2 에는 5902 번 port 를 사용하자
kvm 2
virt-install --name centos2 --vcpus 1 --ram 1024 --network network:default --disk /remote/centos2.qcow2,size=10 --graphics vnc,port=5902 --location=/remote/CentOS7-2009.iso --noautoconsole
- 위 코드를 사용하자
- 미리 준비한 디스크가 없으므로, 위와 같이 disk 이름 뒤에 ,size 를 통해 최대 용량을 정해준다. 단위는 GB 이다
- VMM 에 들어가서 더블 클릭해주자. 여기서 네트워크와 PASSWORD & USER 만 설정을 해주면 된다
- KVM 안의 VM 의 설치가 끝나면, 재부팅 해주자
3. 가상 머신 관리하기
- 하이퍼 바이저에서 가상 머신 리스트 확인
- 동작중인 가상 머신을 확인하자
- 네트워크 리스트도 확인하자
- kvm 데몬이 재 실행 되더라도 동시에 vm 도 재 실행 되도록 하고 싶으면, auto start 를 설정 하면 된다
- 위 와 같이 --name 을 통해 가상 머신의 이름만 출력이 가능 하다
- 가상 머신들에게 콘솔로 접속하고 싶다면, virsh console '가상 머신 이름 ' 으로 접속하면 된다. 이는 인스턴스 생성시 console line 을 생성하지 않는다면, 연결되지 않을 수 있다. 단, 클라우드용 이미지는 이미 콘솔 라인이 생성되어 있으므로 바로 연결된다. ctrl + ] 로 빠져나오자
4. 가상 머신들의 설정값 확인
1. virsh dumpxml ' 가상 머신 이름 '
- 설정된 가상 머신의 xml 파일을 cat 으로 열어보는 것과 동일하다
- source file 을 보면 centos1.qcow2 를 사용하겠다고 되어 있다. 이를 바꾸면 disk 위치를 바꿀 수 있다
- 인터페이스도 확인해보자
2. virsh edit ' 가상 머신 이름 '
- vi 편집기로 가상 머신의 xml 파일을 여는 것과 같이 편집 모드로 들어갈 수 있다
5. 네트워크의 설정값 확인 및 수정
1. virsh net-dumpxml default : xml 파일을 cat 으로 확인하는 것과 같으며, 편집은 불가능 하다
- 위의 nat 부분이 사라지면, host-only 와 같이 동작한다
- dhcp 를 통해 122 대역 ip 가 가상 머신들에게 할당 된다
- 위와 같은 구조이다
2. virsh net-edit default : vi 로 연결되어 스위치의 구성 내용을 변경할 수 있다
- 다음과 같이 dhcp 구성을 변경해보자
- 다음과 같이 xml 설정이 수정되었다고 나온다. 이는 바로 적용되는 것 이 아닌, 서비스를 재실행 해야 한다
- 수정 이후에는 네트워크와 kvm 을 재실행하자
systemctl restart libvirtd
virsh net-destroy default
virsh net-start default
virsh destroy centos1
virsh start centos1
6. 가상 머신의 Ip 주소 확인
virsh domifaddr '가상 머신 이름' 으로 가상 머신의 네트워크 정보를 확인하자
virsh domiflist '가상 머신 이름' : 가상 머신의 인터페이스 정보를 출력해준다. 이는 Ip 주소는 보여주지 않는다
7. 새로운 네트워크 만들기
- 기존 default 네트워크를 이용하여 생성하기
- 편집기로 들어가서 내용을 복사하자
- 새 xml 파일을 만들어서, 다음 내용을 입력해주자. 이는 사설 구간이므로 외부와 통신을 할 필요가 없으므로 uuid 와 nat 를 없애주고, 사설 ip 를 따로 설정하였다
- 위와 같은 구조가 만들 것 이다
- 아직까지는 이 xml 파일은 그냥 텍스트 파일이다. 이제 이 파일을 적용시켜야 한다
- net-define 을 통해 네트워크를 정의 시켜주자. 이제 새 네트워크가 생성되었다
- 삭제하고 싶다면 virsh net-undefine '네트워크 이름' 으로 삭제하면 된다
네트워크 상태를 확인하고, 설정하자
- 현재 private1 은 중지중이고, Autostart 가 아니다. 이를 실행시키고, kvm 이 실행될 때 자동으로 실행되게 Autostart 를 시켜줘야 한다
- 위와 같이 start 와 autostart 를 해주면 된다
8. 가상 머신에 네트워크 연결
- 스위치 이름은 virbr1 이며, 네트워크 이름은 private1 이다
- 생성한 virbr1 을 확인하자
- Ip 는 172.16.100.1 이며, 이 네트워크에 연결되는 가상 머신들은 172.16.100. 대역을 dhcp 를 통해 Ip 주소를 할당 받을 수 있다
- 위 코드를 통해 연결한다. 이는 centos1 에 network 타입의 private 1 네트워크에 연결할 예정이고, lan 카드 모델은 virtio 이다. live 를 통해 가상 머신이 동작중인 상태에서 연결할 것 이고, config 를 통해 재부팅이 되더라도 설정을 계속 유지시킨다
- kvm1 에서 virbr1 으로 통신이 잘 된다
9. 가상 머신 Migrate 해보자
- 여기서 allow unsafe 는 무슨 모드 일까? Migrate 를 하면, 암호화가 되어 터널을 통과하여 Migration 된다. 허나, 지금 환경에서는 safe 모드가 지원되지 않으므로 unsafe 모드로 해야 한다
- 허나, Migrate 가 오류가 난다. 이는 kvm2 에 해당 네트워크가 없기 때문이다
- 이렇게, VM 을 Migration 하면, xml 파일에 두 개의 interface 에 대한 정보가 담겨있다. 이 중에서, virbr1 네트워크가 kvm2 에 없기에 오류가 난다
- kvm 2 에서 다음과 같이 private1 네트워크를 활성화 해주자
- 이제 kvm 2 에도 private 1 네트워크가 생성됬으므로, kvm 2 에 centos 1 의 xml 파일을 보냈을 때, kvm 2 에서 xml 파일 안의 private 1 네트워크를 인식할 수 있고, 이를 제공해줄 수 있다. 따라서, migration 이 된다
만약 vnc 포트 오류가 난다면
- virsh destroy centos1 으로 centos1 의 네트워크를 중지
- virsh edit centos1 을 통해 vnc port 번호를 변경
- 이는 migrartion 했을때 centos1 과 centos2의 vnc port 번호가 동일해서 일어나는 문제다
vm ws 에서 nat 네트워크는 하나밖에 사용 못 한다. 허나, 위와 같은 네트워크를 생성하여, 여러개의 nat 네트워크를 만들어 각각 설정해줄 수 있다
클러스터를 형성하면, 다수의 서버가 자원을 공유할 수 있다. 이 클러스터와 overlay 를 구축한 환경에서는 모든 서버에 동일한 네트워크 정보가 존재하므로, vm 이 자유롭게 migration 을 할 수 있으며, 물리적으로 떨어져있는 서버의 vm 끼리 통신이 가능해진다
10. 연결된 인터페이스를 동작중인 상태에서 제거하기
- 위와 같이 xml 파일을 보면, 두 가지 인터페이스가 정의 되어 있다
virsh detach-interface --domain centos1 --type network --mac 'mac 주소' --config
- 먼저, private 1 에 대한 MAC 주소를 확인하자
- 위 코드를 통해 detach 시키자. config 는 재부팅 이후에도 이 설정이 유지되게 하는 옵션이다
- 가상 머신을 껏다 키면 인터페이스가 detach 된 것을 확인할 수 있다