- Step 1: Install Terraform
- Step 2: Clone the Terraporx Repository
- Step 3: Select your OS Distro
- Step 4: Configure your Terraform variables
- Step 5: Create your cluster
- Step 6: (optional) Tear down your cluster
This guide shows you how you can easily deploy Portworx on the digitalocean.com cloud platform using Terraform infrastructure automation.
Following these simple instructions you can have a 3-node Portworx cluster up and running in under 5 minutes.
Other supported bare metal cloud providers are
Pre-requisites: You will need to have a valid Digital Ocean account
Step 1: Install Terraform
Download, unzip and install Terraform for your particular OS distro from the main Terraform Download site
Step 2: Clone the Terraporx Repository
git clone https://github.com/portworx/terraporx.git
cd terraporx/digital_ocean
Step 3: Select your OS Distro
This Digital Ocean repository currently supports 3 different Linux OS flavors:
- CoreOS
- Ubuntu16
- CentOS7
Select and cd
into the OS distro of your choice.
The scripts for Ubuntu and CentOS will both install the current version of ‘docker-ce’ and launch a single ‘etcd’ container for the Portworx required ‘kvdb’.
CoreOS will configure user_data to launch the internal ‘etcd2’ service and also launch ‘px-dev’ as a ‘systemd’ service.
Step 4: Configure your Terraform variables
The following variable definitions are required in the vars.tf
file in the corresponding OS directory:
- ‘do_token’ : Your Digital Ocean API key. Obtain or generate your token from here https://cloud.digitalocean.com/settings/api/tokens
- ‘region’ : These scripts require block storage, which is only available in these regions fra1, nyc1, sfo2 and sgp1
- ‘size’ : These are the valid instance sizes (strings) : “2gb”, “4gb”, “8gb”, “16gb”, “32gb”, “48gb”, “64gb”
- ‘volsize’ : These are the valid external volume sizes (integer in GB): 100, 250, 500, 1000, 2000
- ‘prefix’ : An arbitrary distinguishing name for your cluster prefix
- ‘ssh_key_path’ : The path to your private SSH key
- ‘pub_key’ : The contents of your public SSH key
- ‘ssh_fingerprint’ : The fingerprint of your SSH key, best obtained via
ssh-keygen -E md5 -lf ~/.ssh/id_rsa.pub
In addition for CoreOS, you will need to supply a ‘discovery_url’ for the ‘etcd’ service, which can be best obtained from the output of curl http://discovery.etcd.io/new?size=3
Make sure the SSH key variables correspond to a valid SSH key in your Digital Ocean profile in the Security settings for your account https://cloud.digitalocean.com/settings/security
Step 5: Create your cluster
Run terraform apply
. If all variables have been properly specified then after a few minutes, the following output will appear:
Outputs:
ip-addrs = [
ssh core@138.197.219.111,
ssh core@138.68.225.115,
ssh core@138.68.248.179
]
You can then login to validate the cluster state:
ssh core@138.197.219.111
The authenticity of host '138.197.219.111 (138.197.219.111)' can't be established.
ECDSA key fingerprint is 0e:9f:26:88:2a:3b:66:3d:08:11:b7:70:84:df:92:1f.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '138.197.219.111' (ECDSA) to the list of known hosts.
Container Linux by CoreOS stable (1353.7.0)
Update Strategy: No Reboots
core@my-coreos-1 ~ $ sudo /opt/pwx/bin/pxctl status
Status: PX is operational
Node ID: dd2d8751-3740-4188-9915-741d1b2996f5
IP: 138.197.219.111
Local Storage Pool: 1 pool
POOL IO_PRIORITY RAID_LEVEL USABLE USED STATUS ZONE REGION
0 MEDIUM raid0 100 GiB 2.0 GiB Online default default
Local Storage Devices: 1 device
Device Path Media Type Size Last-Scan
0:1 /dev/sda STORAGE_MEDIUM_MAGNETIC 100 GiB 15 May 17 17:57 UTC
total - 100 GiB
Cluster Summary
Cluster ID: px-cluster-coreos
IP ID Used Capacity Status
10.138.40.143 3a96fe16-ee59-4221-908a-53dea0d0734d 0 B 100 GiB Online
10.138.48.159 dd2d8751-3740-4188-9915-741d1b2996f5 0 B 100 GiB Online (This node)
10.138.40.145 9ad0ed12-16a1-4ecb-86da-bd5e7f321f05 0 B 100 GiB Online
Global Storage Pool
Total Used : 0 B
Total Capacity : 300 GiB
Step 6: (optional) Tear down your cluster
To teardown the cluster, use terraform destroy
or terraform destroy --force