DEV Community

Strage
Strage

Posted on

Using Kubeadm for Kubernetes Cluster Initialization: A Step-by-Step Guide

Using Kubeadm for Kubernetes Cluster Initialization

Kubeadm is one of the most popular tools for setting up and initializing a Kubernetes cluster. It simplifies the process of creating a Kubernetes cluster by providing a set of commands for both master node and worker node initialization, as well as tools for managing the lifecycle of the cluster. Kubeadm is best suited for users who want to create a production-ready Kubernetes cluster and have some control over the components and configurations.

In this guide, we’ll walk through how to use Kubeadm to initialize a Kubernetes cluster and set up the essential components for a functional environment.


What is Kubeadm?

Kubeadm is a command-line tool provided by Kubernetes for the cluster initialization process. It automates the most important steps involved in setting up a Kubernetes cluster, such as:

  • Initializing the control plane (Master Node)
  • Installing and configuring kubelet and kube-proxy
  • Joining worker nodes to the cluster
  • Handling the cluster networking setup
  • Generating the necessary certificates and configuration files

Kubeadm does not install a full Kubernetes setup on its own (i.e., it does not provide high-level orchestration, networking, or dashboards). Instead, it is designed to initialize the base of the Kubernetes infrastructure, leaving the customization (such as networking, ingress, and monitoring) up to the user.


Prerequisites for Using Kubeadm

Before using Kubeadm to initialize your Kubernetes cluster, ensure that the following requirements are met:

  1. Operating System: Ubuntu, CentOS, or other Linux distributions (with a supported kernel version).
  2. Hardware Requirements:
    • At least 2 GB of RAM for the master node.
    • At least 1 CPU (for both the master and worker nodes).
  3. Dependencies:

    • Docker (or another container runtime) installed on all nodes.
    • Kubeadm, Kubelet, and Kubectl installed on all nodes.
    • Ensure that swap is disabled on all nodes. You can disable swap with:
     sudo swapoff -a
    

    And to make it permanent:

     sudo sed -i '/ swap / s/^/#/' /etc/fstab
    
  4. Networking: You will need to set up a networking solution (e.g., Flannel, Calico) to allow Pods across nodes to communicate.


Step-by-Step Guide to Initialize Kubernetes Using Kubeadm

1. Install Docker and Kubeadm Packages

First, ensure that Docker and Kubernetes components (kubeadm, kubelet, and kubectl) are installed on all nodes.

Install Docker:

sudo apt-get update
sudo apt-get install -y docker.io
Enter fullscreen mode Exit fullscreen mode

Install Kubeadm, Kubelet, and Kubectl:

sudo apt-get update && sudo apt-get install -y apt-transport-https
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee -a /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install -y kubeadm kubelet kubectl
Enter fullscreen mode Exit fullscreen mode

Verify the installation:

kubectl version --client
kubeadm version
Enter fullscreen mode Exit fullscreen mode

2. Disable Swap on All Nodes

Ensure that swap is disabled on both the master and worker nodes (this is a Kubernetes requirement).

sudo swapoff -a
Enter fullscreen mode Exit fullscreen mode

To disable swap permanently, modify the /etc/fstab file:

sudo sed -i '/ swap / s/^/#/' /etc/fstab
Enter fullscreen mode Exit fullscreen mode

3. Initialize the Kubernetes Master Node

On the master node, initialize the Kubernetes cluster using the kubeadm init command:

sudo kubeadm init --pod-network-cidr=10.244.0.0/16
Enter fullscreen mode Exit fullscreen mode
  • The --pod-network-cidr flag defines the CIDR block for Pod networking (this is necessary for certain network plugins like Flannel). If you're using a different network plugin, refer to its specific documentation for the appropriate CIDR.
  • The output will include a token that can be used to join worker nodes to the cluster, along with a kubeadm join command. Save this command for use on the worker nodes.

Example output:

kubeadm join <master-ip>:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>
Enter fullscreen mode Exit fullscreen mode

After initializing the master node, follow the steps below to set up kubectl and configure the cluster.

4. Set Up kubectl for Master Node Access

Run the following commands to configure kubectl on the master node so that you can interact with the cluster:

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
Enter fullscreen mode Exit fullscreen mode

Now verify the cluster status with kubectl:

kubectl get nodes
Enter fullscreen mode Exit fullscreen mode

You should see the master node listed as NotReady because there is no network plugin installed yet.

5. Install a Network Plugin

Before worker nodes can be joined, you must set up a network plugin. For this example, we’ll use Flannel, but other plugins like Calico or Weave Net can also be used.

To install Flannel:

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
Enter fullscreen mode Exit fullscreen mode

After applying the network plugin, check the status of the pods:

kubectl get pods --all-namespaces
Enter fullscreen mode Exit fullscreen mode

Ensure that the kube-flannel-ds pod is running in the kube-system namespace.

6. Join Worker Nodes to the Cluster

Now that the master node is initialized, you can join worker nodes using the kubeadm join command that was generated during the master node initialization.

On each worker node, run the command (replace the token and hash with the output from kubeadm init):

sudo kubeadm join <master-ip>:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>
Enter fullscreen mode Exit fullscreen mode

After the worker nodes join, verify the nodes in the cluster:

kubectl get nodes
Enter fullscreen mode Exit fullscreen mode

You should see both the master and worker nodes listed as Ready.

7. (Optional) Install a Kubernetes Dashboard

To manage your Kubernetes cluster via a web UI, you can install the Kubernetes Dashboard.

Run the following command to install it:

kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta8/aio/deploy/recommended.yaml
Enter fullscreen mode Exit fullscreen mode

Then create an admin user to access the dashboard:

kubectl apply -f dashboard-adminuser.yaml
Enter fullscreen mode Exit fullscreen mode

To access the dashboard, create a proxy:

kubectl proxy
Enter fullscreen mode Exit fullscreen mode

Then access the dashboard via:

http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/
Enter fullscreen mode Exit fullscreen mode

Conclusion

Using Kubeadm to initialize a Kubernetes cluster is an excellent choice for users who want control over the Kubernetes setup process. By following the steps outlined above, you can successfully set up a Kubernetes cluster with a master node, worker nodes, and a network plugin like Flannel for communication. Kubeadm helps automate many of the tedious aspects of cluster initialization, but it also gives you the flexibility to customize your environment and integrate different solutions.

Key Takeaways:

  • Kubeadm is used for initializing and managing Kubernetes clusters, including node joining and networking setup.
  • You need to set up a network plugin (like Flannel or Calico) to enable pod communication across nodes.
  • Disable swap and ensure that Kubernetes dependencies like kubeadm, kubelet, and kubectl are installed.
  • After the cluster is initialized, you can scale it by adding more worker nodes.

By following these steps, you’ll have a fully operational Kubernetes cluster up and running, ready for managing your containerized applications.

Top comments (0)