Skip to content

Instantly share code, notes, and snippets.

@Kuzyashin
Last active February 3, 2023 14:12
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Kuzyashin/717788488a9ab5c2d354ade8cbc4759f to your computer and use it in GitHub Desktop.
Save Kuzyashin/717788488a9ab5c2d354ade8cbc4759f to your computer and use it in GitHub Desktop.
#!/bin/bash
export DEBIAN_FRONTEND="noninteractive"
export KUBERNETES_VERSION="1.24.10-00"
export DPKG_LOCK_TIMOUT="-1"
#############################################
# Update && upgrade && install docker.io #
#############################################
sudo apt-get update && sudo apt-get upgrade -y
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install -y containerd.io
sudo mkdir -p /etc/containerd
sudo containerd config default | sudo tee /etc/containerd/config.toml
echo "SystemdCgroup = true" >> /etc/containerd/config.toml
sudo systemctl restart containerd
#############################################
# Disable UFW cause of Problems with Docker #
#############################################
echo '> Disable ufw and purge iptables ...'
sudo systemctl stop ufw.service
sudo systemctl disable ufw.service
sudo iptables -F
########################################
# Letting iptables see bridged traffic #
########################################
echo '> Letting iptables see bridged traffic ...'
test -e /etc/modules-load.d/k8s.conf || cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
test -e /etc/sysctl.d/k8s.conf || cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
sudo modprobe br_netfilter
sudo modprobe overlay
sudo sysctl --system
#################################################################
# Installs packages needed to use the Kubernetes apt repository #
#################################################################
echo '> Installs packages needed to use the Kubernetes apt repository ...'
sudo apt-get -o DPkg::Lock::Timeout=${DPKG_LOCK_TIMOUT} update
sudo apt-get -o DPkg::Lock::Timeout=${DPKG_LOCK_TIMOUT} install -y apt-transport-https ca-certificates curl gnupg lsb-release
#################
# Install Docker#
#################
echo '> Configure Docker ...'
sudo test -d /etc/docker || sudo mkdir /etc/docker
sudo cat <<EOF | sudo tee /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
EOF
##############################
## Set up stable repository ##
##############################
echo '> Set up stable Docker repository ...'
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
####################################
## Add Docker’s official GPG key: ##
####################################
sudo test -e /usr/share/keyrings/docker-archive-keyring.gpg || curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
################################
# Update the apt package index #
################################
echo '> Update the apt package index ...'
sudo apt-get -o DPkg::Lock::Timeout=${DPKG_LOCK_TIMOUT} update
###########################
## Install Docker Engine ##
##########################
echo '> Install Docker Engine ...'
sudo apt-get -o Dpkg::Options::='--force-confdef' -o Dpkg::Options::='--force-confold' -o DPkg::Lock::Timeout=${DPKG_LOCK_TIMOUT} install -y docker-ce docker-ce-cli containerd.io
#############################
## Start and enable Docker ##
#############################
echo '> Start and enable Docker ...'
sudo systemctl enable docker
sudo systemctl daemon-reload
sudo systemctl restart docker
################
# Disable SWAP #
################
echo '> Disable SWAP ...'
sudo sed -i~ /swap/d /etc/fstab
#####################
# Configure Kubelet #
#####################
sudo test -d /etc/systemd/system/kubelet.service.d || sudo mkdir /etc/systemd/system/kubelet.service.d
sudo test -e /etc/systemd/system/kubelet.service.d/20-hcloud.conf || sudo cat > /etc/systemd/system/kubelet.service.d/20-hcloud.conf <<EOF
[Service]
Environment="KUBELET_EXTRA_ARGS=--cloud-provider=external"
EOF
###################################################
# Install Kubeadm Kubectl & Kubelet #
###################################################
## Download the Google Cloud public signing key: ##
###################################################
sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
########################################
## Add the Kubernetes apt repository: ##
########################################
echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
############################################################################################
## Update apt package index, install kubelet, kubeadm and kubectl, and pin their version: ##
############################################################################################
sudo apt-get -o DPkg::Lock::Timeout=${DPKG_LOCK_TIMOUT} update
sudo apt-get -o DPkg::Lock::Timeout=${DPKG_LOCK_TIMOUT} install -y kubelet=${KUBERNETES_VERSION} kubeadm=${KUBERNETES_VERSION} kubectl=${KUBERNETES_VERSION}
sudo apt-mark -o DPkg::Lock::Timeout=${DPKG_LOCK_TIMOUT} hold kubelet kubeadm kubectl
####################
## Enable Kubelet ##
####################
sudo systemctl enable --now kubelet
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment