This currently works for 1.19+
channel.
Use only with terraform v0.14
Bootstrap a Highly Available MicroK8s cluster in DigitalOcean with Terraform.
For example to bootstrap a 7 node cluster.
module "microk8s" {
source = "git::https://github.com/balchua/do-microk8s?ref=master"
node_count = "7"
os_image = "ubuntu-20-04-x64"
node_size = "s-4vcpu-8gb"
node_disksize = "2"
region = "sgp1"
dns_zone = "geeks.sg"
microk8s_channel = "latest/edge"
cluster_token = "PoiuyTrewQasdfghjklMnbvcxz123409"
cluster_token_ttl_seconds = 3600
digitalocean_ssh_fingerprint = var.digitalocean_ssh_fingerprint
digitalocean_private_key = var.digitalocean_private_key
digitalocean_token = var.digitalocean_token
digitalocean_pub_key = var.digitalocean_pub_key
}
The cluster_token
must be 32 alphanumeric characters long.
You must have these environment variables present.
TF_VAR_digitalocean_token=<your DO access token>
TF_VAR_digitalocean_ssh_fingerprint=<Your private key fingerprint>
TF_VAR_digitalocean_private_key=<location of your private key>
TF_VAR_digitalocean_pub_key=<location of your public key>
Simply run the terraform plan
and then terraform apply
Once terraform completes, you should be able to see the cluster.
Login to one of the node using ssh root@node
, then issue the command below.
root@microk8s-node-cetacean-0:~# microk8s kubectl get no
NAME STATUS ROLES AGE VERSION
microk8s-node-cetacean-0 Ready <none> 6m36s v1.20.4-38+85035ca77e3c6e
microk8s-node-cetacean-2 Ready <none> 4m33s v1.20.4-38+85035ca77e3c6e
microk8s-node-cetacean-6 Ready <none> 4m47s v1.20.4-38+85035ca77e3c6e
microk8s-node-cetacean-5 Ready <none> 4m21s v1.20.4-38+85035ca77e3c6e
microk8s-node-cetacean-4 Ready <none> 4m15s v1.20.4-38+85035ca77e3c6e
microk8s-node-cetacean-3 Ready <none> 4m12s v1.20.4-38+85035ca77e3c6e
microk8s-node-cetacean-1 Ready <none> 4m6s v1.20.4-38+85035ca77e3c6e
The module automatically downloads the kubeconfig file to your local machine in /tmp/client.config
In order to access the Kubernetes cluster from your local machine, simple do export KUBECONFIG=/tmp/client.config
This will connect using the load balancer fronting the api servers. The dns entry will be microk8s-cluster.<domain name>
Example:
microk8s-cluster.geeks.sg
It requires node counts to be greater than or equal to 3 to form a majority. Each node can be a control plane, hence there is really no concept of control plane.
Check documentation on MicroK8s Discuss HA
This terraform also creates and attach a volume to each droplet. This will let you setup Rook + Ceph storage. This way you can freely create volumes that you can share to your pods.
The following sections describes how to install Rook/Ceph, Longhorn and OpenEBS with MicroK8s
Some instructions on how to use Rook
Some instructions on how to use Longhorn
Instructions on how to install OpenEBS