Last active
August 1, 2023 01:51
-
-
Save crazytaxii/802a5dc93d6a0cc2cb606709b2ac0d16 to your computer and use it in GitHub Desktop.
Preparing for installing kubeadm.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
set -e | |
CNI_VERSION="v1.3.0" | |
ARCH="amd64" | |
CRICTL_VERSION="v1.27.1" | |
setup_color() { | |
# Only use colors if connected to a terminal | |
if ! is_tty; then | |
FMT_RAINBOW="" | |
FMT_RED="" | |
FMT_GREEN="" | |
FMT_YELLOW="" | |
FMT_BLUE="" | |
FMT_BOLD="" | |
FMT_RESET="" | |
return | |
fi | |
if supports_truecolor; then | |
FMT_RAINBOW=" | |
$(printf '\033[38;2;255;0;0m') | |
$(printf '\033[38;2;255;97;0m') | |
$(printf '\033[38;2;247;255;0m') | |
$(printf '\033[38;2;0;255;30m') | |
$(printf '\033[38;2;77;0;255m') | |
$(printf '\033[38;2;168;0;255m') | |
$(printf '\033[38;2;245;0;172m') | |
" | |
else | |
FMT_RAINBOW=" | |
$(printf '\033[38;5;196m') | |
$(printf '\033[38;5;202m') | |
$(printf '\033[38;5;226m') | |
$(printf '\033[38;5;082m') | |
$(printf '\033[38;5;021m') | |
$(printf '\033[38;5;093m') | |
$(printf '\033[38;5;163m') | |
" | |
fi | |
FMT_RED=$(printf '\033[31m') | |
FMT_GREEN=$(printf '\033[32m') | |
FMT_YELLOW=$(printf '\033[33m') | |
FMT_BLUE=$(printf '\033[34m') | |
FMT_BOLD=$(printf '\033[1m') | |
FMT_RESET=$(printf '\033[0m') | |
} | |
install_container_runtime() { | |
echo "${FMT_GREEN}Installing containerd...${FMT_RESET}" | |
sudo yum install -y yum-utils device-mapper-persistent-data lvm2 | |
sudo yum-config-manager \ | |
--add-repo \ | |
https://download.docker.com/linux/centos/docker-ce.repo | |
sudo yum install containerd.io -y | |
# Configure containerd | |
sudo mkdir -p /etc/containerd | |
sudo containerd config default > /etc/containerd/config.toml | |
# Use systemd as cgroup driver | |
sed -i 's/SystemdCgroup = false/SystemdCgroup = true/g' /etc/containerd/config.toml | |
sudo systemctl is-active --quiet containerd || sudo systemctl start containerd | |
sudo systemctl is-enabled --quiet containerd || sudo systemctl enable containerd | |
} | |
install_dep() { | |
# socat | |
echo "${FMT_GREEN}Installing socat...${FMT_RESET}" | |
sudo yum install -y socat | |
# tc | |
echo "${FMT_GREEN}Installing tc...${FMT_RESET}" | |
sudo yum install -y iproute-tc | |
# conntrack | |
echo "${FMT_GREEN}Installing conntrack...${FMT_RESET}" | |
sudo yum install -y conntrack | |
# CNI plugins | |
echo "${FMT_GREEN}Installing CNI plugins...${FMT_RESET}" | |
sudo mkdir -p /opt/cni/bin | |
sudo curl -L "https://github.com/containernetworking/plugins/releases/download/${CNI_VERSION}/cni-plugins-linux-${ARCH}-${CNI_VERSION}.tgz" | sudo tar -C /opt/cni/bin -xz | |
DOWNLOAD_DIR=/usr/local/bin | |
sudo mkdir -p $DOWNLOAD_DIR | |
echo "${FMT_GREEN}Installing crictl...${FMT_RESET}" | |
# crictl | |
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 | |
# kubeadm kubelet kubectl | |
RELEASE=$1 | |
if [ -z $RELEASE ]; then | |
RELEASE="$(curl -sSL https://dl.k8s.io/release/stable.txt)" | |
fi | |
echo "${FMT_GREEN}Installing kubeadm, kubelet and kubectl...${FMT_RESET}" | |
pushd $DOWNLOAD_DIR | |
sudo curl -L --remote-name-all https://storage.googleapis.com/kubernetes-release/release/${RELEASE}/bin/linux/${ARCH}/{kubeadm,kubelet,kubectl} | |
sudo chmod +x {kubeadm,kubelet,kubectl} | |
popd | |
RELEASE_VERSION="v0.4.0" | |
curl -sSL "https://raw.githubusercontent.com/kubernetes/release/${RELEASE_VERSION}/cmd/kubepkg/templates/latest/deb/kubelet/lib/systemd/system/kubelet.service" | sed "s:/usr/bin:${DOWNLOAD_DIR}:g" | sudo tee /etc/systemd/system/kubelet.service | |
sudo mkdir -p /etc/systemd/system/kubelet.service.d | |
curl -sSL "https://raw.githubusercontent.com/kubernetes/release/${RELEASE_VERSION}/cmd/kubepkg/templates/latest/deb/kubeadm/10-kubeadm.conf" | sed "s:/usr/bin:${DOWNLOAD_DIR}:g" | sudo tee /etc/systemd/system/kubelet.service.d/10-kubeadm.conf | |
sudo systemctl is-enabled --quiet kubelet || sudo systemctl enable kubelet | |
} | |
os_config() { | |
# Disable SELinux | |
if [ "$(getenforce)" != "Disabled" ]; then | |
echo "${FMT_GREEN}Disabling SELinux...${FMT_RESET}" | |
sudo setenforce 0 | |
sed -i "s/^SELINUX=.*$/SELINUX=disabled/g" /etc/selinux/config | |
fi | |
# Disable swap | |
if [ $(cat /proc/swaps | wc -l) -eq 2 ]; then | |
echo "${FMT_GREEN}Disabling swap...${FMT_RESET}" | |
sudo swapoff -a | |
sed -i "/ swap / s/^/#/" /etc/fstab | |
fi | |
} | |
br_netfilter() { | |
cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf | |
overlay | |
br_netfilter | |
EOF | |
sudo modprobe overlay | |
sudo modprobe br_netfilter | |
# Setup required sysctl params, these persist across reboots. | |
cat <<EOF | sudo tee /etc/sysctl.d/99-kubernetes-cri.conf | |
net.bridge.bridge-nf-call-iptables = 1 | |
net.ipv4.ip_forward = 1 | |
net.bridge.bridge-nf-call-ip6tables = 1 | |
EOF | |
sudo sysctl --system | |
} | |
main() { | |
setup_color | |
if [[ $(systemctl cat firewalld.service > /dev/null 2>&1) -eq 0 ]]; then | |
sudo systemctl is-active --quiet firewalld && sudo systemctl stop firewalld | |
sudo systemctl is-enabled --quiet firewalld && sudo systemctl disable firewalld | |
fi | |
if [[ $(uname -p) == "aarch64" ]]; then | |
ARCH="aarch64" | |
fi | |
sudo yum update -y | |
br_netfilter | |
install_container_runtime | |
install_dep $1 | |
os_config | |
} | |
main "$@" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
sh -c "$(curl -fssL https://gist.githubusercontent.com/crazytaxii/802a5dc93d6a0cc2cb606709b2ac0d16/raw/40febedde7c6f2a5d1e183f5ce08171524b5e747/kubeadm-prerequisites.sh)"