2. Infra-as-code (Kubespray)

Deploy DIGIT using Kubespray

Overview

Kubespray is a composition of Ansible playbooks, inventory, provisioning tools, and domain knowledge for generic OS/Kubernetes cluster configuration management tasks. Kubespray provides:

  • a highly available cluster

  • composable attributes

  • support for the most popular Linux distributions

  • continuous-integration tests

Pre-requisites

Before we can get started, we need a few prerequisites to be in place. This is what we are going to need:

  1. A host with Ansible installed. Click here to learn more about Ansible. Find the Ansible installation details here.

  2. You should also set up an SSH key pair to authenticate to the Kubernetes nodes without using a password. This permits Ansible to perform optimally.

  3. Few servers/hosts/VMs to serve as our targets to deploy Kubernetes. I am using Ubuntu 18.04, and my servers each have 4GB RAM and 2vCPUs. This is fine for my testing purposes, which I use to try out new things using Kubernetes. You need to be able to SSH into each of these nodes as root using the SSH key pair I mentioned above.

Deployment Steps

The above will do the following:

  • Create a new Linux User Account for use with Kubernetes on each node

  • Install Kubernetes and containers on each node

  • Configure the Master node

  • Join the Worker nodes to the new cluster

Install Python

Ansible needs Python to be installed on all the machines.

apt-get update && apt-get install python3-pip -y

Disable Swap

Setup SSH using key-based authentication

All the machines should be in the same network with Ubuntu or Centos installed.

ssh key should be generated from the Bastion machine and must be copied to all the servers part of your inventory.

  • Generate the ssh key ssh-keygen -t rsa

  • Copy over the public key to all nodes.

Setup Ansible Controller Machine Setup Kubespray

  • Clone the official repository

  • Install dependencies from requirements.txt

  • Create Inventory

where mycluster is the custom configuration name. Replace with whatever name you would like to assign to the current cluster.

Create inventory using an inventory generator.

Once it runs, you can see an inventory file that looks like the below:

  • Review and change parameters under inventory/mycluster/group_vars

Deploy Kubespray with Ansible Playbook - run the playbook as Ubuntu

  • The option --become is required for example writing SSL keys in /etc/, installing packages and interacting with various system daemons.

  • Note: Without --become - the playbook will fail to run!

Kubernetes cluster will be created with three masters and four nodes using the above process.

Kube config will be generated in a .Kubefolder. The cluster can be accessible via kubeconfig.

HA-Proxy

  • Install haproxy package in a haproxy machine that will be allocated for proxy

sudo apt-get install haproxy -y

  • IPs need to be whitelisted as per the requirements in the config.

sudo vim /etc/haproxy/haproxy.cfg

Volumes

Iscsi volumes will be provided by the SDC team as per the requisition and the same can be used for statefulsets.

Note: Please refer to the DIGIT deployment documentation to deploy DIGIT services.

Last updated

Was this helpful?