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 의 역활
![](https://velog.velcdn.com/images/lijahong/post/61b518e0-c3f6-43f7-b9c9-3392559199fa/image.png)
- VIRBR0 는 NAT 를 해준다. 이를 통해, 다수의 가상 머신이 있을 때, 이 가상 머신들이 외부와 통신을 할때, VIRBR0 를 통해 NAT 되어 ETH 0 으로 가서 외부로 나간다
실습 전 환경 확인
- 시작할 때는 NFS 서버를 먼저 시작하고, 종료할 때는 NFS 서버를 마지막에 종료하자
![](https://velog.velcdn.com/images/lijahong/post/efa1f5fc-192a-484a-823e-2ede17291ffd/image.png)
- Mount 정보를 확인 하자
![](https://velog.velcdn.com/images/lijahong/post/2dfcb097-366d-4ca2-b3b6-f56dfdc624cf/image.png)
- 네트워크를 확인 하자
- 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
- 사용할 디스크를 미리 준비하고 설치할 것 이다
- 준비된 디스크와 컴퓨팅 자원을 이용하여 설치하기
![](https://velog.velcdn.com/images/lijahong/post/e1121014-2ebe-46f9-8525-aeb88acef2e7/image.png)
- 이미지의 이름을 축소 시키자
![](https://velog.velcdn.com/images/lijahong/post/6ad99abf-8e28-4412-87f9-65758a4f5527/image.png)
- 디스크를 하나 생성했다
![](https://velog.velcdn.com/images/lijahong/post/02560024-ec1f-45f4-a9e1-2b013856ca65/image.png)
- 10G 라고 설정했지만, 현재 -l 로 확인하면, 실제 사용하는 용량 만큼만 나타낸다. 이는 10G 까지 사용할 수 있다
![](https://velog.velcdn.com/images/lijahong/post/1e2eebf7-b87a-4846-9f89-32abdcf9946e/image.png)
- 위와 같이 설치하자. 우리는 설치 과정을 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
- 위 코드를 사용하자
![](https://velog.velcdn.com/images/lijahong/post/295d4b85-49f3-4f9e-bed8-de8dc8fdc392/image.png)
- 미리 준비한 디스크가 없으므로, 위와 같이 disk 이름 뒤에 ,size 를 통해 최대 용량을 정해준다. 단위는 GB 이다
![](https://velog.velcdn.com/images/lijahong/post/d060fc7d-85a7-4f39-89fd-3be83b079528/image.png)
- VMM 에 들어가서 더블 클릭해주자. 여기서 네트워크와 PASSWORD & USER 만 설정을 해주면 된다
- KVM 안의 VM 의 설치가 끝나면, 재부팅 해주자
3. 가상 머신 관리하기
- 하이퍼 바이저에서 가상 머신 리스트 확인
![](https://velog.velcdn.com/images/lijahong/post/1fa0fc9b-955e-4543-ab8d-133441c685fe/image.png)
- 동작중인 가상 머신을 확인하자
![](https://velog.velcdn.com/images/lijahong/post/478f2a97-f458-4fc2-a298-031abf2063ac/image.png)
- 네트워크 리스트도 확인하자
![](https://velog.velcdn.com/images/lijahong/post/6cb26e8b-488d-48d1-a3cb-94b47c5c39e6/image.png)
- kvm 데몬이 재 실행 되더라도 동시에 vm 도 재 실행 되도록 하고 싶으면, auto start 를 설정 하면 된다
![](https://velog.velcdn.com/images/lijahong/post/e03bdd48-705d-497a-b691-0c3e8584c8e4/image.png)
- 위 와 같이 --name 을 통해 가상 머신의 이름만 출력이 가능 하다
![](https://velog.velcdn.com/images/lijahong/post/5883086b-a562-4c6a-a399-1b8e0bc0bb64/image.png)
- 가상 머신들에게 콘솔로 접속하고 싶다면, virsh console '가상 머신 이름 ' 으로 접속하면 된다. 이는 인스턴스 생성시 console line 을 생성하지 않는다면, 연결되지 않을 수 있다. 단, 클라우드용 이미지는 이미 콘솔 라인이 생성되어 있으므로 바로 연결된다. ctrl + ] 로 빠져나오자
4. 가상 머신들의 설정값 확인
1. virsh dumpxml ' 가상 머신 이름 '
![](https://velog.velcdn.com/images/lijahong/post/ad354068-fa31-4104-9085-f662a27429c8/image.png)
- 설정된 가상 머신의 xml 파일을 cat 으로 열어보는 것과 동일하다
![](https://velog.velcdn.com/images/lijahong/post/fde40496-8c68-412d-b5d6-ce89fa2f2a55/image.png)
- source file 을 보면 centos1.qcow2 를 사용하겠다고 되어 있다. 이를 바꾸면 disk 위치를 바꿀 수 있다
![](https://velog.velcdn.com/images/lijahong/post/c9f87a9b-b093-4b8a-8937-c47e913485ad/image.png)
- 인터페이스도 확인해보자
2. virsh edit ' 가상 머신 이름 '
![](https://velog.velcdn.com/images/lijahong/post/2d6f2264-3608-4aa3-9fa1-7f6984a8228f/image.png)
- vi 편집기로 가상 머신의 xml 파일을 여는 것과 같이 편집 모드로 들어갈 수 있다
5. 네트워크의 설정값 확인 및 수정
1. virsh net-dumpxml default : xml 파일을 cat 으로 확인하는 것과 같으며, 편집은 불가능 하다
![](https://velog.velcdn.com/images/lijahong/post/302a5f25-421f-40ca-8310-aba525a8b685/image.png)
- 위의 nat 부분이 사라지면, host-only 와 같이 동작한다
- dhcp 를 통해 122 대역 ip 가 가상 머신들에게 할당 된다
![](https://velog.velcdn.com/images/lijahong/post/3265a8a3-08c9-45cc-bed4-3d387a347740/image.png)
- 위와 같은 구조이다
2. virsh net-edit default : vi 로 연결되어 스위치의 구성 내용을 변경할 수 있다
![](https://velog.velcdn.com/images/lijahong/post/ecd2e658-8470-4638-9ee0-bbb6610a04be/image.png)
- 다음과 같이 dhcp 구성을 변경해보자
![](https://velog.velcdn.com/images/lijahong/post/70301bad-ed79-46be-b62e-72a15985100a/image.png)
- 다음과 같이 xml 설정이 수정되었다고 나온다. 이는 바로 적용되는 것 이 아닌, 서비스를 재실행 해야 한다
![](https://velog.velcdn.com/images/lijahong/post/84d855d7-ed5b-4dc7-abbb-6546c4fa7021/image.png)
- 수정 이후에는 네트워크와 kvm 을 재실행하자
![](https://velog.velcdn.com/images/lijahong/post/b416b8de-56fc-43b5-8eb5-652bb73b8bda/image.png)
systemctl restart libvirtd
virsh net-destroy default
virsh net-start default
virsh destroy centos1
virsh start centos1
6. 가상 머신의 Ip 주소 확인
virsh domifaddr '가상 머신 이름' 으로 가상 머신의 네트워크 정보를 확인하자
![](https://velog.velcdn.com/images/lijahong/post/fb847241-ad88-4af9-856d-7a40d85d3902/image.png)
virsh domiflist '가상 머신 이름' : 가상 머신의 인터페이스 정보를 출력해준다. 이는 Ip 주소는 보여주지 않는다
![](https://velog.velcdn.com/images/lijahong/post/9c3d481b-a51c-4f8d-9e51-060656b91998/image.png)
7. 새로운 네트워크 만들기
- 기존 default 네트워크를 이용하여 생성하기
![](https://velog.velcdn.com/images/lijahong/post/bd72e858-f5f2-4425-b490-781c6f54323f/image.png)
- 편집기로 들어가서 내용을 복사하자
![](https://velog.velcdn.com/images/lijahong/post/ce254d42-e127-4fec-ab94-cc2936ba8872/image.png)
- 새 xml 파일을 만들어서, 다음 내용을 입력해주자. 이는 사설 구간이므로 외부와 통신을 할 필요가 없으므로 uuid 와 nat 를 없애주고, 사설 ip 를 따로 설정하였다
![](https://velog.velcdn.com/images/lijahong/post/7651921c-4450-4734-986f-6d611b4ffed5/image.png)
- 위와 같은 구조가 만들 것 이다
- 아직까지는 이 xml 파일은 그냥 텍스트 파일이다. 이제 이 파일을 적용시켜야 한다
![](https://velog.velcdn.com/images/lijahong/post/a1a63b61-d2ae-4b3b-957a-7dbda06bebaf/image.png)
- net-define 을 통해 네트워크를 정의 시켜주자. 이제 새 네트워크가 생성되었다
- 삭제하고 싶다면 virsh net-undefine '네트워크 이름' 으로 삭제하면 된다
네트워크 상태를 확인하고, 설정하자
![](https://velog.velcdn.com/images/lijahong/post/917078c4-6a65-4ad5-a7dd-01065bffbe4e/image.png)
- 현재 private1 은 중지중이고, Autostart 가 아니다. 이를 실행시키고, kvm 이 실행될 때 자동으로 실행되게 Autostart 를 시켜줘야 한다
![](https://velog.velcdn.com/images/lijahong/post/b98bb735-61a2-4951-9597-349bb9971136/image.png)
- 위와 같이 start 와 autostart 를 해주면 된다
8. 가상 머신에 네트워크 연결
- 스위치 이름은 virbr1 이며, 네트워크 이름은 private1 이다
![](https://velog.velcdn.com/images/lijahong/post/1e99ca3b-e858-446e-8cb6-1c3221b69152/image.png)
- 생성한 virbr1 을 확인하자
- Ip 는 172.16.100.1 이며, 이 네트워크에 연결되는 가상 머신들은 172.16.100. 대역을 dhcp 를 통해 Ip 주소를 할당 받을 수 있다
![](https://velog.velcdn.com/images/lijahong/post/77a0f79e-eaef-4ab2-a213-32a6971c6ac0/image.png)
- 위 코드를 통해 연결한다. 이는 centos1 에 network 타입의 private 1 네트워크에 연결할 예정이고, lan 카드 모델은 virtio 이다. live 를 통해 가상 머신이 동작중인 상태에서 연결할 것 이고, config 를 통해 재부팅이 되더라도 설정을 계속 유지시킨다
![](https://velog.velcdn.com/images/lijahong/post/bfa073f6-2b10-43cb-b75d-d3801e56f1fc/image.png)
- kvm1 에서 virbr1 으로 통신이 잘 된다
9. 가상 머신 Migrate 해보자
![](https://velog.velcdn.com/images/lijahong/post/41ff5923-c876-4858-9405-23c86e8633a9/image.png)
- 여기서 allow unsafe 는 무슨 모드 일까? Migrate 를 하면, 암호화가 되어 터널을 통과하여 Migration 된다. 허나, 지금 환경에서는 safe 모드가 지원되지 않으므로 unsafe 모드로 해야 한다
![](https://velog.velcdn.com/images/lijahong/post/ef310052-b90c-45b7-aa82-20e495bf53b0/image.png)
- 허나, Migrate 가 오류가 난다. 이는 kvm2 에 해당 네트워크가 없기 때문이다
![](https://velog.velcdn.com/images/lijahong/post/73c537e3-728a-4332-bb92-c4fb684b7958/image.png)
- 이렇게, VM 을 Migration 하면, xml 파일에 두 개의 interface 에 대한 정보가 담겨있다. 이 중에서, virbr1 네트워크가 kvm2 에 없기에 오류가 난다
![](https://velog.velcdn.com/images/lijahong/post/239b752d-e3f0-4238-b7e4-6fb8bb31dfca/image.png)
- kvm 2 에서 다음과 같이 private1 네트워크를 활성화 해주자
![](https://velog.velcdn.com/images/lijahong/post/53d73716-8c55-4bd5-8927-e7dbff912e3d/image.png)
- 이제 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 끼리 통신이 가능해진다
![](https://velog.velcdn.com/images/lijahong/post/d0b032c0-80d0-4ac5-a026-b5e95fbd555a/image.png)
10. 연결된 인터페이스를 동작중인 상태에서 제거하기
![](https://velog.velcdn.com/images/lijahong/post/e6774ce4-5b0a-48b9-82bd-6427579cf6c9/image.png)
- 위와 같이 xml 파일을 보면, 두 가지 인터페이스가 정의 되어 있다
virsh detach-interface --domain centos1 --type network --mac 'mac 주소' --config
![](https://velog.velcdn.com/images/lijahong/post/09c734fc-797c-42cb-91f1-9c12eae7fe54/image.png)
- 먼저, private 1 에 대한 MAC 주소를 확인하자
![](https://velog.velcdn.com/images/lijahong/post/23293b61-0f92-4e4e-9bc7-e5edbc00e41b/image.png)
- 위 코드를 통해 detach 시키자. config 는 재부팅 이후에도 이 설정이 유지되게 하는 옵션이다
![](https://velog.velcdn.com/images/lijahong/post/1971acc0-ecb4-4a91-9aa1-b9223f730b4b/image.png)
- 가상 머신을 껏다 키면 인터페이스가 detach 된 것을 확인할 수 있다