#/bin/bash # This script is to install Kubernetes on Ubuntu 22.04 LTS, with Calico as CNI # This script used 10.244.0.0/16 as pod network CIDR. This network should not be used in your physical network. # This script used Calico v3.27.0. You can change it to the latest version. # Reference: https://www.cherryservers.com/blog/install-kubernetes-on-ubuntu DEBIAN_FRONTEND=noninteractive sudo apt update DEBIAN_FRONTEND=noninteractive sudo apt install curl gnupg2 software-properties-common apt-transport-https ca-certificates -y echo "Disable swap..." sudo swapoff -a sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab echo "Uninstall Docker.ce..." aiur() { arg="$( cut -d ' ' -f 2- <<< "$@" )" && curl -sL https://gitlab.aiursoft.cn/aiursoft/aiurscript/-/raw/master/$1.sh | sudo bash -s $arg; } aiur uninstall/docker sudo apt autoremove -y echo "Install Docker.io..." DEBIAN_FRONTEND=noninteractive sudo apt install docker.io -y echo "Prepare network..." cat < /dev/null 2>&1 sudo sh -c "containerd config default > /etc/containerd/config.toml" sudo sed -i 's/ SystemdCgroup = false/ SystemdCgroup = true/' /etc/containerd/config.toml sudo systemctl restart containerd.service sudo systemctl restart kubelet.service > /dev/null 2>&1 echo "Install K8S..." curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes.gpg --yes echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/kubernetes.gpg] http://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee -a /etc/apt/sources.list sudo apt update DEBIAN_FRONTEND=noninteractive sudo apt install kubeadm kubelet kubectl kubernetes-cni -y # Init (Only on Master) echo "Init K8S..." sudo kubeadm config images pull sudo kubeadm init --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=10.64.50.111 read -p "Please copy the kubeadm join command above and run it on worker nodes. Press any key to continue..." # Config (Only on Master) echo "Config K8S..." mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config # Calico (Only on Master) echo "Install Calico..." kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.27.0/manifests/tigera-operator.yaml curl https://raw.githubusercontent.com/projectcalico/calico/v3.27.0/manifests/custom-resources.yaml -O sed -i 's/cidr: 192\.168\.0\.0\/16/cidr: 10\.244\.0\.0\/16/' custom-resources.yaml kubectl create -f custom-resources.yaml sudo systemctl restart kubelet.service # Test (Only on Master) echo "Test K8S..." while [ "$(kubectl get nodes | grep -v "Ready" | wc -l)" -gt 1 ]; do echo "Waiting for all nodes to be ready..." kubectl get nodes -o wide sleep 5 done while [ "$(kubectl get pods --all-namespaces | grep -v "Running" | wc -l)" -gt 1 ]; do echo "Waiting for all pods to be running..." kubectl get pods --all-namespaces -o wide sleep 5 done # Install Dashboard (Only on Master) echo "Install dashboard..." kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml kubectl create serviceaccount -n kubernetes-dashboard admin-user cat << EOF > rbac.yaml apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: admin-user roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount name: admin-user namespace: kubernetes-dashboard EOF kubectl apply -f rbac.yaml rm rbac.yaml token=$(kubectl -n kubernetes-dashboard create token admin-user) echo "Dashboard token: $token" kubectl port-forward -n kubernetes-dashboard service/kubernetes-dashboard --address 0.0.0.0 10443:443 hostname=$(hostname) echo "Dashboard URL: https://$hostname:10443"