---
title: Pre-Upgrade Health Check
slug: turbine-upgrade-guide
docTags: 
createdAt: 2025-12-02T09:49:38.461Z
---

**Node Status**

- Check that all Nodes are in Ready state

:::BlockQuote{indent="1"}
kubectl get nodes -owide
:::

- If any nodes are in NotReady, SchedulingDisabled, etc then it would be recommended to review and fix them before upgrading.

**Pod Status**

- Check that all pods are in Running state and the pod values are matching 1/1, 3/3, etc.

:::BlockQuote{indent="1"}
kubectl get pods -A&#x20;
:::

- If any pods are not running i.e, 0/1, 2/3, CrashLoopBackoff, Error, etc then it would be advised to review the issue and fix it prior to upgrading

**Cluster Status**

- Check that Kubernetes is up and running and healthy.

:::BlockQuote{indent="1"}
kubectl cluster-info
:::

- If Kubernetes indicates that it is not healthy then review and establish where the issue is prior to upgrading.

**etcd health**

- Turbine 26.0.x and earlier

&#x20;        Use this command when the cluster is on Turbine 26.0.x or any earlier release

:::BlockQuote{indent="1"}
for pod in $(kubectl get pods -l component=etcd -n kube-system \\
&#x20;                    -o jsonpath='\{.items\[\*].metadata.name}')
do
&#x20;   echo "### etcd pod : $\{pod} ###"
&#x20;   kubectl -n kube-system exec $\{pod} -- /bin/sh \\
&#x20;           -c "ETCDCTL\_API=3 etcdctl \\
&#x20;           \--cert=/etc/kubernetes/pki/etcd/server.crt \\
&#x20;           \--key=/etc/kubernetes/pki/etcd/server.key \\
&#x20;           \--cacert=/etc/kubernetes/pki/etcd/ca.crt \\
&#x20;           endpoint health"
done
:::

- Turbine 26.1.0 and later

&#x20;       Use this command when the cluster is on Turbine 26.1.0 or any later release.&#x20;

&#x20;       That image is distroless and does not include /bin/sh. Call etcdctl directly instead.

:::BlockQuote
&#x20;  for pod in $(kubectl get pods -l component=etcd -n kube-system \\
&#x20;                    -o jsonpath='\{.items\[\*].metadata.name}')
do
&#x20;   echo "### etcd pod : $\{pod} ###"
&#x20;   kubectl -n kube-system exec $\{pod} -- etcdctl \\
&#x20;           \--cert=/etc/kubernetes/pki/etcd/server.crt \\
&#x20;           \--key=/etc/kubernetes/pki/etcd/server.key \\
&#x20;           \--cacert=/etc/kubernetes/pki/etcd/ca.crt \\
&#x20;           endpoint health
done
:::

- Should any other states be listed on the output then it would be advised to investigate the logs of the pod to establish the issue

**Hangfire Status**

- Check that Hangfire is running and there is no large amount of Enqueued Jobs&#x20;
- It would be recommended to grab a screenshot of the Hangfire Dashboard prior to upgrading to check the amount processed for Deleted Jobs

**Logging Status**

- Check the Logging section within the UI for Error Messages
- It would be recommended to grab a screenshot of the Logging section to ensure that any post-upgrade issues are correctly identified

**Velero Status and Backups**

- Ensure a backup is taken prior to upgrading should any issues arise during upgrade to be able to perform a restore.

:::BlockQuote{indent="1"}
velero get backups
:::

**Turbine specific&#x20;**

- Review the turbine queues to ensure that the queues are healthy should be low numbers across the board:

:::BlockQuote{indent="1"}
kubectl exec -it rabbitmq-server-0 -- rabbitmqctl list\_queues
:::

**MongoDB Records Amount**

- Establishing the amount of Swimlane Records the customer has:

:::BlockQuote{indent="1"}
use Swimlanedb.Records.find().count()
:::

- Establishing the amount of SwimlaneHistory Records the customer has:

:::BlockQuote{indent="1"}
use SwimlaneHistorydb.Records.find().count()
:::

**MongoDB Collection Sizes**

- Please refer to [Collect Mongo DB Collection and Index Sizes Across All Databases](docId\:yUNGGBH3Cv256sVG_yUqY)

**Download the ConfigValues File**

If kotsadm goes in CrashLoopBackOff while upgrading, its good to collect below information while have pre-upgrade checks call.

1. &#x20;*Downloaded kots plugin* (Replace: APP\_NAMESPACE )

:::BlockQuote{indent="1"}
kubectl kots download APP\_SLUG -n APP\_NAMESPACE --dest ./manifests --overwrite --decrypt-password-values
:::

:::Paragraph{indent="1"}
with the namespace on the cluster where you installed your application.APP\_SLUG with the slug of the application

Example:&#x20;
:::

:::BlockQuote{indent="1"}
kubectl kots download swimlane-platform -n default --dest ./manifests --overwrite --decrypt-password-values
:::

