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/fstabInstall 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 kubeletInitialize 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 nodesInstall Network Plugin (Flannel)
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
# Verify
kubectl get pods -n kube-flannelCentOS/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/16Join 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 nodesService Management
# Master node
sudo systemctl restart kubelet
sudo systemctl status kubelet
# Check cluster health
kubectl get nodes
kubectl get pods --all-namespaces
kubectl cluster-infoTroubleshooting
# 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>