X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=installers%2Finstall_kubeadm_cluster.sh;h=6f3aa878881e5cf7fa484d3c3f6b7a06a86e6f60;hb=8fed108b98ba8089f9ea6a2655399f26bcaf040e;hp=70f6d9daf7c6b764c0d954891b536198333ae457;hpb=09eaa9263cfd3f0eaf3c10d756a781ee241cb5e6;p=osm%2Fdevops.git diff --git a/installers/install_kubeadm_cluster.sh b/installers/install_kubeadm_cluster.sh index 70f6d9da..6f3aa878 100755 --- a/installers/install_kubeadm_cluster.sh +++ b/installers/install_kubeadm_cluster.sh @@ -15,10 +15,11 @@ set +eux -#installs kubernetes packages +K8S_VERSION=1.23.3-00 + +# installs kubernetes packages function install_kube() { [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function - K8S_VERSION=1.23.3-00 # Kubernetes releases can be found here: https://kubernetes.io/releases/ # To check other available versions, run the following command # curl -s https://packages.cloud.google.com/apt/dists/kubernetes-xenial/main/binary-amd64/Packages | grep Version | awk '{print $2}' @@ -36,39 +37,63 @@ EOF [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function } -#initializes kubernetes control plane +# check and track kube packages installation +function check_and_track_kube_install() { + [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function + kubelet_version=$(dpkg -s kubelet|grep Version|awk '{print $2}') + [ -n "${kubelet_version}" ] || FATAL_TRACK k8scluster "Kubelet was not installed." + kubeadm_version=$(dpkg -s kubeadm|grep Version|awk '{print $2}') + [ -n "${kubeadm_version}" ] || FATAL_TRACK k8scluster "Kubeadm was not installed." + kubectl_version=$(dpkg -s kubectl|grep Version|awk '{print $2}') + [ -n "${kubectl_version}" ] || FATAL_TRACK k8scluster "Kubectl was not installed." + track k8scluster install_k8s_ok kubelet ${kubelet_version} none none kubeadm ${kubeadm_version} none none kubectl ${kubectl_version} none none + [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function +} + +# initializes kubernetes control plane function init_kubeadm() { [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function sudo swapoff -a sudo sed -i.bak '/.*none.*swap/s/^\(.*\)$/#\1/g' /etc/fstab + sudo kubeadm init --dry-run || FATAL_TRACK k8scluster "kubeadm init dry-run failed" sudo kubeadm init --config $1 sleep 5 [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function } +# Initializes kubeconfig file function kube_config_dir() { [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function K8S_MANIFEST_DIR="/etc/kubernetes/manifests" - [ ! -d $K8S_MANIFEST_DIR ] && FATAL "Cannot Install Kubernetes" + [ ! -d $K8S_MANIFEST_DIR ] && FATAL_TRACK k8scluster "Kubernetes folder $K8S_MANIFEST_DIR was not found" mkdir -p $HOME/.kube sudo cp /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function } -#deploys flannel as daemonsets +# test kubernetes installation +function check_and_track_init_k8s() { + [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function + kubectl get ns || FATAL_TRACK k8scluster "Failed getting namespaces" + track k8scluster init_k8s_ok + [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function +} + +# deploys flannel as daemonsets function deploy_cni_provider() { [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function CNI_DIR="$(mktemp -d -q --tmpdir "flannel.XXXXXX")" trap 'rm -rf "${CNI_DIR}"' EXIT - wget --retry-on-host-error --retry-on-http-error 404,429,503 --tries=5 https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml -P $CNI_DIR - [ ! -f $CNI_DIR/kube-flannel.yml ] && FATAL "Cannot Install Flannel because $CNI_DIR/kube-flannel.yml was not found. Maybe the file https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml is temporarily not accessible" + KUBE_FLANNEL_FILE_URL="https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml" + wget --retry-on-host-error --retry-on-http-error 404,429,503 --tries=5 "${KUBE_FLANNEL_FILE_URL}" -P $CNI_DIR + [ ! -f $CNI_DIR/kube-flannel.yml ] && FATAL_TRACK k8scluster "Cannot Install Flannel because $CNI_DIR/kube-flannel.yml was not found. Maybe the file ${KUBE_FLANNEL_FILE_URL} is temporarily not accessible" kubectl apply -f $CNI_DIR - [ $? -ne 0 ] && FATAL "Cannot Install Flannel" + [ $? -ne 0 ] && FATAL_TRACK k8scluster "Cannot Install Flannel" [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function } -#taints K8s master node +# taints K8s master node function taint_master_node() { [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function K8S_MASTER=$(kubectl get nodes | awk '$3~/master/'| awk '{print $1}') @@ -77,6 +102,14 @@ function taint_master_node() { [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function } +# check and track kube packages installation +function check_and_track_k8s_ready_before_helm() { + [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function + kubectl get events || FATAL_TRACK k8scluster "Failed getting events" + track k8scluster k8s_ready_before_helm + [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function +} + #Install Helm v3 #Helm releases can be found here: https://github.com/helm/helm/releases function install_helm() { @@ -93,8 +126,9 @@ function install_helm() { else echo "Helm3 is already installed. Skipping installation..." fi - helm repo add stable https://charts.helm.sh/stable - helm repo update + helm version || FATAL_TRACK k8scluster "Could not obtain helm version. Maybe helm client was not installed" + helm repo add stable https://charts.helm.sh/stable || FATAL_TRACK k8scluster "Helm repo stable could not be added" + helm repo update || FATAL_TRACK k8scluster "Helm repo stable could not be updated" [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function } @@ -127,7 +161,7 @@ function install_k8s_storageclass() { sleep 15 fi done - [ -n "$storageclass_ready" ] || FATAL "Storageclass not ready after $storageclass_timeout seconds. Cannot install openebs" + [ -n "$storageclass_ready" ] || FATAL_TRACK k8scluster "Storageclass not ready after $storageclass_timeout seconds. Cannot install openebs" kubectl patch storageclass openebs-hostpath -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}' [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function } @@ -226,7 +260,7 @@ function check_for_readiness() { if [[ (${failures_in_a_row} -ge ${failures_threshold}) ]] then echo - FATAL "K8S CLUSTER IS BROKEN" + FATAL_TRACK k8scluster "K8S CLUSTER IS BROKEN" else echo echo "K8S CLUSTER IS READY" @@ -284,21 +318,26 @@ echo "HOME=$HOME" install_kube -track k8scluster install_k8s_ok +check_and_track_kube_install + init_kubeadm $OSM_DOCKER_WORK_DIR/cluster-config.yaml kube_config_dir -track k8scluster init_k8s_ok +check_and_track_init_k8s + if [ -n "$INSTALL_K8S_MONITOR" ]; then # uninstall OSM MONITORING uninstall_k8s_monitoring track k8scluster uninstall_k8s_monitoring_ok fi -#remove old namespace + remove_k8s_namespace osm deploy_cni_provider taint_master_node +check_and_track_k8s_ready_before_helm + install_helm track k8scluster install_helm_ok + install_k8s_storageclass track k8scluster k8s_storageclass_ok install_helm_metallb