#!/usr/bin/env bash if [ "$EUID" -ne 0 ]; then echo "Please run as root." exit fi TIMEOUT=300 SLEEP_INTERVAL=1 # Remove all older packages. apt-get -y remove docker docker-engine docker.io containerd runc kubeadm kubelet kubectl # Install docker. apt-get update -y apt-get install -y apt-transport-https ca-certificates curl gnupg-agent software-properties-common openssh-server apt-transport-https curl curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) \ stable" apt-get update -y apt-get install docker-ce docker-ce-cli containerd.io -y docker_status=`systemctl status docker | grep "running" | wc -l` echo "$docker_status" if [ $docker_status == 1 ]; then echo "Docker installed and running .." else echo "Docker installed but not running.." fi mkdir -p /etc/docker cat < /etc/docker/daemon.json { "exec-opts": ["native.cgroupdriver=systemd"] } EOF systemctl restart docker sleep 10 cgroup_driver_status=`docker info | grep -i "Cgroup Driver" | grep systemd | wc -l` if [ $cgroup_driver_status == 1 ]; then echo "Docker cgroup driver is updated to systemd" else echo "Failed to update docker cgroup driver is updated to systemd" exit 1 fi # Disable Swap Permanently. swapoff -a # Disable all devices marked as swap in /etc/fstab. sed -e '/swap/ s/^#*/#/' -i /etc/fstab # Comment the correct mounting point. systemctl mask swap.target # Completely disabled. # SELinux is not default on Ubuntu, but disable if present if command -v setenforce >/dev/null 2>&1; then setenforce 0 sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config fi # Ubuntu uses ufw, not firewalld by default if systemctl is-enabled ufw >/dev/null 2>&1; then ufw disable systemctl status ufw else echo "UFW not enabled, skipping firewall disable" fi # Containerd needs to be configured to use systemd cgroup driver to align with kubelet's cgroup management. # The SystemdCgroup setting tells containerd to use systemd to manage container cgroups instead of cgroupfs. mkdir -p /etc/containerd containerd config default | tee /etc/containerd/config.toml > /dev/null sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml systemctl restart containerd # Load necessary kernel modules. modprobe overlay modprobe br_netfilter # Make kernel modules persistent cat < /etc/modules-load.d/k8s.conf overlay br_netfilter EOF # Set required sysctl parameters. cat <