Skip to content

Instantly share code, notes, and snippets.

@jon
Last active March 2, 2025 00:28
Show Gist options
  • Save jon/2c46e8f74f6e1acf566eb522daef281a to your computer and use it in GitHub Desktop.
Save jon/2c46e8f74f6e1acf566eb522daef281a to your computer and use it in GitHub Desktop.
Bootstrap Kubernetes-ready Node
#!/bin/bash
set -e
CONTAINERD_VERSION=${CONTAINERD_VERSION:-2.0.0}
RUNC_VERSION=${RUNC_VERSION:-1.2.5}
KUBERNETES_VERSION=${KUBERNETES_VERSION:-1.32}
INSTALL_PREFIX=${INSTALL_PREFIX:-/usr/local}
ARCH=$(uname -m |sed -e 's/x86_64/amd64/' -e 's/aarch64/arm64/')
cat <<EOF
Bootstrap config:
CONTAINERD_VERSION=${CONTAINERD_VERSION}
RUNC_VERSION=${RUNC_VERSION}
KUBERNETES_VERSION=${KUBERNETES_VERSION}
INSTALL_PREFIX=${INSTALL_PREFIX}
ARCH=${ARCH}
EOF
CONTAINERD_URL="https://github.com/containerd/containerd/releases/download/v${CONTAINERD_VERSION}/containerd-${CONTAINERD_VERSION}-linux-${ARCH}.tar.gz"
echo "Extracting ${CONTAINERD_URL} to ${INSTALL_PREFIX}"
curl -fsSL "${CONTAINERD_URL}" |tar xzf - -C "${INSTALL_PREFIX}"
mkdir -p /etc/containerd
containerd config default |sed -e 's/SystemdCgroup\W*=\W*false/SystemdCgroup = true/' >/etc/containerd/config.toml
echo "Enabling containerd by default"
mkdir -p "${INSTALL_PREFIX}/lib/systemd/system"
curl -fsSL "https://raw.githubusercontent.com/containerd/containerd/main/containerd.service" >"${INSTALL_PREFIX}/lib/systemd/system/containerd.service"
systemctl daemon-reload
systemctl enable --now containerd
RUNC_URL="https://github.com/opencontainers/runc/releases/download/v${RUNC_VERSION}/runc.${ARCH}"
echo "Installing ${RUNC_URL} to ${INSTALL_PREFIX}/bin/runc"
curl -fsSL "${RUNC_URL}" >"${INSTALL_PREFIX}/bin/runc"
chmod 755 "${INSTALL_PREFIX}/bin/runc"
echo "Disabling swap if enabled"
swapoff -a
sed -e 's,^[^#]\(.*\Wswap\W\),# \1,' /etc/fstab -i''
echo "Enabling IPv4 forwarding"
echo net.ipv4.ip_forward=1 >/etc/sysctl.d/99-ip_forward.conf
sysctl --system
echo "Installing Kubernetes components"
export DEBIAN_FRONTEND=noninteractive
apt-get update
apt-get install -yq apt-transport-https ca-certificates curl gpg
curl -fsSL https://pkgs.k8s.io/core:/stable:/v${KUBERNETES_VERSION}/deb/Release.key |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:/v${KUBERNETES_VERSION}/deb/ /" |tee /etc/apt/sources.list.d/kubernetes.list
apt-get update
apt-get install -y kubelet kubeadm kubectl kubernetes-cni
apt-mark hold kubelet kubeadm kubectl kubernetes-cni
systemctl enable --now kubelet
echo "You're ready to kubernetes (heh)."
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment