0부터 시작하는 KVM 공부 - KVM 에서 가상 머신 / 인스턴스 생성하기

Jaehong Lee·2022년 8월 11일
0
post-thumbnail

1. Iso 파일을 이용한 설치하는 방법

  • 볼륨 ( 저장 공간 ) 을 먼저 생성해 두고, 이 볼륨에 Iso 파일을 이용하여 설치를 진행

    --disk 를 통해 볼륨을 지정, --location 을 통해 Iso 파일을 지정하며, 부팅시 설치 마법사가 시작되어 직접 세세히 설정 해야 한다

    • 따라서, 이 방법은 동시에 다수의 가상 머신을 생성 해야 한고, 즉시 제공해야 하는 클라우드 환경에는 적합하지 않다
    • 시간이 너무 오래 걸리고, 설치에 익숙하지 않은 사용자에게는 어려움이 있다

2. 클라우드 이미지를 이용하는 방법

  • 클라우드 이미지란 OS 가 설치되어 있는 볼륨을 이미지화 한 것

    • 이 이미지를 통해 인스턴스를 배포할 수 있다. 즉, 이 이미지를 복사하여 여러 인스턴스를 배포할 수 있다
    • 단, 1번 방법으로 생성한 볼륨을 이용하여 다른 인스턴스를 생성하게 되면, 동일한 root password 를 사용하므로 보안상 문제가 발생할 수 있다
  • 따라서, 클라우드 이미지에는 root password 등이 미리 지정되어 있어서는 안된다

    • 필요할 때 root password 를 설정해서 사용하는 방법 -> virt-customize 를 통해 이미지에 필요할 때 root password 를 설정할 수 있지만, virt-customize 는 볼륨 사이즈 조정이 불가능 하다
  • 클라우드 이미지의 볼륨 크기를 조정하는 것은 virt-resize 를 통해 할 수 있다

3. virt-builder

  • virt-builder 를 이용하면, 기본 이미지에 대한 편집과 볼륨 조정이 가능하다

    Step 1. 클라우드 상에 있는 기본 템플릿 이미지를 다운로드 ( ex. centos-7.0.xz )
    Step 2. 압축된 파일을 압축 해제 한다
    Step 3. virt-resize 를 이용하여 볼륨의 크기를 확장 한다
    Step 4. Disk open 하여 볼륨 수정 가능 상태로 만들어, 패키지 설치 / 특정 파일 업로드 / 인스턴스로 부팅시 실행할 명령 등을 수행한다
    Step 5. 최종적으로 수정된 볼륨이 생성된다

4. virt-install

  • virt-install 을 통해 XML 영역을 정의하여 XML 을 생성한다

  • 이때, 앞서 virt-builder 을 통해 만든 볼륨의 위치를 지정해 주어야 한다

5. 볼륨 생성 및 인스턴스 배포하기

  • virt-install 시 ovs 에 배치되고, model 은 virtio 로 하면, 인스턴스의 인터페이스 이름이 eth0 이 된다. ifcfg-eth0 파일을 미리 만들어 두고, 이 안에 211.183.3.222 를 기록해 둔뒤 이를 인스턴스에 Upload 한다

  • 또한, 로컬에 있는 Public Key 를 인스턴스의 /root/.ssh/authorized_keys 에 붙여 넣는다

https://velog.io/@lijahong/0%EB%B6%80%ED%84%B0-%EC%8B%9C%EC%9E%91%ED%95%98%EB%8A%94-KVM-%EA%B3%B5%EB%B6%80-Virt-customize-Virt-builder-%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EC%9D%B8%EC%8A%A4%ED%84%B4%EC%8A%A4-%EB%B0%B0%ED%8F%AC%ED%95%98%EA%B8%B0#5-quiz---%EB%B3%BC%EB%A5%A8%EC%97%90-ip-%EC%A7%80%EC%A0%95%EA%B3%BC-ssh-%EC%97%B0%EA%B2%B0-%EC%84%A4%EC%A0%95

  • 위 글의 5 번 을 참조하여 생성하자
  • 혹은 eth0 파일을 Host 에서 미리 생성 하여 아래 코드를 통해 스크립트가 아닌, builder 옵션만으로 생성하는 것 도 가능하다
virt-builder centos-7.0 --format qcow2 --size 20G -o /remote/centos001.qcow2 --upload ifcfg-eth0:/etc/sysconfig/network-scripts/ifcfg-eth0 --run-command 'ssh-keygen -q -f /root/.ssh/id_rsa -N ""' --upload /root/.ssh/authorized_keys:/root/.ssh/authorized_keys --firstboot-command 'ifdown eth0 ; ifup eth0' --selinux-relabel
  • 여기서 ssh keygen 은 ssh 로그인에는 사용하지 않고, .ssh 디렉터리 생성을 위해 사용하는 것 이다. 로그인을 위한 key 는 Host 에서 생성한 Key pair 를 사용하므로, 따로 authorized_keys 를 upload 해주는 것 이다

  • 인스턴스 배포는 아래의 코드를 사용한다

virt-install --name centos001 --vcpus 1 --ram 1024 --network bridge:vswitch01,model=virtio,virtualport_type=openvswitch --disk /remote/centos001.qcow2 --import --graphics vnc --noautoconsole

6. 사용자가 원하는 Key 를 생성하여 인스턴스 배포하기

  • 현재는 미리 생성해 둔 키를 이용하여 접속하고 있다. 간단한 스크립트를 작성하여, 사용자로 부터 키 이름을 요구 받고, 요구 받은 키의 이름을 이용하여, Key Pair 를 생성하여 인스턴스에 추가해라. 나머지 사항은 위의 인스턴스 생성시 사용한 옵션과 동일하게 한다

  • 사용자는 Private Key 를 이용하여 SSH 접속을 한다

Script Code 는 아래와 같다

#key pair 이름 입력받기
read -p " pls write a key name " keyname
ssh-keygen -q -f ~/.ssh/${keyname}.pem -N ""

#생성한 public key move
cat /root/.ssh/${keyname}.pem.pub >> /root/.ssh/authorized_keys
chmod 600 /root/.ssh/${keyname}.pem

#볼륨 수정
virt-builder centos-7.0 --size 20G --format qcow2 -o /remote/test3.qcow2 --install httpd,net-tools --mkdir /root/.ssh --upload /root/index.html:/var/www/html/index.html --upload /root/.ssh/authorized_keys:/root/.ssh/authorized_keys --run /root/createinstance.sh --selinux-relabel

#인스턴스 배포
virt-install --name test3 --vcpus 1 --ram 1024 --network bridge:vswitch01,model=virtio,virtualport_type=openvswitch --disk /remote/test3.qcow2 --import --graphics none --noautoconsole

  • 스크립트 파일을 생성해서 위의 Script Code 를 입력하자
  • 파일에 실행 권한을 부여하자
  • 스크립트 명령이 잘 실행된다
  • ssh 명령을 통해 접속하자
  • ssh 접속이 잘 된다. Ip 역시 잘 설정되었다

볼륨 수정 시 run 옵션으로 실행하는 createinstance.sh Code 는 아래와 같다

#!/bin/bash

systemctl enable httpd
systemctl disable firewalld

cat <<EOF > /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE=Ethernet
BOOTPROTO=none
NAME="eth0"
DEVICE="eth0"
ONBOOT=yes
IPADDR=211.183.3.222
PREFIX=24
GATEWAY=211.183.3.2
DNS=8.8.8.8
EOF

ifdown eth0
ifup eth0

sed -i 's/#PubkeyAuthentication yes/PubkeyAuthentication yes/g' /etc/ssh/sshd_config
sed -i 's/PasswordAuthentication yes/PasswordAuthentication no/g' /etc/ssh/sshd_config

chmod 700 /root/.ssh
profile
멋진 엔지니어가 될 때까지

0개의 댓글