Terraform configuration for create set of Droplets to use as base for create a NS8 cluster. The droplets will be created with DNS records already configured, but the NS8 system must be installed and configured manually.
do_token
: DigitalOcean token.sshkey
: DigitalOcean ssh public key to use (optional). If your private key is password-protected, do not set this variable and use the SSH automatically generated by terraform.project
: DigitalOcean project where to create the droplets.domain
: DigitalOcean domain where to create the DNS records.leader_node
: The leader node (optional).worker_nodes
: List of worker nodes (optional).
Each variable is a map and each item represents a cluster node.
-
The item key selects the OS type. Specify it followed by a number:
dn
is for Debian 11cs
is for CentOS Stream 9
-
The item value selects the droplet region. Refer to
doctl compute region list
output for a list of valid region codes.
The variable leader_node
represents the leader node and the worker_nodes
represents the worker nodes.
Download and install Terraform, then follow below steps.
-
Create a
configs.auto.tfvars
file, like the following:sshkey = "davidep" do_token = "secret" project = "davidep" domain = "dp.nethserver.net"
-
Install required plugins
terraform init
-
Create and select a new workspace
cluster0
terraform workspace new cluster0
-
Create two nodes for
cluster0
terraform apply -var 'leader_node={"dn1":"ams3"}' -var 'worker_nodes={"cs1":"sfo3"}' # -> dn1.leader.cluster0.dp.nethserver.net # -> cs1.worker.cluster0.dp.nethserver.net
-
Add another node to it:
terraform apply -var 'leader_node={"dn1":"ams3"}' -var 'worker_nodes={"cs1":"sfo3","cs2:"lon1"}' # -> cs2.worker.cluster0.dp.nethserver.net
-
Destroy the cluster
terraform destroy
To work with multiple cluster instances just add more Terraform workspaces. E.g.:
terraform workspace new cluster1
terraform apply -var 'leader_node={"dn1":"ams3"}' -var 'worker_nodes={"dn5":"ams3","dn6":"sfo3","dn7":"sgp1"}'
terraform workspace select cluster0
terraform apply -var 'leader_node={"dn1":"ams3"}' -var 'worker_nodes={"dn1":"ams3","dn2":"sfo3"}'
A pair of public and private key will be crated and installed on the cluster, for retrive the private key and use it:
terraform output -raw deploy-key > key
chmod 0600 key