2023-06-23 17:00:26 +00:00
#!/bin/bash
set -eE
set -o pipefail
2022-04-13 16:02:14 +00:00
2022-09-15 12:58:08 +00:00
ARGO_APP = ${ 1 :- /tmp/new-kubezero-argoapp.yaml }
2022-09-15 09:37:21 +00:00
2022-09-14 17:08:14 +00:00
SCRIPT_DIR = $( cd -- " $( dirname -- " ${ BASH_SOURCE [0] } " ) " & > /dev/null && pwd )
2022-11-09 16:08:22 +00:00
# shellcheck disable=SC1091
2022-04-29 18:22:20 +00:00
[ -n " $DEBUG " ] && set -x
2022-04-13 16:02:14 +00:00
2023-12-01 16:56:56 +00:00
. " $SCRIPT_DIR " /libhelm.sh
2022-09-23 10:54:27 +00:00
echo "Checking that all pods in kube-system are running ..."
waitSystemPodsRunning
2022-09-14 17:08:14 +00:00
argo_used && disable_argo
2023-01-11 12:08:18 +00:00
#all_nodes_upgrade ""
2022-09-11 11:54:56 +00:00
2022-09-15 09:37:21 +00:00
control_plane_upgrade kubeadm_upgrade
2022-09-11 11:54:56 +00:00
2023-11-30 20:04:13 +00:00
#echo "Adjust kubezero values as needed:"
2022-11-09 16:08:22 +00:00
# shellcheck disable=SC2015
2023-11-30 20:04:13 +00:00
#argo_used && kubectl edit app kubezero -n argocd || kubectl edit cm kubezero-values -n kube-system
2022-09-11 11:54:56 +00:00
2023-11-30 14:38:04 +00:00
# v1.27
2023-11-15 14:39:02 +00:00
# We need to restore the network ready file as cilium decided to rename it
control_plane_upgrade apply_network
2023-11-22 11:55:34 +00:00
2023-11-15 14:39:02 +00:00
echo "Wait for all CNI agents to be running ..."
2023-12-01 16:56:56 +00:00
kubectl rollout status ds/cilium -n kube-system --timeout= 300s
2023-11-22 11:55:34 +00:00
2023-11-15 14:39:02 +00:00
all_nodes_upgrade "cd /host/etc/cni/net.d && ln -s 05-cilium.conflist 05-cilium.conf || true"
2023-11-30 14:38:04 +00:00
# v1.27
2023-11-15 14:39:02 +00:00
# now the rest
2023-11-22 11:55:34 +00:00
control_plane_upgrade "apply_addons, apply_storage, apply_operators"
2023-11-30 14:38:04 +00:00
# v1.27
2023-11-22 11:55:34 +00:00
# Remove legacy eck-operator as part of logging if running
kubectl delete statefulset elastic-operator -n logging || true
2023-11-30 14:38:04 +00:00
# v1.27
2022-09-11 11:54:56 +00:00
2022-09-23 10:54:27 +00:00
echo "Checking that all pods in kube-system are running ..."
waitSystemPodsRunning
echo "Applying remaining KubeZero modules..."
2022-09-28 15:41:30 +00:00
2023-11-30 14:38:04 +00:00
# v1.27
2023-11-15 14:39:02 +00:00
### Cleanup of some deprecated Istio Crds
for crd in clusterrbacconfigs.rbac.istio.io rbacconfigs.rbac.istio.io servicerolebindings.rbac.istio.io serviceroles.rbac.istio.io; do
kubectl delete crds $crd || true
done
2023-11-30 14:38:04 +00:00
# Cleanup of some legacy node labels and annotations
controllers = $( kubectl get nodes -l node-role.kubernetes.io/control-plane -o json | jq .items[ ] .metadata.name -r)
for c in $controllers ; do
2023-11-30 17:59:37 +00:00
for l in projectcalico.org/IPv4VXLANTunnelAddr projectcalico.org/IPv4Address; do
2023-11-30 14:38:04 +00:00
kubectl annotate node $c ${ l } -
done
kubectl label node $c topology.ebs.csi.aws.com/zone-
done
2023-11-30 20:04:13 +00:00
# Fix for legacy cert-manager CRDs to be upgraded
for crd_name in certificaterequests.cert-manager.io certificates.cert-manager.io challenges.acme.cert-manager.io clusterissuers.cert-manager.io issuers.cert-manager.io orders.acme.cert-manager.io; do
manager_index = " $( kubectl get crd " ${ crd_name } " --show-managed-fields --output json | jq -r '.metadata.managedFields | map(.manager == "cainjector") | index(true)' ) "
[ " $manager_index " != "null" ] && kubectl patch crd " ${ crd_name } " --type= json -p= " [{\"op\": \"remove\", \"path\": \"/metadata/managedFields/ ${ manager_index } \"}] "
done
2023-11-30 14:38:04 +00:00
# v1.27
2023-11-22 11:55:34 +00:00
control_plane_upgrade "apply_cert-manager, apply_istio, apply_istio-ingress, apply_istio-private-ingress, apply_logging, apply_metrics, apply_telemetry, apply_argocd"
2023-05-03 17:33:04 +00:00
# Trigger backup of upgraded cluster state
kubectl create job --from= cronjob/kubezero-backup kubezero-backup-$VERSION -n kube-system
2023-05-04 08:41:45 +00:00
while true; do
kubectl wait --for= condition = complete job/kubezero-backup-$VERSION -n kube-system 2>/dev/null && kubectl delete job kubezero-backup-$VERSION -n kube-system && break
sleep 1
done
2022-09-15 11:05:38 +00:00
# Final step is to commit the new argocd kubezero app
2022-09-23 10:54:27 +00:00
kubectl get app kubezero -n argocd -o yaml | yq 'del(.status) | del(.metadata) | del(.operation) | .metadata.name="kubezero" | .metadata.namespace="argocd"' | yq 'sort_keys(..) | .spec.source.helm.values |= (from_yaml | to_yaml)' > $ARGO_APP
2022-09-15 11:05:38 +00:00
2022-09-15 12:58:08 +00:00
echo " Please commit $ARGO_APP as the updated kubezero/application.yaml for your cluster. "
2022-09-15 11:05:38 +00:00
echo "Then head over to ArgoCD for this cluster and sync all KubeZero modules to apply remaining upgrades."
2022-09-23 10:54:27 +00:00
echo "<Return> to continue and re-enable ArgoCD:"
2022-11-09 16:08:22 +00:00
read -r
2022-09-23 10:54:27 +00:00
argo_used && enable_argo