# KUBERNETES CLUSTER ---- ## Setting UP the Cluster --- 1. Update and Upgrade all packages ```bash sudo apt-get update && sudo apt-get upgrade ``` 2. Disable swap for the kubelet to work properly ```bash swapoff -a # To verify sudo cat /etc/fstab # To permanently swapoff sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab ``` 3. Configuring Container Runtime To run containers in Pods, Kubernetes uses a container runtime.We will use containerd, so we need to install it on each cluster node. ```bash # Write overlay and br_netfilter cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf overlay br_netfilter EOF ``` ```bash # Load the modul sudo modprobe overlay sudo modprobe br_netfilter # Manage network in kubernetes cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-ip6tables = 1 net.ipv4.ip_forward = 1 EOF ``` ```bash # Apply sysctl without reboot sudo sysctl --system ``` 4. Install container runtime with Dokcer ```bash # Install packages sudo apt-get update sudo apt-get install \ apt-transport-https \ ca-certificates \ curl \ gnupg \ lsb-release # Add Docker’s official GPG key sudo mkdir -p /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg # Set up the repository echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null # Update again and install `containerd.io` sudo apt-get update sudo apt-get install containerd.io # Download CNI Plugins mkdir -p /opt/cni/bin wget https://github.com/containernetworking/plugins/releases/download/v1.1.1/cni-plugins-linux-amd64-v1.1.1.tgz # Archive or combining files tar Cxzvf /opt/cni/bin cni-plugins-linux-amd64-v1.1.1.tgz ``` ```bash # Configuring the systemd cgroup driver sudo nano /etc/containerd/config.toml # Enable the cni plugin by commenting out the line below # with `#` we can activate the CRI #Find line disabled_plugins = ["cri"] and commenting with `#` # And then we want to use systemd as a cgroup driver [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc] [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options] SystemdCgroup = true # Make it True ``` ```bash # restart containerd service sudo systemctl restart containerd sudo systemctl enable containerd ``` 5. Install kubeadm, kubelet, and kubectl Using `kubeadm` to set up cluster that conforms the best practices. ```bash # Download the Google Cloud public signing key curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.30/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg # Add the Kubernetes apt repository echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.30/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list ``` ```bash # Update apt package index, install kubelet, kubeadm and kubectl sudo apt-get update sudo apt-get install -y kubelet kubeadm kubectl sudo apt-mark hold kubelet kubeadm kubectl # Pull images that needed by `kubeadm` sudo kubeadm config images pull ``` 5. Initiate cluster ```bash # change the `192.168.22.132` with ur IP VM sudo kubeadm init \ --apiserver-advertise-address 192.168.111.132 \ --control-plane-endpoint 192.168.111.132 \ --pod-network-cidr 10.244.0.0/16 ``` 6. We use calico for the plugin (Or u can use another plugin, has to match the plugin with ur network server) ```bash kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.28.1/manifests/calico.yaml ``` ## How the worker can join to the cluster 1. Set up like the master node, but u dont need to initialize the cluster 2. After set up u can join with this command : ```bash sudo kubeadm join <IP master>:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash> ``` 3. Command to print out the token of master node ```bash kubeadm token create --print-join-command ``` ```bash kubeadm join 192.168.1.161:6443 --token eb64r4.cb5jz3vr7my06jum --discovery-token-ca-cert-hash sha256:b22ebf3b6544a154475a36b2a09c45616da3756d5de4a0670bc54e756de4206d ``` ref : https://github.com/sandyxd18/Kubernetes-script/blob/main/kube-install.sh