X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=installers%2Finstall_cluster_addons.sh;h=245ff26672670c7e21e729b46caea226ba82c569;hb=refs%2Fheads%2Fmaster;hp=a2bc366a417a887cd4489e3508eece1adabeb5f6;hpb=41f5ce501984dcb38c25822f26d4c329d0983308;p=osm%2Fdevops.git diff --git a/installers/install_cluster_addons.sh b/installers/install_cluster_addons.sh index a2bc366a..58c64eec 100755 --- a/installers/install_cluster_addons.sh +++ b/installers/install_cluster_addons.sh @@ -15,6 +15,11 @@ set +eux +INSTALL_STORAGECLASS="" +INSTALL_METALLB="" +INSTALL_CERTMANAGER="" +INSTALL_NGINX="" + function install_k8s_storageclass() { [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function # Openebs versions can be found here: https://github.com/openebs/openebs/releases @@ -22,7 +27,7 @@ function install_k8s_storageclass() { echo "Installing OpenEBS" helm repo add openebs https://openebs.github.io/charts helm repo update - helm install --create-namespace --namespace openebs openebs openebs/openebs --version ${OPENEBS_VERSION} + helm upgrade --install --create-namespace --namespace openebs openebs openebs/openebs --version ${OPENEBS_VERSION} helm ls -n openebs local storageclass_timeout=400 local counter=0 @@ -53,13 +58,18 @@ function install_helm_metallb() { METALLB_VERSION="0.13.10" helm repo add metallb https://metallb.github.io/metallb helm repo update - helm install --create-namespace --namespace metallb-system metallb metallb/metallb --version ${METALLB_VERSION} + # kubectl create namespace metallb-system + # kubectl label namespaces metallb-system pod-security.kubernetes.io/enforce=privileged + # kubectl label namespaces metallb-system pod-security.kubernetes.io/audit=privileged + # kubectl label namespaces metallb-system pod-security.kubernetes.io/warn=privileged + helm upgrade --install --create-namespace --namespace metallb-system metallb metallb/metallb --version ${METALLB_VERSION} [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function } function configure_ipaddresspool_metallb() { [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function echo "Creating IP address pool manifest: ${OSM_CLUSTER_WORK_DIR}/metallb-ipaddrpool.yaml" + [ ! -d "$OSM_CLUSTER_WORK_DIR" ] && sudo mkdir -p $OSM_CLUSTER_WORK_DIR METALLB_IP_RANGE="$DEFAULT_IP/32" echo "apiVersion: metallb.io/v1beta1 kind: IPAddressPool @@ -81,14 +91,32 @@ function install_helm_certmanager() { CERTMANAGER_VERSION="v1.9.1" helm repo add jetstack https://charts.jetstack.io helm repo update - helm install cert-manager --create-namespace --namespace cert-manager jetstack/cert-manager \ + helm upgrade --install cert-manager --create-namespace --namespace cert-manager jetstack/cert-manager \ --version ${CERTMANAGER_VERSION} --set installCRDs=true --set prometheus.enabled=false \ --set clusterResourceNamespace=osm \ --set extraArgs="{--enable-certificate-owner-ref=true}" [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function } -#checks openebs and metallb readiness +#installs nginx +function install_helm_nginx() { + [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function + echo "Installing nginx" + NGINX_VERSION="4.10.0" + ANNOTATIONS='--set controller.service.annotations."service\.beta\.kubernetes\.io/azure-load-balancer-health-probe-request-path"=/healthz' + ANNOTATIONS=${ANNOTATIONS:-""} + helm upgrade --install ingress-nginx ingress-nginx \ + --repo https://kubernetes.github.io/ingress-nginx --version ${NGINX_VERSION} \ + --namespace ingress-nginx --create-namespace ${ANNOTATIONS} + # Wait until ready + kubectl wait --namespace ingress-nginx \ + --for=condition=ready pod \ + --selector=app.kubernetes.io/component=controller \ + --timeout=120s + [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function +} + +#checks openebs, metallb and cert-manager readiness function check_for_readiness() { [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function # Default input values @@ -98,7 +126,6 @@ function check_for_readiness() { OPENEBS_NAMESPACE=openebs METALLB_NAMESPACE=metallb-system CERTMANAGER_NAMESPACE=cert-manager - # STACK_NAME=osm # By default, "osm" # Equivalent number of samples oks_threshold=$((time_for_readiness/${sampling_period})) # No. ok samples to declare the system ready @@ -112,28 +139,34 @@ function check_for_readiness() { while [[ (${failures_in_a_row} -lt ${failures_threshold}) && (${oks_in_a_row} -lt ${oks_threshold}) ]] do # State of OpenEBS - OPENEBS_STATE=$(kubectl get pod -n ${OPENEBS_NAMESPACE} --no-headers 2>&1) - OPENEBS_READY=$(echo "${OPENEBS_STATE}" | awk '$2=="1/1" || $2=="2/2" {printf ("%s\t%s\t\n", $1, $2)}') - OPENEBS_NOT_READY=$(echo "${OPENEBS_STATE}" | awk '$2!="1/1" && $2!="2/2" {printf ("%s\t%s\t\n", $1, $2)}') - COUNT_OPENEBS_READY=$(echo "${OPENEBS_READY}"| grep -v -e '^$' | wc -l) - COUNT_OPENEBS_NOT_READY=$(echo "${OPENEBS_NOT_READY}" | grep -v -e '^$' | wc -l) + if [ -n "${INSTALL_STORAGECLASS}" ]; then + OPENEBS_STATE=$(kubectl get pod -n ${OPENEBS_NAMESPACE} --no-headers 2>&1) + OPENEBS_READY=$(echo "${OPENEBS_STATE}" | awk '$2=="1/1" || $2=="2/2" {printf ("%s\t%s\t\n", $1, $2)}') + OPENEBS_NOT_READY=$(echo "${OPENEBS_STATE}" | awk '$2!="1/1" && $2!="2/2" {printf ("%s\t%s\t\n", $1, $2)}') + COUNT_OPENEBS_READY=$(echo "${OPENEBS_READY}"| grep -v -e '^$' | wc -l) + COUNT_OPENEBS_NOT_READY=$(echo "${OPENEBS_NOT_READY}" | grep -v -e '^$' | wc -l) + fi # State of MetalLB - METALLB_STATE=$(kubectl get pod -n ${METALLB_NAMESPACE} --no-headers 2>&1) - METALLB_READY=$(echo "${METALLB_STATE}" | awk '$2=="1/1" || $2=="4/4" {printf ("%s\t%s\t\n", $1, $2)}') - METALLB_NOT_READY=$(echo "${METALLB_STATE}" | awk '$2!="1/1" && $2!="4/4" {printf ("%s\t%s\t\n", $1, $2)}') - COUNT_METALLB_READY=$(echo "${METALLB_READY}" | grep -v -e '^$' | wc -l) - COUNT_METALLB_NOT_READY=$(echo "${METALLB_NOT_READY}" | grep -v -e '^$' | wc -l) + if [ -n "${INSTALL_METALLB}" ]; then + METALLB_STATE=$(kubectl get pod -n ${METALLB_NAMESPACE} --no-headers 2>&1) + METALLB_READY=$(echo "${METALLB_STATE}" | awk '$2=="1/1" || $2=="4/4" {printf ("%s\t%s\t\n", $1, $2)}') + METALLB_NOT_READY=$(echo "${METALLB_STATE}" | awk '$2!="1/1" && $2!="4/4" {printf ("%s\t%s\t\n", $1, $2)}') + COUNT_METALLB_READY=$(echo "${METALLB_READY}" | grep -v -e '^$' | wc -l) + COUNT_METALLB_NOT_READY=$(echo "${METALLB_NOT_READY}" | grep -v -e '^$' | wc -l) + fi # State of CertManager - CERTMANAGER_STATE=$(kubectl get pod -n ${CERTMANAGER_NAMESPACE} --no-headers 2>&1) - CERTMANAGER_READY=$(echo "${CERTMANAGER_STATE}" | awk '$2=="1/1" || $2=="2/2" {printf ("%s\t%s\t\n", $1, $2)}') - CERTMANAGER_NOT_READY=$(echo "${CERTMANAGER_STATE}" | awk '$2!="1/1" && $2!="2/2" {printf ("%s\t%s\t\n", $1, $2)}') - COUNT_CERTMANAGER_READY=$(echo "${CERTMANAGER_READY}" | grep -v -e '^$' | wc -l) - COUNT_CERTMANAGER_NOT_READY=$(echo "${CERTMANAGER_NOT_READY}" | grep -v -e '^$' | wc -l) + if [ -n "${INSTALL_CERTMANAGER}" ]; then + CERTMANAGER_STATE=$(kubectl get pod -n ${CERTMANAGER_NAMESPACE} --no-headers 2>&1) + CERTMANAGER_READY=$(echo "${CERTMANAGER_STATE}" | awk '$2=="1/1" || $2=="2/2" {printf ("%s\t%s\t\n", $1, $2)}') + CERTMANAGER_NOT_READY=$(echo "${CERTMANAGER_STATE}" | awk '$2!="1/1" && $2!="2/2" {printf ("%s\t%s\t\n", $1, $2)}') + COUNT_CERTMANAGER_READY=$(echo "${CERTMANAGER_READY}" | grep -v -e '^$' | wc -l) + COUNT_CERTMANAGER_NOT_READY=$(echo "${CERTMANAGER_NOT_READY}" | grep -v -e '^$' | wc -l) + fi # OK sample - if [[ $((${COUNT_OPENEBS_NOT_READY}+${COUNT_METALLB_NOT_READY})) -eq 0 ]] + if [[ $((${COUNT_OPENEBS_NOT_READY:-0}+${COUNT_METALLB_NOT_READY:-0}+${COUNT_CERTMANAGER_NOT_READY:-0})) -eq 0 ]] then ((++oks_in_a_row)) failures_in_a_row=0 @@ -146,7 +179,7 @@ function check_for_readiness() { echo Bootstraping... "${failures_in_a_row}" checks of ${failures_threshold} # Reports failed pods in OpenEBS - if [[ "${COUNT_OPENEBS_NOT_READY}" -ne 0 ]] + if [[ "${COUNT_OPENEBS_NOT_READY:-0}" -ne 0 ]] then echo "OpenEBS: Waiting for ${COUNT_OPENEBS_NOT_READY} of $((${COUNT_OPENEBS_NOT_READY}+${COUNT_OPENEBS_READY})) pods to be ready:" echo "${OPENEBS_NOT_READY}" @@ -154,7 +187,7 @@ function check_for_readiness() { fi # Reports failed pods in MetalLB - if [[ "${COUNT_METALLB_NOT_READY}" -ne 0 ]] + if [[ "${COUNT_METALLB_NOT_READY:-0}" -ne 0 ]] then echo "MetalLB: Waiting for ${COUNT_METALLB_NOT_READY} of $((${COUNT_METALLB_NOT_READY}+${COUNT_METALLB_READY})) pods to be ready:" echo "${METALLB_NOT_READY}" @@ -162,7 +195,7 @@ function check_for_readiness() { fi # Reports failed pods in CertManager - if [[ "${COUNT_CERTMANAGER_NOT_READY}" -ne 0 ]] + if [[ "${COUNT_CERTMANAGER_NOT_READY:-0}" -ne 0 ]] then echo "CertManager: Waiting for ${COUNT_CERTMANAGER_NOT_READY} of $((${COUNT_CERTMANAGER_NOT_READY}+${COUNT_CERTMANAGER_READY})) pods to be ready:" echo "${CERTMANAGER_NOT_READY}" @@ -202,6 +235,11 @@ while getopts ":D:d:i:-: " o; do ;; -) [ "${OPTARG}" == "debug" ] && DEBUG_INSTALL="y" && continue + [ "${OPTARG}" == "storageclass" ] && INSTALL_STORAGECLASS="y" && continue + [ "${OPTARG}" == "metallb" ] && INSTALL_METALLB="y" && continue + [ "${OPTARG}" == "nginx" ] && INSTALL_NGINX="y" && continue + [ "${OPTARG}" == "certmgr" ] && INSTALL_CERTMANAGER="y" && continue + [ "${OPTARG}" == "all" ] && INSTALL_STORAGECLASS="y" && INSTALL_METALLB="y" && INSTALL_NGINX="y" && INSTALL_CERTMANAGER="y" && continue echo -e "Invalid option: '--$OPTARG'\n" >&2 exit 1 ;; @@ -222,17 +260,29 @@ done source $OSM_DEVOPS/common/logging source $OSM_DEVOPS/common/track -echo "DEBUG_INSTALL=$DEBUG_INSTALL" -echo "DEFAULT_IP=$DEFAULT_IP" -echo "OSM_DEVOPS=$OSM_DEVOPS" -echo "OSM_CLUSTER_WORK_DIR=$OSM_CLUSTER_WORK_DIR" - -install_k8s_storageclass -track k8scluster k8s_storageclass_ok -install_helm_metallb -track k8scluster k8s_metallb_ok -install_helm_certmanager -track k8scluster k8s_certmanager_ok +echo "DEBUG_INSTALL=${DEBUG_INSTALL:-}" +echo "DEFAULT_IP=${DEFAULT_IP:-}" +echo "OSM_DEVOPS=${OSM_DEVOPS:-}" +echo "OSM_CLUSTER_WORK_DIR=${OSM_CLUSTER_WORK_DIR:-}" + +if [ -n "${INSTALL_STORAGECLASS}" ]; then + install_k8s_storageclass + track k8scluster k8s_storageclass_ok +fi +if [ -n "${INSTALL_METALLB}" ]; then + install_helm_metallb + track k8scluster k8s_metallb_ok +fi +if [ -n "${INSTALL_CERTMANAGER}" ]; then + install_helm_certmanager + track k8scluster k8s_certmanager_ok +fi +if [ -n "${INSTALL_NGINX}" ]; then + install_helm_nginx + track k8scluster k8s_nginx_ok +fi check_for_readiness track k8scluster k8s_ready_ok -configure_ipaddresspool_metallb +if [ -n "${INSTALL_METALLB}" ]; then + configure_ipaddresspool_metallb +fi