Kubernetes - On-Premise Deployment
Introduction
Deploying Kubernetes on-premises provides control over your infrastructure and can be tailored to meet specific security, compliance, and performance requirements. This guide provides an intermediate-level overview of how to deploy Kubernetes on-premises using kubeadm.
Key Points:
- On-premises deployment offers control and customization over your Kubernetes infrastructure.
- kubeadm is a tool that simplifies the deployment of Kubernetes clusters on-premises.
- This guide covers the installation and configuration of an on-premises Kubernetes cluster using kubeadm.
Prerequisites
Before you begin, ensure you have the following prerequisites:
- At least two physical or virtual machines running Linux (Ubuntu 20.04 is recommended).
- Each machine should have at least 2 CPUs, 2GB of RAM, and 10GB of free disk space.
- All machines should be able to communicate with each other over the network.
- Disable swap on all machines:
sudo swapoff -a
. - Install Docker on all machines. Follow the instructions here.
Installing kubeadm, kubelet, and kubectl
Install the necessary Kubernetes components on all machines:
# Update the apt package index and install packages needed to use the Kubernetes apt repository
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl
# Download the Google Cloud public signing key
sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
# Add the Kubernetes apt repository
echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
# Update apt package index, install kubelet, kubeadm and kubectl, and pin their version
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
Creating the Cluster
Initialize the Control Plane Node
Run the following commands on the control plane node (master node):
# Initialize the control plane
sudo kubeadm init --pod-network-cidr=192.168.0.0/16
# Set up the kubeconfig for the root user
sudo mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
Note the kubeadm join
command output by kubeadm init
. You will need this to join the worker nodes to the cluster.
Deploying a Pod Network
Deploy a pod network to enable communication between the pods. Here, we use Calico:
# Apply Calico manifest
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
Joining Worker Nodes
Run the following command on each worker node to join them to the cluster:
# Use the kubeadm join command output by kubeadm init on the control plane node
sudo kubeadm join : --token --discovery-token-ca-cert-hash sha256:
Verifying the Cluster
After joining the worker nodes, verify that all nodes are part of the cluster:
# List all nodes in the cluster
kubectl get nodes
You should see all the nodes listed as Ready
.
Deploying a Sample Application
To deploy a sample application, follow these steps:
# Create a deployment
kubectl create deployment hello-node --image=k8s.gcr.io/echoserver:1.4
# Expose the deployment as a service
kubectl expose deployment hello-node --type=NodePort --port=8080
# Get the URL of the service
kubectl get svc
You can access the sample application by opening the NodePort
provided in the service details.
Conclusion
Deploying Kubernetes on-premises using kubeadm provides control and customization over your Kubernetes infrastructure. By following the steps outlined in this guide, you can create an on-premises Kubernetes cluster, deploy applications, and explore Kubernetes features. This setup is suitable for both development and production environments.