DocumentationKubernetesKubernetes

Kubernetes

Kubernetes is an open-source container orchestration platform for automating deployment, scaling, and management of containerized applications.

Installation

Ubuntu/Debian

Prerequisites

# Update system
sudo apt update && sudo apt upgrade -y
 
# Install Docker (required)
sudo apt install docker.io -y
sudo usermod -aG docker $USER
newgrp docker
 
# Disable swap (required for Kubernetes)
sudo swapoff -a
sudo sed -i '/ swap / s/^/#/' /etc/fstab

Install Kubernetes Components

# Add Kubernetes repository
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.28/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.28/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
 
# Install kubelet, kubeadm, kubectl
sudo apt update
sudo apt install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
 
# Enable kubelet
sudo systemctl enable kubelet
sudo systemctl start kubelet

Initialize Master Node

# Initialize cluster
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
 
# Setup kubeconfig
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
 
# Verify cluster
kubectl cluster-info
kubectl get nodes

Install Network Plugin (Flannel)

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
 
# Verify
kubectl get pods -n kube-flannel

CentOS/RHEL

# Disable SELinux
sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config
 
# Add Kubernetes repository
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.28/rpm/
enabled=1
gpgcheck=1
EOF
 
# Install
sudo yum install -y kubelet kubeadm kubectl
sudo systemctl enable kubelet
sudo systemctl start kubelet
 
# Initialize
sudo kubeadm init --pod-network-cidr=10.244.0.0/16

Join Worker Nodes

# On master, get join command
kubeadm token create --print-join-command
 
# On worker node
sudo kubeadm join <master-ip>:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>
 
# Verify
kubectl get nodes

Service Management

# Master node
sudo systemctl restart kubelet
sudo systemctl status kubelet
 
# Check cluster health
kubectl get nodes
kubectl get pods --all-namespaces
kubectl cluster-info

Troubleshooting

# Check node status
kubectl describe node <node-name>
 
# Check pod logs
kubectl logs <pod-name> -n <namespace>
 
# Check kubelet logs
sudo journalctl -u kubelet -f
 
# Drain node for maintenance
kubectl drain <node-name> --ignore-daemonsets
 
# Uncordon node
kubectl uncordon <node-name>