초 단위 로 kvm 가상 컴퓨터 를 대량으로 만 들 고 IP 주소 와 호스트 이름 을 지정 합 니 다.

1. 설명
kvm 는 vmware 에 비해 가장 없 는 기능 은 템 플 릿 으로 가상 컴퓨터 를 배치 할 때 ip 주 소 를 사용자 정의 할 수 있 는 것 입 니 다. 이것 은 vm 를 대량으로 만 드 는 장면 에 있어 vnc 로그 인 으로 ip 을 바 꾸 는 것 이 필요 합 니 다. 분명히 피곤 합 니 다. 최근 에 저 는 이런 장면 을 만 났 습 니 다 (대형 cloudstack 과 openstack 구 조 는 말 하지 않 습 니 다)
컴퓨터 가 꺼 진 가상 컴퓨터 를 템 플 릿 으로 사용 하고 xml 파일 을 복사 하면 mac 주 소 를 바 꿀 수 있 습 니 다. 그러면 mac 주소 의 유일 성 을 통 해 템 플 릿 가상 컴퓨터 에 스 크 립 트 를 추가 하여 가상 컴퓨터 에 기 록 된 목록 파일 에 따라 해당 하 는 ip 주소 와 서버 이름 을 설정 할 수 있 습 니 다.
이런 방법 은 다음 과 같은 절 차 를 요구한다.
1. 템 플 릿 가상 머 신 에 시작 하 는 스 크 립 트 가 있 습 니 다. 이 스 크 립 트 는 목록 파일 에 따라 자신의 ip 과 서버 이름 을 설정 하고 다시 시작 한 후에 다시 설정 하지 않도록 설정 합 니 다.2. 목록 파일 을 템 플 릿 가상 머 신 에 쓰 면 유연 한 장면 을 제한 할 수 있 습 니 다. 미리 설 정 된 가상 머 신 생 성 장면 에서 만 유효 합 니 다. 가상 머 신 을 임시로 추가 하고 수량 이 많 지 않 을 때 모 바 일 가상 머 신 에 있 는 목록 파일 을 다시 업데이트 하 는 기능 도 사용 합 니 다.3. kvm 에서 만 든 가상 컴퓨터 mac 주 소 는 템 플 릿 가상 컴퓨터 의 목록 파일 과 일치 해 야 합 니 다.4. 백 엔 드 디스크 기술 로 작성 할 때 복사 하여 초 단위 로 가상 머 신 을 만 들 수 있 습 니 다.
2. 템 플 릿 가상 머 신의 준비
템 플 릿 가상 머 신 이 수행 해 야 할 작업 은 주로 다음 과 같 습 니 다. kvm 에서 가상 머 신 을 만 드 는 데 사용 되 는 템 플 릿 가상 머 신 경로 와 같 습 니 다. 2./etc/rc. local 에 해당 하 는 시작 설정 스 크 립 트 가 있 습 니 다. 3. 목록 파일
부팅 스 크 립 트
#!/bin/bash

setting_list="/root/.init_ip_hostname/setting_list"
if [ ! -f $setting_list ];then
  echo "[$setting_list] not exist"
  exit 1
fi
lock_file="/root/.init_ip_hostname/setting_lock"
if [ -f $lock_file ];then
  echo "this vm has been set.exit"
  exit 0
fi
myeth0mac=`ip a|awk '/eth0/{getline;print}' | grep 'link/ether' |awk '{print $2}'|awk -F: '{print $4":"$5":"$6}'`
myinfoline=`cat $setting_list|grep $myeth0mac`
if [ ! -n "$myinfoline" ];then
  echo "sorry,can’t fine info from [$setting_list]"
  exit 1
fi
myip=`echo $myinfoline|awk '{print $2}'`
myhostname=`echo $myinfoline|awk '{print $3}'`
sed -ri "s/(^IPADDR=).*$/\1$myip/" /etc/sysconfig/network-scripts/ifcfg-eth0
systemctl restart network
hostnamectl --static set-hostname $myhostname
echo "this vm has been set">> $lock_file

이상 스 크 립 트 를 켜 기 시작 에 추가 합 니 다.
echo '/root/.init_ip_hostname/init_setting.sh > /root/.init_ip_hostname/init.log 2>&1' >>/etc/rc.local

chmod 755 /etc/rc.d/rc.local

/root/.init_ip_hostname/setting_list 파일 예제, 아래 에 대응 하 는 것 은 mac ip 입 니 다. mac 주소 가 어떻게 생 성 되 는 지 물 어보 고 다음 명령 으로 생 성 되 었 습 니 다. 제 쪽 은 세 자리 만 만 했 습 니 다.
openssl rand -hex 3 | sed -r 's/..\B/&:/g'
#                   
4a:b7:01 xxx.xx.xx.201 vm1
71:5b:32 xxx.xx.xx.202 vm2
28:34:18 xxx.xx.xx.203 vm3

그리고 이 가상 컴퓨터 를 꺼 서 kvm 복제 에 사용 하도록 합 니 다.
3. kvm 가상 컴퓨터 스 크 립 트 대량 생 성
3.1 목록 파일 먼저 만 들 기
mac 주 소 는 템 플 릿 가상 컴퓨터 의 mac 주소 와 일치 해 야 합 니 다.대응 열 mac cpu ( G)
#              
vm1 4a:b7:01 2 4
vm2 71:5b:32 2 4
vm3 28:34:18 2 4

서버 와 클 라 이언 트 가 mac 목록 을 만 드 는 스 크 립 트 는 다음 과 같 습 니 다.
#!/bin/bash
for i in {2..254}
do
ip_add=`openssl rand -hex 3 | sed -r 's/..\B/&:/g'`
#local_list     
echo "vm${i}  ${ip_add} 1 1" >> local_list
#vm_list               
echo "${ip_add} 192.168.122.${i} vm${i}" >> vm_list
done

3.2 호스트 에 대량 생 성 용 스 크 립 트 쓰기
#!/bin/bash

file_exist_check () {
local filepath=$1
local filename=$2
if [ ! -f $filepath ];then
  echo "$filename [$filepath] not exist"
  exit 1
fi
}

vm_list=$1
file_exist_check $vm_list "vm_list"
#       
src_path=/var/lib/libvirt/images/centos_base01.qcow2

#       
src_xml=/var/lib/libvirt/images/centos_base01.xml

set_xml_argus () {
newname=$1
uuid=`uuidgen`
new_path=/var/lib/libvirt/images/${newname}.qcow2
new_path_sed="\/var\/lib\/libvirt\/images\/${newname}.qcow2"
new_xml=/etc/libvirt/qemu/${newname}.xml
}

copy_xml () {
#                 
qemu-img create -b $src_path -f qcow2 $new_path 50G
cp $src_xml $new_xml
}

change_xml () {
sed -ri "s/().*()/\1${newname}\2/" $new_xml
sed -ri "s/().*()/\1${uuid}\2/" $new_xml
#mem_kb=$((${newmemory}*1024*1024))
#sed -ri "s/().*()/\1${mem_kb}\2/" $new_xml
#sed -ri "s/(currentMemory.*>).*()/\1${mem_kb}\2/" $new_xml
#sed -ri "s/()/\1${newcpu}\2/" $new_xml
sed -ri "s/(source file=').*('\/>)/\1${new_path_sed}\2/" $new_xml
sed -ri "s/()/\1${mac_addr}\2/" $new_xml
}

define_vir () {
virsh define $new_xml
virsh start ${newname}
echo "vm ${newname} has been created."
}

####
# main process
####
cat $vm_list|while read line
do
  newname=`echo $line|awk '{print $1}'`
  mac_addr=`echo $line|awk '{print $2}'`
  newcpu=`echo $line|awk '{print $3}'`
  newmemory=`echo $line|awk '{print $4}'`
  set_xml_argus $newname
  copy_xml
  change_xml
  define_vir
  done

운행 방법
kvm_create_vm.sh vm_list

좋은 웹페이지 즐겨찾기