set +eux
-K8S_VERSION=1.23.3-00
+K8S_VERSION=1.26.5-00
# installs kubernetes packages
function install_kube() {
# 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}'
- sudo apt-get update && sudo apt-get install -y apt-transport-https
- sudo apt-get update && sudo apt-get install -y apt-transport-https
- curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
- sudo add-apt-repository "deb https://apt.kubernetes.io/ kubernetes-xenial main"
- sudo apt-get update
+ sudo apt-get -y update && sudo apt-get install -y apt-transport-https ca-certificates curl
+ sudo install -m 0755 -d /etc/apt/keyrings
+ curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-archive-keyring.gpg
+ echo "deb [signed-by=/etc/apt/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
+ sudo apt-get -y update
echo "Installing Kubernetes Packages ..."
sudo apt-get install -y kubelet=${K8S_VERSION} kubeadm=${K8S_VERSION} kubectl=${K8S_VERSION}
- cat << EOF | sudo tee -a /etc/default/kubelet
-KUBELET_EXTRA_ARGS="--cgroup-driver=cgroupfs"
-EOF
sudo apt-mark hold kubelet kubeadm kubectl
[ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
}
[ -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
+ track k8scluster install_k8s_ok none none none kubelet ${kubelet_version} none none kubeadm ${kubeadm_version} none none kubectl ${kubectl_version} none none
[ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
}
[ -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 --dry-run || FATAL_TRACK k8scluster "kubeadm init dry-run failed"
sudo kubeadm init --config $1
sleep 5
[ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
# test kubernetes installation
function check_and_track_init_k8s() {
[ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
+ echo "Reading existing namespaces"
kubectl get ns || FATAL_TRACK k8scluster "Failed getting namespaces"
track k8scluster init_k8s_ok
[ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
# 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}')
- kubectl taint node $K8S_MASTER node-role.kubernetes.io/master:NoSchedule-
+ K8S_MASTER=$(kubectl get nodes | awk '$3~/control-plane/'| awk '{print $1; exit}')
+ kubectl taint node $K8S_MASTER node-role.kubernetes.io/control-plane:NoSchedule-
sleep 5
[ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
}
#Helm releases can be found here: https://github.com/helm/helm/releases
function install_helm() {
[ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
- HELM_VERSION="v3.7.2"
+ HELM_VERSION="v3.11.3"
if ! [[ "$(helm version --short 2>/dev/null)" =~ ^v3.* ]]; then
# Helm is not installed. Install helm
echo "Helm3 is not installed, installing ..."
function install_k8s_storageclass() {
[ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
- echo "Installing open-iscsi"
- sudo apt-get update
- sudo apt-get install open-iscsi
- sudo systemctl enable --now iscsid
- OPENEBS_VERSION="3.1.0"
+ # Openebs versions can be found here: https://github.com/openebs/openebs/releases
+ OPENEBS_VERSION="3.7.0"
echo "Installing OpenEBS"
helm repo add openebs https://openebs.github.io/charts
helm repo update
function install_helm_metallb() {
[ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
echo "Installing MetalLB"
- METALLB_VERSION="0.11.0"
- METALLB_IP_RANGE="$DEFAULT_IP/32"
- echo "configInline:
- address-pools:
- - name: default
- protocol: layer2
- addresses:
- - $METALLB_IP_RANGE" | sudo tee -a ${OSM_DOCKER_WORK_DIR}/metallb-config.yaml
+ 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} -f ${OSM_DOCKER_WORK_DIR}/metallb-config.yaml
+ helm 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"
+ METALLB_IP_RANGE="$DEFAULT_IP/32"
+ echo "apiVersion: metallb.io/v1beta1
+kind: IPAddressPool
+metadata:
+ name: first-pool
+ namespace: metallb-system
+spec:
+ addresses:
+ - ${METALLB_IP_RANGE}" | sudo tee -a ${OSM_CLUSTER_WORK_DIR}/metallb-ipaddrpool.yaml
+ echo "Applying IP address pool manifest: kubectl apply -f ${OSM_CLUSTER_WORK_DIR}/metallb-ipaddrpool.yaml"
+ kubectl apply -f ${OSM_CLUSTER_WORK_DIR}/metallb-ipaddrpool.yaml || FATAL_TRACK k8scluster "Cannot create IP address Pool in MetalLB"
+ [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
+}
+
+#installs cert-manager
+function install_helm_certmanager() {
+ [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
+ echo "Installing cert-manager"
+ 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 \
+ --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
}
# 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=="2/2" {printf ("%s\t%s\t\n", $1, $2)}')
- METALLB_NOT_READY=$(echo "${METALLB_STATE}" | awk '$2!="1/1" && $2!="2/2" {printf ("%s\t%s\t\n", $1, $2)}')
+ 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)
+ # 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)
+
# OK sample
if [[ $((${COUNT_OPENEBS_NOT_READY}+${COUNT_METALLB_NOT_READY})) -eq 0 ]]
then
echo
fi
- # Reports failed statefulsets
+ # Reports failed pods in MetalLB
if [[ "${COUNT_METALLB_NOT_READY}" -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}"
echo
fi
+
+ # Reports failed pods in CertManager
+ if [[ "${COUNT_CERTMANAGER_NOT_READY}" -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}"
+ echo
+ fi
fi
#------------ NEXT SAMPLE
#removes osm deployments and services
function remove_k8s_namespace() {
[ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
- kubectl delete ns $1 2>&1 >/dev/null
+ echo "Deleting existing namespace $1: kubectl delete ns $1"
+ kubectl delete ns $1 2>/dev/null
[ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
}
DEFAULT_IP="${OPTARG}"
;;
d)
- OSM_DOCKER_WORK_DIR="${OPTARG}"
+ OSM_CLUSTER_WORK_DIR="${OPTARG}"
;;
D)
OSM_DEVOPS="${OPTARG}"
echo "DEBUG_INSTALL=$DEBUG_INSTALL"
echo "DEFAULT_IP=$DEFAULT_IP"
echo "OSM_DEVOPS=$OSM_DEVOPS"
-echo "OSM_DOCKER_WORK_DIR=$OSM_DOCKER_WORK_DIR"
+echo "OSM_CLUSTER_WORK_DIR=$OSM_CLUSTER_WORK_DIR"
echo "INSTALL_K8S_MONITOR=$INSTALL_K8S_MONITOR"
echo "HOME=$HOME"
install_kube
check_and_track_kube_install
-init_kubeadm $OSM_DOCKER_WORK_DIR/cluster-config.yaml
+init_kubeadm $OSM_CLUSTER_WORK_DIR/kubeadm-config.yaml
kube_config_dir
check_and_track_init_k8s
track k8scluster uninstall_k8s_monitoring_ok
fi
-remove_k8s_namespace osm
deploy_cni_provider
taint_master_node
check_and_track_k8s_ready_before_helm
+remove_k8s_namespace osm
+
install_helm
track k8scluster install_helm_ok
track k8scluster k8s_storageclass_ok
install_helm_metallb
track k8scluster k8s_metallb_ok
+install_helm_certmanager
+track k8scluster k8s_certmanager_ok
check_for_readiness
track k8scluster k8s_ready_ok
-
+configure_ipaddresspool_metallb