
This guide will walk you through the steps to setup Razor a next generation provisioning solution for bare metal and virtual servers. Razor puts an API on top of bare metal and virtual server provisioning. Razor makes it extremely easy to provision one, two or two hundred servers very quickly. The software was co-developed between EMC and Puppet Labs. The entire Razor project was open sourced and freely available to anyone who wants to use the software.
This tutorial was written using CentOS 7
STEP 1. Install Postgres
To setup Razor you will first need the Postgres SQL database installed. Postgres is used to stored facts about the nodes being provisioned through razor.
Install the Postgres database server and initialize the databases
$ sudo yum install postgresql-server postgresql-contrib $ sudo postgresql-setup initdb
Configure Postgres to allow remote access by adding the Subnet or IP address of the razor server connecting to Postgres
$ sudo vim /var/lib/pgsql/data/pg_hba.conf host all all 172.16.1.0/24 trust $ sudo vim /var/lib/pgsql/data/postgresql.conf listen_addresses = '*'
$ sudo systemctl start postgresql
su - postgres psql
CREATE USER razoruser WITH PASSWORD 'password'; CREATE DATABASE razor_prd OWNER razoruser; # to exit postgres cli \q
STEP 2. Install Razor Server and Client
$ sudo yum install http://yum.puppetlabs.com/puppetlabs-release-el-7.noarch.rpm $ sudo yum install razor-server
Install the Razor client
$ sudo yum install ruby $ sudo gem install razor-client
STEP 3. Configure Razor
Configure the razor server database connection string by editing the Razor config file /etc/razor/config.yaml
production: database_url: 'jdbc:postgresql:razor_prd?user=razoruser&password=password'
Start the razor server and verify connectivity to the Razor server
$ sudo systemctl start razor-server $ razor -u http://localhost:8150/api -v
STEP 4. Download and extract the Razor microkernel
$ cd /var/lib/razor/repo-store/ $ wget http://links.puppetlabs.com/razor-microkernel-latest.tar $ tar -xvf ./razor-microkernel-latest.tar
STEP 5. Install the tftp server
yum install tftp tftp-server xinetd cd /var/lib/tftpboot/ service xinetd start service xinetd status chmod 664 /var/lib/tftpboot/* vim /etc/xinetd.d/tftp # configure disable to no disable = no
Install the ipxe boot
cd /var/lib/tftpboot wget http://boot.ipxe.org/undionly.kpxe chmod 644 ./undionly.kpxe
Save the Razor iPXE bootstrap script as bootstrap.ipxe
cd /var/lib/tftpboot curl http://172.16.1.75:8150/api/microkernel/bootstrap?nic_max=4 > ./bootstrap.ipxe chmod 644 ./bootstrap.ipxe
STEP 6. Install the CentOS ISO
This is the ISO Which we will install when we PXE boot servers with Razor
Download the CentOS iso
yum install nginx systemctl start nginx systemctl enable nginx cd /usr/share/nginx/html/ wget http://mirrors.centos.webair.com/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-1511.iso chmod 644 ./CentOS-7-x86_64-DVD-1511.iso # Verify the ISO can be downloaded wget http://localhost/CentOS-7-x86_64-DVD-1511.iso
STEP 7. Configure the DHCP server on your network so clients can PXE boot.
Getting the PXE boot to work can be a bit tricky. You must define an iPXE class in the DHCP server.
Create a Policy / Class

Configure the DHCP Scope Options for the iPXE class

When you are complete conifguring the iPXE DHCP class your scope options should look like this.

STEP 8. Use the Razor Client to create a CentOS 7 Repo
$ razor create-repo --name centos70 \ --iso-url http://chef02.lab.net/CentOS-7.0-1406-x86_64-DVD.iso \ --task centos/7
STEP 9. Use the Razor Client to create a tag. In this example tag I create a very specific tag which specifies if a node boots on the network with this MAC address then install CentOS 7.
$ razor create-tag --name node01 --rule '["in", ["fact", "macaddress"], "00:0c:29:49:92:71"]'
Here is an example tag which includes two MAC addresses
razor create-tag --name twoNodes --force --rule '["in", ["fact", "macaddress"], "00:0c:29:49:92:71", "00:0c:29:6a:d1:74"]'
STEP 10. Define you policy
$ vim policy.json
{
"name": "centos-for-small",
"repo": "centos70",
"task": "centos/7",
"broker": "noop",
"enabled": true,
"hostname": "host${id}.lab.net",
"root_password": "password",
"max_count": 20,
"tags": ["node01"]
}
STEP 11. Create the Policy
razor create-policy --json policy.json
STEP 12.
At this point you should be able to boot the server with the specified MAC address above and CentOS should begin installation.
References
Allow remote Postgres connections
How to Allow Remote Connection to PostgreSQL Database using psql
Install Postgres on CentOS 7
https://www.digitalocean.com/community/tutorials/how-to-install-and-use-postgresql-on-centos-7
Over the last month I have been evaluating container clustering software. I started with Kubernetes, Rancher which uses swarm and Mesos. I am going through these evaluations to determine which container clustering software will fit my employer’s needs best.
