#!/bin/sh # Source: https://kubernetes.io/docs/reference/setup-tools/kubeadm KUBE_VERSION=1.35.0 set -e ### verify Ubuntu version source /etc/lsb-release if [ "$DISTRIB_RELEASE" != "24.04" ]; then echo "################################# " echo "############ WARNING ############ " echo "################################# " echo echo "This script only works on Ubuntu 24.04!" echo "You're using: ${DISTRIB_DESCRIPTION}" echo "Better ABORT with Ctrl+C. Or press any key to continue the install" read fi ### get platform PLATFORM=`uname -p` if [ "${PLATFORM}" == "aarch64" ]; then PLATFORM="arm64" elif [ "${PLATFORM}" == "x86_64" ]; then PLATFORM="amd64" else echo "${PLATFORM} has to be either amd64 or arm64/aarch64. Check containerd supported binaries page" echo "https://github.com/containerd/containerd/blob/main/docs/getting-started.md#option-1-from-the-official-binaries" exit 1 fi ### set hostname to the first part before the first dot short_hostname=$(hostname | cut -d. -f1) hostnamectl set-hostname "$short_hostname" ### setup terminal apt-get --allow-unauthenticated update apt-get --allow-unauthenticated install -y bash-completion binutils echo 'colorscheme ron' >> ~/.vimrc echo 'set tabstop=2' >> ~/.vimrc echo 'set shiftwidth=2' >> ~/.vimrc echo 'set expandtab' >> ~/.vimrc echo 'source <(kubectl completion bash)' >> ~/.bashrc echo 'alias k=kubectl' >> ~/.bashrc echo 'alias c=clear' >> ~/.bashrc echo 'complete -F __start_kubectl k' >> ~/.bashrc sed -i '1s/^/force_color_prompt=yes\n/' ~/.bashrc ### disable linux swap and remove any existing swap partitions swapoff -a sed -i '/\sswap\s/ s/^\(.*\)$/#\1/g' /etc/fstab ### remove packages kubeadm reset -f || true crictl rm --force $(crictl ps -a -q) || true apt-mark unhold kubelet kubeadm kubectl kubernetes-cni || true apt-get remove -y docker.io containerd kubelet kubeadm kubectl kubernetes-cni || true apt-get autoremove -y systemctl daemon-reload ### install podman . /etc/os-release sudo apt-get update sudo apt-get -y install podman cat > /etc/containers/registries.conf < /etc/apt/sources.list.d/kubernetes.list echo "deb [signed-by=/etc/apt/keyrings/kubernetes-1-35-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.35/deb/ /" | sudo tee -a /etc/apt/sources.list.d/kubernetes.list echo "deb [signed-by=/etc/apt/keyrings/kubernetes-1-34-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.34/deb/ /" | sudo tee -a /etc/apt/sources.list.d/kubernetes.list apt-get --allow-unauthenticated update apt-get --allow-unauthenticated install -y containerd kubelet=${KUBE_VERSION}-1.1 kubeadm=${KUBE_VERSION}-1.1 kubectl=${KUBE_VERSION}-1.1 kubernetes-cni ### configure containerd cat < /etc/containerd/config.toml < /dev/null 2>&1 || true service apparmor stop > /dev/null 2>&1 || true systemctl disable appamor > /dev/null 2>&1 || true apt-get remove -y apparmor > /dev/null 2>&1 || true ### start services systemctl daemon-reload systemctl enable containerd systemctl restart containerd systemctl enable kubelet && systemctl start kubelet ### init k8s rm /root/.kube/config || true kubeadm init --kubernetes-version=${KUBE_VERSION} --ignore-preflight-errors=NumCPU --skip-token-print --pod-network-cidr 192.168.0.0/16 mkdir -p ~/.kube sudo cp -i /etc/kubernetes/admin.conf ~/.kube/config ### CNI kubectl apply -f https://raw.githubusercontent.com/killer-sh/cks-course-environment/master/cluster-setup/weave.yaml echo "Waiting for weave-net to be ready..." sleep 10 kubectl -n kube-system wait --for=condition=Ready pod -l name=weave-net --timeout=3600s sleep 5 kubectl -n kube-system delete pods -l k8s-app=kube-dns --force --grace-period 0 echo "Waiting for weave-net to be ready... done" ### finished echo echo "### COMMAND TO ADD A WORKER NODE ###" kubeadm token create --print-join-command --ttl 0