This is a demo guide of how to install kubernetes master and worker nodes on Microsoft Azure standalone virtual machines.
This guide is not intended as a solution for production purposes.
Pre-requisites
This guide assumes that you have a Microsoft Azure account and that you installed the Azure CLI and you are logged in to the respective subscription in Azure.
First steps
To create a resource group:
az group create -n rg_k8sdemo --location eastus2 --tags Purpose=Education
To create a VNET:
az network vnet create \ --resource-group rg_k8sdemo \ --name vnet-k8s-101519 \ --address-prefix 10.0.0.0/16 \ --subnet-name subnet-k8s-101519 \ --subnet-prefix 10.0.0.0/24
To create a virtual machine (as master):
az vm create \ --location eastus2 \ --size Standard_B1ms \ --resource-group rg_k8sdemo \ --image UbuntuLTS \ --computer-name my-k8s-master-00 \ --name k8s-101519-master-00 \ --vnet-name vnet-k8s-101519 \ --subnet subnet-k8s-101519 \ --storage-sku Standard_LRS \ --ssh-key-values .ssh/id_rsa.pub \ --tags role=master
This command creates a small size virtual machine that uses “standard” storage for the OS disk. Besides, the command links the virtual machine to the previously created VNET.
To create a virtual machine (as worker node):
az vm create \ --location eastus2 \ --size Standard_B1ms \ --resource-group rg_k8sdemo \ --image UbuntuLTS \ --computer-name my-k8s-worker-00 \ --name k8s-101519-worker-00 \ --vnet-name vnet-k8s-101519 \ --subnet subnet-k8s-101519 \ --storage-sku Standard_LRS \ --ssh-key-values .ssh/id_rsa.pub \ --tags role=worker
Please repeat this command to create another VM. Adjust the values where applicable.
Kubernetes installation and configuration
GPG keys
It is required the GPG key for Docker and kubernetes, as well.
Get the Docker gpg key:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add –
Get the Kubernetes gpg key:
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add –
Repositories
Add the Docker repository:
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) \ stable"
Add the Kubernetes repository:
cat << EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list deb https://apt.kubernetes.io/ kubernetes-xenial main EOF
Package management
To update the packages of the system:
sudo apt-get update
Install Docker, kubelet, kubeadm, and kubectl:
sudo apt-get install -y docker-ce=18.06.1~ce~3-0~ubuntu kubelet=1.13.5-00 kubeadm=1.13.5-00 kubectl=1.13.5-00
Hold them at the current version:
sudo apt-mark hold docker-ce kubelet kubeadm kubectl
Iptables rule
Add the iptables rule to sysctl.conf:
echo "net.bridge.bridge-nf-call-iptables=1" | sudo tee -a /etc/sysctl.conf
Enable iptables immediately:
sudo sysctl -p
Kubernetes tasks
Initialize the cluster (run only on the master):
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
I learned that it is required a minimum of 2 vCPUs for the master. Also, kubernetes complained about the kernel of the VM. I bypassed those problems as follows:
walter@my-k8s-master-00:~$ sudo kubeadm init --pod-network-cidr=10.244.0.0/16 --ignore-preflight-errors=NumCPU,SystemVerification
Set up local kubeconfig:
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
Apply Flannel CNI network overlay:
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
Join the worker(s) node(s):
sudo kubeadm join 10.0.0.4:6443 --token <string> --discovery-token-ca-cert-hash sha256:<sha256string> --ignore-preflight-errors=SystemVerification
For the other worker node:
sudo kubeadm join 10.0.0.4:6443 --token <string> --discovery-token-ca-cert-hash sha256:<sha256string> --ignore-preflight-errors=SystemVerification
Run on the master node:
walter@my-k8s-master-00:~$ kubectl get nodes NAME STATUS ROLES AGE VERSION my-k8s-master-00 Ready master 13h v1.13.5 my-k8s-worker-00 Ready <none> 3m18s v1.13.5 my-k8s-worker-01 Ready <none> 106s v1.13.5
Closing
For demonstration purposes it was created a kubernetes cluster that runs on a single main node and couple of worker nodes. These nodes are virtual machines (VMs) created on Microsoft Azure.
Note: The standard method to run kubernetes on Microsoft Azure is using Microsoft Azure AKS service.