Skip to content

Instantly share code, notes, and snippets.

@jon
Last active June 2, 2024 05:02
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:-1.6.32}
RUNC_VERSION=${RUNC_VERSION:-1.1.12}
CNI_PLUGINS_VERSION=${CNI_PLUGINS_VERSION:-1.5.0}
KUBERNETES_VERSION=${KUBERNETES_VERSION:-1.30}
INSTALL_PREFIX=${INSTALL_PREFIX:-/usr/local}
CNI_BIN=${CNI_BIN:-/opt/cni/bin}
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}
CNI_PLUGINS_VERSION=${CNI_PLUGINS_VERSION}
KUBERNETES_VERSION=${KUBERNETES_VERSION}
INSTALL_PREFIX=${INSTALL_PREFIX}
CNI_BIN=${CNI_BIN}
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"
CNI_URL="https://github.com/containernetworking/plugins/releases/download/v${CNI_PLUGINS_VERSION}/cni-plugins-linux-${ARCH}-v${CNI_PLUGINS_VERSION}.tgz"
echo "Extracting ${CNI_URL} to ${CNI_BIN}"
mkdir -p "${CNI_BIN}"
curl -fsSL "${CNI_URL}" |tar xzf - -C "${CNI_BIN}"
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:/v1.30/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:/v1.30/deb/ /' |tee /etc/apt/sources.list.d/kubernetes.list
apt-get update
apt-get install -y kubelet kubeadm kubectl
apt-mark hold kubelet kubeadm kubectl
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