set +eux
-K8S_VERSION=1.23.3-00
+K8S_VERSION=1.28
+K8S_PACKAGE_VERSION="$K8S_VERSION".2-1.1
# 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 -y "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
+ curl -fsSL https://pkgs.k8s.io/core:/stable:/v"$K8S_VERSION"/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
+ echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v'$K8S_VERSION'/deb/ /' | 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-get install -y kubelet=${K8S_PACKAGE_VERSION} kubeadm=${K8S_PACKAGE_VERSION} kubectl=${K8S_PACKAGE_VERSION}
sudo apt-mark hold kubelet kubeadm kubectl
[ -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
}
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_CLUSTER_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_CLUSTER_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
}
# 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)
#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
}
echo "INSTALL_K8S_MONITOR=$INSTALL_K8S_MONITOR"
echo "HOME=$HOME"
+echo "Creating folders for installation"
+[ ! -d "$OSM_CLUSTER_WORK_DIR" ] && sudo mkdir -p $OSM_CLUSTER_WORK_DIR
+echo "Copying kubeadm-config from $OSM_DEVOPS/installers/kubeadm-config.yaml to $OSM_CLUSTER_WORK_DIR/kubeadm-config.yaml"
+sudo cp -b $OSM_DEVOPS/installers/kubeadm-config.yaml $OSM_CLUSTER_WORK_DIR/kubeadm-config.yaml
install_kube
check_and_track_kube_install
kube_config_dir
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_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_certmanager_ok
check_for_readiness
track k8scluster k8s_ready_ok
-
+configure_ipaddresspool_metallb