Infrastructure Setup
Host machine preparation
Initial setup
Set hostname:
$ hostnamectl set-hostname phd1
Fix locale:
$ vi /etc/environment
LANG=en_US.utf-8
LC_ALL=en_US.utf-8
Setup basic packages:
$ yum install -y wget vim git htop curl tmux
Network interfaces
Setup network bridge for external interface (enp6s0
):
$ vi /etc/sysconfig/network-scripts/ifcfg-enp6s0
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="none"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="enp6s0"
UUID="5e5822dd-dc88-42dd-98cd-31628d4404bf"
DEVICE="enp6s0"
ONBOOT="yes"
BRIDGE="br0"
$ vi /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE="br0"
BOOTPROTO="static"
ONBOOT="yes"
TYPE="Bridge"
IPADDR="172.17.80.25"
PREFIX="24"
GATEWAY="172.17.80.254"
DNS1="172.29.128.101"
Setup network bridge for internal interface (enp7s0
):
$ vi /etc/sysconfig/network-scripts/ifcfg-enp7s0
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="enp7s0"
UUID="0674f835-ed1d-479f-8ad8-9ed253588189"
DEVICE="enp7s0"
ONBOOT="yes"
BRIDGE="br1"
$ vi /etc/sysconfig/network-scripts/ifcfg-br1
DEVICE="br1"
BOOTPROTO="static"
ONBOOT="yes"
TYPE="Bridge"
IPADDR="10.10.10.25"
PREFIX="24"
Reboot the OS:
$ reboot
Setup KVM
Enable nested virtualization:
$ cat /sys/module/kvm_intel/parameters/nested
N
$ vi /etc/modprobe.d/kvm-nested.conf
options kvm-intel nested=1
options kvm-intel enable_shadow_vmcs=1
options kvm-intel enable_apicv=1
options kvm-intel ept=1
$ modprobe -r kvm_intel
$ modprobe -a kvm_intel
$ cat /sys/module/kvm_intel/parameters/nested
Y
Install KVM:
$ yum -y install qemu-kvm libvirt libvirt-python libguestfs-tools virt-install
Enable Libvirt daemon:
$ systemctl enable libvirtd
$ systemctl start libvirtd
Ensure the KVM module is loaded into Kernel:
$ lsmod | grep -i kvm
kvm_intel 183621 0
kvm 586948 1 kvm_intel
VM provisioning
Prepare Kickstart files
Setup Kickstarter:
$ git clone https://github.com/bzurkowski/kickstarter.git
$ cd ./kickstarter
$ virtualenv -p $(which python3) ./venv
$ source ./venv/bin/activate
$ pip install .
Create Kickstarts for VMs:
$ kick generate \
--name=orca \
--num-hosts=16 \
--part=mnt_point=/,size=122880 \
--network=device=eth0,proto=static,start=172.17.80.128,end=172.17.80.191,net_mask=255.255.255.0,gateway=172.17.80.254,nameserver=172.29.128.101 \
--network=device=eth1,proto=static,start=10.10.10.128,end=10.10.10.191,net_mask=255.255.255.0,gateway=10.10.10.1,nameserver=8.8.8.8 \
--output-dir=$HOME/Workspace/orca/orca-testbed/kickstart
Sample Kickstart file:
#Generated by Kickstarter
#System language
lang en_US
#System keyboard
keyboard pl
#System timezone
timezone Europe/Warsaw
#Root password
rootpw --iscrypted $1$tSjV83cV$yl5tDtV7YuCMGthbK0pKf1
#Reboot after installation
reboot
#Install OS instead of upgrade
install
#Use CDROM installation media
cdrom
#System bootloader configuration
bootloader --location=mbr
#Clear the Master Boot Record
zerombr
#Partition clearing information
clearpart --all --initlabel
#Disk partitioning information
part /boot --fstype ext4 --size 1024
part / --fstype ext4 --size 122880
#System authorization infomation
auth --useshadow --enablemd5
#Network information
network --device=eth0 --bootproto=static --ip=172.17.80.128 --netmask=255.255.255.0 --gateway=172.17.80.254 --nameserver=172.29.128.101
network --device=eth1 --bootproto=static --ip=10.10.10.128 --netmask=255.255.255.0 --gateway=10.10.10.1 --nameserver=8.8.8.8
#Hostname
network --hostname=orca1
#Firewall configuration
firewall --disabled
#Do not configure the X Window System
skipx
#Select packages to install
%packages
@^minimal
%end
Copy Kickstart files to VM hosts:
$ cd $HOME/Workspace/orca/orca-testbed/kickstart
$ rsync -avz orca1.cfg orca3.cfg orca3.cfg orca4.cfg root@172.17.80.22:/root/kickstart
$ rsync -avz orca5.cfg orca6.cfg orca7.cfg orca8.cfg root@172.17.80.23:/root/kickstart
$ rsync -avz orca9.cfg orca10.cfg orca11.cfg orca12.cfg root@172.17.80.24:/root/kickstart
$ rsync -avz orca13.cfg orca14.cfg orca15.cfg orca16.cfg root@172.17.80.25:/root/kickstart
Provision VMs
Provision VM instances:
$ virt-install \
--virt-type=kvm \
--name orca1 \
--ram 57344 \
--vcpus=32 \
--cpu host \
--accelerate \
--os-type=linux \
--os-variant=centos7.0 \
--location=/home/libvirt/images/CentOS-7-x86_64-Minimal-2009.iso \
--network=bridge=br0,model=virtio \
--network=bridge=br1,model=virtio \
--disk path=/home/libvirt/images/orca1.raw,size=425,bus=virtio,format=raw \
--graphics vnc \
--initrd-inject=/root/kickstart/orca1.cfg \
--extra-args "ks=file:/orca1.cfg"
Find VNC port:
$ virsh dumpxml centos7 | grep vnc
<graphics type='vnc' port='5901' autoport='yes' listen='127.0.0.1'>
Port-forward the VNC port:
$ ssh root@172.17.80.22 -L 5900:127.0.0.1:5900
Access the OS installation via VNC Viewer to track the installation progress.