Bootstrapping a cluster locally
Installing kubeadm
Pre-check
Check OS versions. https://kubernetes.io/docs/reference/node/kernel-version-requirements/
Verify the MAC address and product_uuid are unique for every node.
ip link or ifconfig -a
sudo cat /sys/class/dmi/id/product_uuid
Check required ports: https://kubernetes.io/docs/reference/networking/ports-and-protocols/
Swap configuration: swap should either be disabled or tolerated by kubelet
Installing a container runtime
Become root firstly
sudo su
Containerd
Well, let’s just use containerd. Instruction https://github.com/containerd/containerd/blob/main/docs/getting-started.md
Download and extract containerd binary (double check version).
sudo su
wget https://github.com/containerd/containerd/releases/download/v2.3.0/containerd-2.3.0-linux-amd64.tar.gz
tar Cxzvf /usr/local containerd-2.3.0-linux-amd64.tar.gz
Start via systemd.
wget -P /usr/local/lib/systemd/system/ https://raw.githubusercontent.com/containerd/containerd/main/containerd.service
systemctl daemon-reload
systemctl enable --now containerd
systemctl status containerd
Runc
Download and install runc.
wget -P . https://github.com/opencontainers/runc/releases/download/v1.5.0-rc.2/runc.amd64
install -m 755 runc.amd64 /usr/local/sbin.runc
CNI Plugins
wget https://github.com/containernetworking/plugins/releases/download/v1.9.1/cni-plugins-linux-amd64-v1.9.1.tgz
mkdir -p /opt/cni/bin
tar Cxzvf /opt/cni/bin cni-plugins-linux-amd64-v1.9.1.tgz
(Optional) nerdctl for interacting with containerd via CLI
wget https://github.com/containerd/nerdctl/releases/download/v2.3.0/nerdctl-2.3.0-linux-amd64.tar.gz
tar Cxzvvf /usr/local/bin nerdctl-2.3.0-linux-amd64.tar.gz
Generate containerd config
mkdir -p /etc/containerd/
containerd config default > /etc/containerd/config.toml
Enable IPv4 packet forwarding
cat << EOF | tee /etc/sysctl.d/k8s.conf
net.ipv4.ip_forward = 1
EOF
sudo sysctl --system
Verify.
sysctl net.ipv4.ip_forward
Choose cgroup drivers
sed -i 's/SystemdCgroup = false/SystemdCgroup = true/g' /etc/containerd/config.toml
systemctl restart containerd
Installing kubeadm, kubelet and kubectl
DOWNLOAD_DIR="/usr/local/bin"
mkdir -p "$DOWNLOAD_DIR"
CRICTL_VERSION="v1.31.0"
ARCH="amd64"
curl -L "https://github.com/kubernetes-sigs/cri-tools/releases/download/${CRICTL_VERSION}/crictl-${CRICTL_VERSION}-linux-${ARCH}.tar.gz" | sudo tar -C $DOWNLOAD_DIR -xz
RELEASE="$(curl -sSL https://dl.k8s.io/release/stable.txt)"
ARCH="amd64"
cd $DOWNLOAD_DIR
sudo curl -L --remote-name-all https://dl.k8s.io/release/${RELEASE}/bin/linux/${ARCH}/{kubeadm,kubelet}
chmod +x {kubeadm,kubelet}
RELEASE_VERSION="v0.16.2"
curl -sSL "https://raw.githubusercontent.com/kubernetes/release/${RELEASE_VERSION}/cmd/krel/templates/latest/kubelet/kubelet.service" | sed "s:/usr/bin:${DOWNLOAD_DIR}:g" | sudo tee /usr/lib/systemd/system/kubelet.service
mkdir -p /usr/lib/systemd/system/kubelet.service.d
curl -sSL "https://raw.githubusercontent.com/kubernetes/release/${RELEASE_VERSION}/cmd/krel/templates/latest/kubeadm/10-kubeadm.conf" | sed "s:/usr/bin:${DOWNLOAD_DIR}:g" | sudo tee /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf
sudo systemctl enable --now kubelet