[클라우드 With리눅스/쉘프로그래밍(7) - 가상머신 생성 및 cpu 확인 스크립트]

SooYeon Yeon·2022년 8월 22일

클라우드 With리눅스

목록 보기
32/39

[확인하고싶은 것]

  1. 가상머신의 IP 주소 : virsh domifaddr test1
root@sooyeon 0727]# virsh domifaddr test1
 Name       MAC address          Protocol     Address
-------------------------------------------------------------------------------
 vnet0      52:54:00:50:aa:2e    ipv4         192.168.122.66/24

[root@sooyeon 0727]# virsh domifaddr test1 | grep -v Name
-------------------------------------------------------------------------------
 vnet0      52:54:00:50:aa:2e    ipv4         192.168.122.66/24

[root@sooyeon 0727]# virsh domifaddr test1 | grep -v Name | gawk '{print $4}'

192.168.122.66/24

[root@sooyeon 0727]# virsh domifaddr test1 | grep -v Name | gawk '{print $4}' | sed '/^$/d'
192.168.122.66/24

[root@sooyeon 0727]# virsh domifaddr test1 | grep -v Name | gawk '{print $4}' | sed '/^$/d' | gawk -F/ '{print $1}'
192.168.122.66
  1. 현재 호스트의 CPU상태

top

yum -y install sysstat

sar 1 3 : 1초마다 CPU상태 3번점검하고 평균값 보여줌

가상머신들의 CPU 상태를 강제로 100%로 만들기 위한 구성내용

`virsh console test1 # 가상머신 test1으로 들어가는 것

yum -y install epel-release
yum -y install stress

stress -c 1 # 1개의 CPU를 100%로 만들겠다(2개였다면 50%)

yum -y install virt-top
virt-top

원래 host로 돌아오려면 : ctrl + ]

25%는 host 용량 중 25% 쓰고있다는 뜻

빠져나오려면 q

stress 끄기 : ctrl + c

ssh-keyscan localhost > ~/.ssh/known_hosts

실습

  1. /usr/bin/allvm 의 내용을 확인하여 undefine은 인스턴스를 삭제하는 명령이다. 단, 인스턴스가 삭제되고 디스크는 여전히 /cloud 상에 남아있게 된다. undefine했을 때 다음의 옵션을 추가하여 디스크까지 삭제되도록 해 보세요

    —remove-all-storage

    allvm undefine → virsh undefine test1 —remove-all-storage

    다음의 조건을 만족하는 스크립트를 작성

    인스턴스 생성 프로그램

    -설치할 이미지를 선택하세요.

    1. CentOS7

    2. Ubuntu 18.04

      선택 : 1

    -설치할 인스턴스의 이름을 입력하세요 : test

    -설치할 인스턴스의 개수 선택[1~4] : 3

    -CPU개수 선택[1~4] : 1

    -메모리 사이즈 선택[1~4G] : 1

    설치를 진행하겠습니다.

    [결과안내]

    test1의 IP 주소 : 192.168.122.201

    test2의 IP 주소 : 192.168.122.202

    현재 호스트의 CPU 사용률 : 23.03%

    설치가 완료되었습니다. 계속 진행하시려면 아무 키나 입력하세요

    조건 : 잘못된, null값이 입력되면 화면에는 잘못된 입력입니다. 다시 입력하세요가 나오도록

    기존 작성 코드에서 gawk 정규식 활용

    인스턴스 이름 → 반드시 소문자만 이용(최소 5~10)

    CPU → 반드시 숫자 (1~4)

    RAM - 반드시 숫자 (1~4) 잘못된입력입니다 GB단위로 입력하세요

    -------------- 인스턴스 생성 ---------------------
    #!/bin/bash
    
    clear
    echo -e "\t\t\t인스턴스 생성 프로그램 "
    echo
    
    # 설치할 이미지 선택
    
    PS3="설치할 이미지를 선택하세요 : "
    select comm in "CentOS7" "Ubuntu18.04"
    do
            case $comm in
            CentOS7)
                    name="CentOS7-Base.qcow2"
                    break ;;
            Ubuntu18.04)
                    name="Ubuntu1804.qcow2"
                    break  ;;
            *)
                    echo "잘못된 번호 선택. 다시 입력하세요." ;;
            esac
    done
    
    # 인스턴스 이름 입력
    echo
    echo -n "인스턴스 이름 입력 : "
    read instancename
    
    # 설치할 인스턴스 개수 선택
    echo -n "설치할 인스턴스 개수 선택[1~4] : "
    read num
    while [ 1 ]
    do
    if [ $num -ge 1 ] && [ $num -le 4 ]
    then
            break
    else
            echo "잘못된 입력입니다. 다시 입력하세요"
            echo -n "설치할 인스턴스 개수 선택[1~4] : "
            read num
    fi
    done
    
    echo
    echo -n "CPU 개수 선택(1~4) : "
    read vcpus
    while [ 1 ]
    do
    if [ $vcpus -ge 1 ] && [ $vcpus -le 4 ]
    then
            break
    else
            echo "잘못된 입력입니다. 다시 입력하세요"
            echo -n "CPU 개수 선택 (1~4) : "
            read vcpus
    fi
    done
    
    echo
    echo -n "메모리 사이즈 선택(1~4GB) : "
    read tempmem
    while [ 1 ]
    do
    if [ $tempmem -ge 1 ] && [ $tempmem -le 4 ]
    then
            break
    else
            echo "잘못된 입력입니다. 다시 입력하세요"
            echo -n "메모리 사이즈 선택(1~4GB) : "
            read tempmem
    fi
    done
    ram=$(expr $tempmem \* 1024 )
    
    echo
    echo "설치가 진행됩니다"
    
    for (( i=1; i<=$num; i++ ))
    do
    
    cp /cloud/$name /cloud/${instancename}${i}.qcow2
    #echo "$instancename$i $vcpus $ram"
    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 "설치 완료"
    
    #확인
    virsh list --all
    sleep 120
    # 결과안내
    for (( i=1; i<$num+1; i++))
    do
            ip=$(virsh domifaddr ${instancename}${i} | grep -v Name | gawk '{print $4}' | sed '/^$/d' | gawk -F/ '{print $1}')
            echo "${instancename}${i} 의 IP 주소 : $ip"
    done

    var=$(sar 1 3 | tail -1 | gawk '{print $8}')

    cpuutil=$(echo "scale=4; 100 - $var" | bc)

    mysql -h 192.168.1.199 -u testuser -ptest123

0개의 댓글