===== Kubernetes >= 1.24 ===== ====Install Packages==== ===cri-o==== https://cri-o.io/ Install cri-o packages (on Ubuntu 20.04 LTS): #!/bin/bash #author: Thomas Roehm #version: 1.0 export VERSION=1.25 #must match k8s version export OS="xUbuntu_20.04" #must match os version echo 'deb http://deb.debian.org/debian buster-backports main' > /etc/apt/sources.list.d/backports.list apt update apt install -y -t buster-backports libseccomp2 || apt update -y -t buster-backports libseccomp2 echo "" echo "deb [signed-by=/usr/share/keyrings/libcontainers-archive-keyring.gpg] https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/ /" > /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list echo "deb [signed-by=/usr/share/keyrings/libcontainers-crio-archive-keyring.gpg] https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable:/cri-o:/$VERSION/$OS/ /" > /etc/apt/sources.list.d/devel:kubic:libcontainers:stable:cri-o:$VERSION.list echo "" echo "Install repositories" echo "" mkdir -p /usr/share/keyrings curl -L https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/Release.key | gpg --dearmor -o /usr/share/keyrings/libcontainers-archive-keyring.gpg curl -L https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable:/cri-o:/$VERSION/$OS/Release.key | gpg --dearmor -o /usr/share/keyrings/libcontainers-crio-archive-keyring.gpg echo "" echo "Install cri-o" echo "" apt-get update apt-get install cri-o cri-o-runc cri-tools systemctl enable crio.service systemctl start crio.service systemctl status crio.service === kubernetes === Install kubernetes packages (on Ubuntu 20.04 LTS): #!/bin/bash #author: tmade #version: 1.0 RELEASE=$(lsb_release -cs) echo "" echo "check k8s installation:" dpkg -l |grep kube* KUBEINSTALL=$(echo $?) echo "" if [ ${KUBEINSTALL} -eq "0" ] then echo "k8s already installed" else echo "Installing k8s repository..." curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - #echo "deb http://apt.kubernetes.io/ kubernetes-${RELEASE} main" | sudo tee /etc/apt/sources.list.d/kubernetes.list echo "deb http://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list fi echo "" apt-get update apt-mark unhold kubernetes-cni kubeadm kubelet kubectl echo "" echo "Up- or downgrade k8s packages" echo "" apt-cache policy kubeadm | head -n 30 echo "" read -p "Please enter the k8s version you want to install (e. g. \"1.16.4-00\"): " VERSION echo "Version: \"${VERSION}\" will be installed!" echo "" apt-get install -y kubeadm=${VERSION} kubelet=${VERSION} kubectl=${VERSION} --allow-downgrades echo "" apt-mark hold kubelet kubeadm kubectl echo "" echo "k8s packages are installed!" echo "" ====Setup==== Setup k8s with cri-o (has to be installed previously): #!/bin/bash #author: Thomas Roehm #version: 1.0 USER="kubernetes" HOME="/home/${USER}" KUBEHOME="${HOME}/.kube" #CIDR="10.0.0.5" PODNETWORKADDON="192.168.0.0/16" echo "" echo "Setup -------------k8s--------------" echo "" su - kubernetes -c "kubectl version 2> /dev/null" echo "" su - kubernetes -c "read -s -n 1 -p \"Press any key to continue . . .\"" apt-get update apt-cache policy kubeadm | head -n 30 #apt-cache policy docker-ce echo "" read -p "Please enter k8s version you want to install (e. g. \"1.16.4-00\"): " VERSION echo "Version: \"$VERSION\" will be installed!" apt-mark unhold kubernetes-cni kubeadm kubelet kubectl docker-ce #apt-mark unhold kubernetes-cni kubeadm kubelet kubectl docker-ce apt-get install -y kubeadm=${VERSION} kubelet=${VERSION} kubectl=${VERSION} echo "" read -p "Please enter your CIDR management ip-adress for your master (e. g. \"10.6.33.10\"): " CIDR echo "" echo "ip set to: \"$CIDR\"" echo "" kubeadm init --apiserver-advertise-address=${CIDR} --pod-network-cidr=${PODNETWORKADDON} --cri-socket=unix:///var/run/crio/crio.sock echo "" read -s -n 1 -p "Press any key to continue . . ." echo "" if [ -e ${KUBEHOME} ] then echo "\"${KUBEHOME}\" exists" read -p "Do you want to delete \"${KUBEHOME}\"? Please enter y (proceed) or n (stop): " PROCEED echo "You´ve entered: \"$PROCEED\"" echo "" if [ $PROCEED = y ] then rm -r ${KUBEHOME} echo "\"${KUBEHOME}\" deleted!" echo "" read -s -n 1 -p "Press any key to continue . . ." else exit 1 fi fi su - ${USER} -c "mkdir -p $HOME/.kube" su - ${USER} -c "sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config" chown -R ${USER}:${USER} $HOME/.kube echo "" echo "home \"$HOME/.kube\" copied!" echo "" read -s -n 1 -p "Press any key to continue . . ." #calico pod-network-addon kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.24.3/manifests/tigera-operator.yaml kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.24.3/manifests/custom-resources.yaml echo "calico pod network add on has been deployed" echo "" read -s -n 1 -p "Press any key to continue . . ." apt-mark hold kubernetes-cni kubeadm kubelet kubectl docker-ce echo "" while [ -z $SCHEDULE ] ; do read -p "Do you want to schedule pods on your master? Please enter \"y\" or \"n\": " SCHEDULE echo "Please enter \"y\" or \"n\"" done echo "" echo "You´ve entered: \"$SCHEDULE\"" echo "" if [ $SCHEDULE = y ] then kubectl taint node $(hostname) node-role.kubernetes.io/control-plane:NoSchedule fi echo "" echo "Status - please press \"ctrl + c\" when all pods are running" echo "" watch kubectl get pods -A -o wide