KVM에 대하여2

양승현·2022년 8월 2일
0

linux

목록 보기
15/20

모니터링 시스템 - Zabbix, cacti, nagios


[centos 이미지] 설치

[인스턴스 만들기]

KVM1

mv /remote/CentOS-7-x86_64-Minimal-2009.iso /remote/CentOS7-2009.iso
  • 1. 사용할 디스크(qcow2) 를 미리 준비하기
[root@kvm1 remote]# qemu-img create -f qcow2 /remote/centos1.qcow2 10G
  • 2. 준비된 디스크와 컴퓨팅 자원을 이용하여 설치하기
virt-install --name centos1 --vcpus 1 --ram 1024 --network network:default --disk /remote/centos1.qcow2 --graphics vnc,port=5901 --location=/remote/CentOS7-2009.iso --noautoconsole

KVM2
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

[관리]

1. 하이퍼바이저에서 가상머신들의 리스트 확인

virsh list  --all

2. 네트워크 리스트 확인

virsh net-list --all

3. kvm 데몬이 재 실행되더라도 동시에 vm 도 재실행이 되도록 하고 싶다면?

virsh autostart [도메인이름] 예)private1

4. 가상머신들의 이름만 확인하고 싶다면?

virsh list --all --name 

5. 가상머신들에게 콘솔로 접속하고 싶다면?

virsh console centos1 
  • 인스턴스 생성시 console line 을 생성하지 않는다면 연결되지 않을 수 있다. 단, 클라우드용 이미지는 이미 콘솔라인이 생성되어 있으므로 바로 연결된다.

6. 가상머신들의 설정 값 확인

   6.1 : virsh dumpxml centos1 -> 설정된 가상머신의 xml 파일을 cat 으로 열어보는것과 동일한 효과

   6.2 : virsh edit centos1 -> vi  centos1.xml 과 같이 편집 모드로 들어갈 수 있다.

7. 네트워크의 설정값 확인 및 수정

   7.1 virsh net-dumpxml default   -> xml 파일을 cat 으로 보는 것과 같은 효과, 수정 불가
   7.2 virsh net-edit default -> vi 로 연결되어 스위치의 구성 내용을 변경할 수 있다

수정이후에는

        systemctl restart libvirtd    # kvm 데몬 재실행
        virsh net-destroy default   # default 네트워크 중지
        virsh net-start default       # default 네트워크 실행
        virsh destroy centos1        # 가상머신 종료
        virsh start centos1            # 가상머신 시작 

8. 가상 머신의 IP 주소 확인

virsh domifaddr centos1

virsh domiflist centos1

9. 새로운 네트워크 만들기

기존 default 네트워크를 이용하여 생성하기

touch private1.xml
<network>
  <name>private1</name>
  <bridge name='virbr1' stp='on' delay='0'/>
  <ip address='172.16.100.1' netmask='255.255.255.0'>
    <dhcp>
      <range start='172.16.100.201' end='172.16.100.239'/>
    </dhcp>
  </ip>
</network>
  • 종료하고 싶다면
virsh net-define private1.xml  
  • 삭제하고 싶다면
virsh net-undefine private1.xml
[root@kvm1 ~]# virsh net-list --all
 Name                 State      Autostart     Persistent

----------------------------------------------------------
 default              active     yes           yes
 private1             inactive   no            yes
  • 현재 private1 은 중지중/autostart 는 아니다
[root@kvm1 ~]# virsh net-start private1
Network private1 started

[root@kvm1 ~]# virsh net-autostart private1
Network private1 marked as autostarted

[root@kvm1 ~]# virsh net-list --all
 Name                 State      Autostart     Persistent

----------------------------------------------------------
 default              active     yes           yes
 private1             active     yes           yes   <--- 변경됨!!!

10. 생성된 별도의 네트워크에 가상머신 연결하기

네트워크 이름 : private1 (스위치의 이름 : virbr1 - 172.16.100.1)
private1 에 연결되는 가상머신들은 172.16.100.201 ~ 172.16.100.239 사이에서 IP 주소를 DHCP 를 통해 할당 받을 수 있다.

[root@kvm1 ~]# virsh attach-interface --domain centos1 --type network --source private1 --model virtio --live --config

centos1 에게 network 타입의 private1 네트워크로 연결할 예정이고 랜카드 모델은 virtio 이다. --live 를 통해 가상머신이 동작중인 상태에서 연결할 것이고 --config 재부팅되더라도 설정은 계속 유지하겠다


[실습]

kvm1의 centos1을 kmv2의 centos2에 migrate 해보자
[root@kvm1 ~]# cp private1.xml /remote/

[root@kvm2 remote]# virsh net-define private1.xml
Network private1 defined from private1.xml

[root@kvm2 remote]# virsh net-start private1
Network private1 started

[root@kvm2 remote]# virsh net-autostart private1
Network private1 marked as autostarted

[root@kvm2 remote]# virsh net-list --a
--all        --autostart
[root@kvm2 remote]# virsh net-list --all
 Name                 State      Autostart     Persistent

----------------------------------------------------------
 default              active     yes           yes
 private1             active     yes           yes
  • 만약 vnc 포트 오류가 난다면 virsh net-destroy centos1 으로 centos1 의 네트워크를 중지시키고, virsh edit centos1 을 통해 vnc port 번호를 변경한다. 이는 migrartion 했을때 centos1 과 centos2의 vnc port 번호가 동일해서 일어나는 문제이다.
centos1(5900)------------- host:5901
centos2(5900)------------- host:5901

[결과]


11. 연결된 인터페이스 동작중인 상태에서 제거하기 (private1로부터 제거)

[root@kvm2 remote]# virsh domifaddr centos1 
[root@kvm2 remote]# virsh detach-interface --domain centos1 --type network --mac [주소] --config
[root@kvm2 remote]# virsh destroy centos1
Domain centos1 destroyed

[root@kvm2 remote]# virsh start centos1
Domain centos1 started

[root@kvm2 remote]# virsh domifaddr centos1

12. 동작중인 가상머신에 추가 디스크가 필요하다면?

[root@kvm2 ~]# virsh pool-list --all
 Name                 State      Autostart
-------------------------------------------
 default              active     yes
 remote               active     yes
  • 저장 공간 리스트를 확인하자
[root@kvm2 ~]# virsh vol-create-as remote testvol1 1G
Vol testvol1 created
  • remote 저장소에 1 GB 짜리 testvol1 이름의 볼륨을 생성
[root@kvm2 ~]# virsh vol-list remote | grep testvol1
 testvol1             /remote/testvol1
  • remote 저장 공간 안에 있는 testvol1 확인
[root@kvm2 ~]# virsh attach-disk centos2 /remote/testvol1 --target sdb --persistent --live
Disk attached successfully
  • remote 디렉토리아래에 있는 1GB voltest1 을 centos2 의 sdb에 영구적으로 연결하되, 동작중인 현재 상태에서 바로 붙이겠다

ls /dev/sd*   

-> sdb 가 추가된 것을 확인할 수 있다.

fdisk /dev/sdb
  • 파티셔닝 시작
    n <--- 새로운 파티션 만들겠다.
    나머지는 모두그냥 엔터!!!
mkfs.ext4 /dev/sdb1
  • 포맷
mkdir /test
mount /dev/sdb1 /test
touch /test/from_centos2.txt 
  • 동작중인 상태에서 연결된 디스크를 제거해 본다.
virsh detach-disk centos2 sdb

[실습]

  • 이제 제거된 testvol1 을 centos1 에 연결하고 아무 디렉토리나 만든다음 둘을 마운트 해본다.
    정상적인 상태라면 centos2 에서 만든 파일이 보여야 한다
[root@kvm2 ~]# virsh attach-disk centos1 /remote/testvol1 --target sdb --persistent --live
mkdir /mytest
mount /dev/sdb1 /mytest

  • 참고
    도커 컨테이너와 같은 경우에는 휘발성이므로 자료가 영구보관되지 않는다. 이 경우 외부에 있는 스토리지를 활용하여 persistent volume(block storage) 을 구성하면 자료를 영구적으로 보관할 수 있게 된다.

13. 인스턴스 삭제하기

  • 네트워크 종료
virsh net-destroy default
  • 네트워크 삭제
virsh net-undefine private1)
  • 종료(destroy)->삭제(undefine)
virsh destroy centos1 ; virsh undefine centos1 --remove-all-storage

[브리지 네트워크 이용하기]

  • 기존 KVM에서 활동중인 eth0은 routed prot(L3 prot = IP 입력가능)이다.
  • IP가 입력되는 포트는 별도의 네트워크가 구성된다. = 네트워크를 구분하게 된다.
  • 현재 실습에서 가상머신은 외부와 직접 통신하지 않으므로 공인 주소를 할당 받을수 없다.
  • 기존 eth0를 routed port에서 ethrnet port(L2)로 변경하면 eth0는 스위치를 하나의 포트로 동작하게 된다.

[실습]

[root@kvm1 ~]# cd /etc/sysconfig/network-scripts/
[root@kvm1 network-scripts]# ls ifcfg-eth*
ifcfg-eth0  ifcfg-eth1  ifcfg-eth2  <--- eth0 이 인터넷 연결용 인터페이스
[root@kvm1 network-scripts]# cp ifcfg-eth0 ifcfg-br0
[root@kvm1 network-scripts]# vi ifcfg-br0

[root@kvm1 network-scripts]# vi ifcfg-eth0
BRIDGE=br0      #어떤 스위치에 포함될 것인가를 지정

[root@kvm1 network-scripts]# systemctl restart network
[root@kvm1 network-scripts]# brctl show
  • 리눅스에서 제공하는 오픈소스 스위치인 linux bridge 의 정보를 확인할 수 있다.

[브리지 네트워크에 신규 VM 연결하기]

[root@kvm1 network-scripts]# virt-install --name centos11 --vcpus 1 --ram 1024 --disk /remote/centos11.qcow2  --import --network bridge:br0 --graphics vnc --noautoconsole

  • 공인 Ip 로 들어온 것 을 확인

웹 서버를 실행하고 윈도우10에서 접속 가능여부확인해보기

systemctl start httpd
systemctl stop firewalld
systemctl restart httpd

http://211.183.3.131/ 접속

[kvm2]

[root@kvm2 network-scripts]# virsh list --all
 Id    Name                           State

----------------------------------------------------
 7     centos11                       running
 -     centos1                        shut off
[root@kvm2 network-scripts]# cd
[root@kvm2 ~]# virsh migrate --live centos11 qemu+ssh://kvm1/system --verbose --persistent --unsafe
root@kvm1's password:
Migration: [100 %]

[quiz]

우리는 현재 별도의 컨트롤 노드는 없다.
이를 대신하여 172.16.1.101을 컨트롤 노드로 활용할 계획이다.
컨트롤 노드에서 관리할 컴퓨터 노드의 주소는 172.16.1.101, 172.16.1.102 두 대이다.

ssh root@kvm1 virsh list --all
ssh root@kvm2 virsh list --all

단, 패스워드는 묻지 말아야 한다.

kvm1에서 /etc/ssh/ssh_config 파일에는 root로 모든 호스트에 접속할 때에는 갱ㄴ키를 이용하도록 해야한다.
각 서버에서 /etc/ssh/sshd_config에서는 public key를 이용하여 인증하도록 설정해야 한다.


[답안]

ssh 서비스를 client(/etc/ssh/ssh_config) server(/etc/ssh/sshd_config)
보안상 password login 은 추천하지 않는다.!!

 43 PubkeyAuthentication yes
 65 PasswordAuthentication no

kvm1

ssh-keygen -q -f ~/.ssh/id_rsa -N ""
  • ~/.ssh/ 에 id_rsa(개인키) 파일과 id_rsa.pub(공개키) 파일이 만들어진다
  • 공개키는 접속하고자 하는 서버의 ~/.ssh/authorized_keys 에 넣어둔다.
  • /etc/ssh/ssh_config 파일에 아래와 같은 내용을 추가하여 해당 호스트로 접속할 때에는 기본적으로 .ssh/id_rsa 를 이용하여 접속하도록 설정해둔다.
Host  kvm1
        User root
        IdentityFile /root/.ssh/id_rsa

Host  kvm2
        User root
        IdentityFile /root/.ssh/id_rsa
  • 변경된 사항은 서버에 활성화 되어야 하므로 각 서버에서 systemctl restart sshd 를 하여 갱신한다.
    [결과확인]
  • 만약 다음과 같은 오류가 발생한다면 아래 명령어를 통해 해결한다.
ssh-keygen -R [ IP or DomainName]


저장 공간 사용 방식

  • 저장 공간을 사용하기 위해서는 로컬과 리모트 두가지 방식이 있다.

1.로컬 디스크

  • /dev/sda

2.Remote Disk

1. NFS

/remote   <----mount----  /cloud
  • File Storage 방식

2. ISCSI

/dev/sda <------ISCSI----- volume
  • Block Storage 방식
    NFS 보다 사용률이 더 높음

0개의 댓글