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.

results matching ""

    No results matching ""