Building a Kubernetes Cluster with Kubeadm

Get Started
1 hour
  • 5 Learning Objectives

About this Hands-on Lab

A Kubernetes cluster is a powerful tool for managing containers in a highly-available manner. Kubeadm greatly simplifies the process of setting up a simple cluster. In this hands-on lab, you will build your own working Kubernetes cluster using Kubeadm.

Learning Objectives

Successfully complete this lab by achieving the following learning objectives:

Install Docker on all three nodes.
  1. Do the following on all three nodes:
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
    sudo add-apt-repository 
    "deb [arch=amd64] https://download.docker.com/linux/ubuntu 
    $(lsb_release -cs) 
    stable"
    sudo apt-get update
    sudo apt-get install -y docker-ce=18.06.1~ce~3-0~ubuntu
    sudo apt-mark hold docker-ce
  2. Verify that Docker is up and running with:
    sudo systemctl status docker

    Make sure the Docker service status is active (running)!

Install Kubeadm, Kubelet, and Kubectl on all three nodes.
  1. Install the Kubernetes components by running this on all three nodes:
    curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
    cat << EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list
    deb https://apt.kubernetes.io/ kubernetes-xenial main
    EOF
    sudo apt-get update
    sudo apt-get install -y kubelet=1.14.5-00 kubeadm=1.14.5-00 kubectl=1.14.5-00
    sudo apt-mark hold kubelet kubeadm kubectl
Bootstrap the cluster on the Kube master node.
  1. On the Kube master node, do this:

    sudo kubeadm init --pod-network-cidr=10.244.0.0/16

    That command may take a few minutes to complete.

  2. When it is done, set up the 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

    Take note that the kubeadm init command printed a long kubeadm join command to the screen. You will need that kubeadm join command in the next step!

  3. Run the following commmand on the Kube master node to verify it is up and running:

    kubectl version

    This command should return both a Client Version and a Server Version.

Join the two Kube worker nodes to the cluster.
  1. Copy the kubeadm join command that was printed by the kubeadm init command earlier, with the token and hash. Run this command on both worker nodes, but make sure you add sudo in front of it:
    sudo kubeadm join $some_ip:6443 --token $some_token --discovery-token-ca-cert-hash $some_hash
  2. Now, on the Kube master node, make sure your nodes joined the cluster successfully:
    kubectl get nodes

    Verify that all three of your nodes are listed. It will look something like this:

    NAME            STATUS     ROLES    AGE   VERSION
    ip-10-0-1-101   NotReady   master   30s   v1.12.2
    ip-10-0-1-102   NotReady   &lt;none>   8s    v1.12.2
    ip-10-0-1-103   NotReady   &lt;none>   5s    v1.12.2

    Note that the nodes are expected to be in the NotReady state for now.

Set up cluster networking with flannel.
  1. Turn on iptables bridge calls on all three nodes:
    echo "net.bridge.bridge-nf-call-iptables=1" | sudo tee -a /etc/sysctl.conf
    sudo sysctl -p
  2. Next, run this only on the Kube master node:
    kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/bc79dd1505b0c8681ece4de4c0d86c5cd2643275/Documentation/kube-flannel.yml

    Now flannel is installed! Make sure it is working by checking the node status again:

    kubectl get nodes

    After a short time, all three nodes should be in the Ready state. If they are not all Ready the first time you run kubectl get nodes, wait a few moments and try again. It should look something like this:

    NAME            STATUS   ROLES    AGE   VERSION
    ip-10-0-1-101   Ready    master   85s   v1.12.2
    ip-10-0-1-102   Ready    &lt;none>   63s   v1.12.2
    ip-10-0-1-103   Ready    &lt;none>   60s   v1.12.2

Additional Resources

Your team is ready to deploy the first version of their new online storefront. The team is anticipating the potential for a high degree of customer usage after deployment, and they want to make use of Kubernetes in order to enable them to respond quickly to changing needs. In order to do this, they need a new Kubernetes cluster. You have been given the task of quickly spinning up a working Kubernetes cluster with one master and two worker nodes.

You will need to do the following:

  • Install Docker on all three nodes.
  • Install Kubeadm, Kubelet, and Kubectl on all three nodes.
  • Bootstrap the cluster on the Kube master node.
  • Join the two Kube worker nodes to the cluster.
  • Set up cluster networking with flannel.

Note: When installing kubeadm, kubectl, and kubelet, use version 1.14.5-00. The older versions currently have a bug that may interfere with the installation.

If you need additional guidance, click the icon next to each task below for more information on how to complete each task. You can also check out the solution video for a detailed walkthrough.

What are Hands-on Labs

Hands-on Labs are real environments created by industry experts to help you learn. These environments help you gain knowledge and experience, practice without compromising your system, test without risk, destroy without fear, and let you learn from your mistakes. Hands-on Labs: practice your skills before delivering in the real world.

Get Started
Who’s going to be learning?

How many seats do you need?

  • $499 $399 USD per seat per year
  • Billed Annually
  • Renews in 12 months

Ready to accelerate learning?

For over 25 licenses, a member of our sales team will walk you through a custom tailored solution for your business.


$1,995.00

Checkout
Sign In
Welcome Back!
Thanks for reaching out!

You’ll hear from us shortly. In the meantime, why not check out what our customers have to say about ACG?