KVM에 대하여4

양승현·2022년 8월 11일

kvm

목록 보기
2/4

클라우드 컴퓨팅 의 시작

  • 자원 재판매
  • 최초의 컴퓨터(PC) -> inter communication -> 네트워크 -> 서버/클라이언트
-> 인터넷(공중망)의 도래 -> 서버를 인터넷에 공개하기 위해서는? (안정적인 전원공급, 공간, 관리인원, 공인주소) -> 회사내에서 서버를 안정적으로 운영하는것이 어려워지면서 서버를 DC 에 보관(관리를 위임) -> DC 서버 입장 -> unix 계열에서만 제공되던 가상화기술이 범용 CPU 에서도 가상화(x86)가 지원되기 시작했다. -> 공간활용, 전원 -> 미리 자원을 준비해 둔다
  • 자원을 외부에 재판매하는데 어떤것을 재판매하느냐?(NIST 에서 정의)
  IaaS(Infrastructure as a Service) : server(컴퓨터), 방화벽, 스위치, 라우터...
  PaaS(Platform as a Service) : 개발환경을 제공
  SaaS(Software as a Service) : photoshop
  • 클라우드는 무조건 가상화? 가상화와 함께 구성해야 효과적이다.
    애플리케이션의 24 시간 온라인유지 가능
    동작중인상태에서 서버의 지역간 이동이 가능하다.
    on-demand 서비스 즉, 사용자가 요청하는 즉시(최단 시간내에) 서비스 제공
  • 가상화를 하는 도구??? -> 하이퍼바이저
    하이퍼바이저는 물리자원에 접근하여 CPU, RAM, NIC 등을 추상화하고 이를 결합하여 온전한 형태의 서버가 되도록 가상화를 제공한다.
type1 : 하이퍼바이저가 물리자원 바로 위에 배치된다.(bare metal hypervisor)
           KVM, VMware ESXi, XenServer, Hyper-V
type2 : 하이퍼바이저가 호스트OS 위에 배치된다. (host based hypervisor)
           VMware workstation, virtualbox, virtualpc 
  • 클라우드 환경을 구축하기 위한 노드
 - control : 사용자인증/인가, 모니터링, 사용자가 신청한 작업지시를 받아 이를 compute 로 전달
                "서버1대. cpu1,ram1G, disk20G"
 - compute : 하이퍼바이저-> 컨트롤로부터 전달받은 작업을 수행
 - network : 가상머신들이 배치, 외부사용자들에게 연결, DHCP, NAT, 방화벽등의 서비스
 - storage : 컴퓨트의 하이버파이저가 요청/작업지시간 디스크 볼륨공간 제공
  • 클라우드 => multi tannency(멀티 테넌시, 멀티 테넌트 환경) -> 프로젝트

KVM에서 가상머신 생성하기

1. ISO 파일을 이용한 설치

  • 볼륨(저장공간)을 먼저 생성해 두고 이 볼륨에 ISO 파일을 이용하여 설치를 진행한다.
--disk /remote/centos1.qcow2 --location /remote/centos1.iso
  • 부팅시 설치 마법사가 시작된다.
  • 이 방법은 동시에 다수의 가상 머신을 생성해야 하고 즉시 제공해야 하는 클라우드 환경에는 적합하지 않다
-> 시간이 너무 오래 걸린다.

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

  • 클라우드 이미지란 OS가 설치되어 있느 볼륨을 이미지화 한 것
-> 복사하여 동시에 여러 인스턴스(VM)을 배포할 수 있다.
  • "1" 볼륨을 이용하여 다른 가상머신을 생성하게 되면 보안상 문제가 발생할 수 있다.
    클라우드 이미지에는 루트 패스워드 등이 미리 지정되어 있어서는 안된다.
  • 필요할 때 root 패스워드를 설정해서 사용하는 방법은 아래를 참고한다.
virt-customize -a centos1.qcow2 --root-password password:test1234 [볼륨 사이즈 조정 불가]
  • 클라우드 이미지의 볼륨 크기 조정
-> virt-resize
  • virt-builder를 이용하면 기본 이미지에 대한 편집과 볼륨 조정이 가능하다.
step1. 클라우드 상에 있는 기본 템플릿 이미지를 다운로드 (centos-7.0.xz)
step2. 압축된 파일을 압축 해제한다.
step3. virt-resize를 이용하여 볼륨의 크기를 확장한다.
step4. disk open 볼륨 수정가능
               패키지 설치, 특정 파일 업로드, 인스턴스로 부팅시 실행할 명령등
step5. 최종적으로 수정된 볼륨이 생성된다. 
  • virt-install 을 이용하여 xml 을 만들어야한다. 이때 위에서 만든 볼륨의 위치를 지정해 주어야 한다.

quiz1

  • 현재는 미리 생성해 둔 키를 이용하여 접속하고 있다.
    간단한 스크립트를 작성하여 사용자로부터 키 이름을 요구 받고 요구받은 키의 이름을 이용하여 개인키/공개키를 생성하고 여기에서 만든 공개키를 인스턴스에 추가하세요. 단, 기존처럼 IP 주소는 211.183.3.222로하면 된다
    사용자는 개인키를 이용하여 접속시도한다.
  • https://velog.io/@yange/KVM-%EA%B8%B0%EB%B3%B8%EC%97%90-%EB%8C%80%ED%95%98%EC%97%AC3
    quiz3 참고

[간단한 팀 프로젝트]

  • kvm1,kvm2 중 선택해서 vm 배치하기
    cpu 사용량 비교해서 DB에 저장
    두 kvm vm 개수 비교해서 낮은 곳에 생성

#!/bin/bash
hostr=(sar 1 3 | grep -v CPU | grep Average | gawk '{print $8}') hostr=(echo "scale=2; 100 - $hostr" | bc)
echo "현재 호스트의 CPU 사용률 : $hostr %"

#!/bin/bash

clear
echo -e "\t\t\t인스턴스 생성 프로그램 "
echo
echo "설치할 이미지를 선택하세요"
echo "1. CentOS 7"
echo "2. Ubuntu 18.04"
echo
echo -n "이미지 선택 : "
read name

if [ -z $name ]
then
        echo "이미지를 선택하지 않았습니다. 프로그램이 종료됩니다"
        exit
elif [ $name -eq 1 ]
then
        name="CentOS7-Base.qcow2"
elif [ $name -eq 2 ]
then
        name="Ubuntu1804.qcow2"
else
        echo "잘못된 번호를 선택했습니다. 프로그램이 종료됩니다"
        exit
fi

echo
echo -n "인스턴스 이름 입력 : "
read instancename
if [ -z $instancename ]
then
echo " 잘못된 입력입니다. 다시 입력하세요"
fi
echo
echo -n "설치할 인스턴스의 개수 선택 : "
read count
if [ -z $count ]
then
echo " 잘못된 입력입니다. 다시 입력하세요"
exit
fi
echo -n "CPU 개수 선택(1~4) : "
read vcpus
if [ -z $vcpus ]
then
echo " 잘못된 입력입니다. 다시 입력하세요"
exit
fi
echo -n "메모리 사이즈 선택(1~4GB) : "
read tempmem
if [ -z $tempmem ]
then
echo " 잘못된 입력입니다. 다시 입력하세요"
exit
fi
ram=$[ $tempmem * 1024 ]
echo
echo "설치가 진행됩니다"
echo
# 프로그램 설치 시작
for(( i=1; i<=count; i++))
do

cp /cloud/$name /cloud/${instancename}-$i.qcow2

virt-install --name ${instancename}-$i --vcpus $vcpus --ram $ram --network network:default,model=virtio --disk /cloud/${instancename}-$i.qcow2 --import --noautoconsole > /dev/null
done
echo
echo "[결과 안내]"
echo "pls wait for Dhcp protocol"
for ((j=1; j<=count; j++))
do
vip=$(virsh domifaddr ${instancename}-$j | grep -v Name | gawk '{print $4}'| sed '/^$/d' | gawk -F/ '{print $1}')
while [ -z $vip ]
do
vip=$(virsh domifaddr ${instancename}-$j | grep -v Name | gawk '{print $4}'| sed '/^$/d' | gawk -F/ '{print $1}')
done
echo "${instancename}-$j 의 Ip 주소 : $vip "

done

hostr=$(sar 1 3 | grep -v CPU | grep Average | gawk '{print $8}')
hostr=$(echo "scale=2; 100 - $hostr" | bc)
echo "현재 호스트의 CPU 사용률 : $hostr %"
read -n 1 -p " 설치가 완료되었습니다. 계속 진행하시려면 아무 키나 입력하세요 "
echo

0개의 댓글