초 단위 로 kvm 가상 컴퓨터 를 대량으로 만 들 고 IP 주소 와 호스트 이름 을 지정 합 니 다.
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
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
벚꽃 편집기에서 선택한 텍스트를 자동으로 표시하는 방법벚꽃 편집기에서 로그 파일 등을 참조할 때 선택한 문자를 자동으로 표시하는 것이 편리하다. 벚꽃 편집기에서 문자를 두 번 눌렀을 때 선택한 문자를 자동으로 표시하는 방법을 소개한다. 두 번 클릭하고 문자를 선택하면 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.