-
Notifications
You must be signed in to change notification settings - Fork 150
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
CRDB-45670: helm: automate the statefulset update involving new PVCs
- Loading branch information
1 parent
af33dad
commit 71e62ee
Showing
3 changed files
with
69 additions
and
38 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,63 @@ | ||
#!/bin/bash | ||
|
||
Help() | ||
{ | ||
# Display Help | ||
echo "This script performs Helm upgrade involving new PVCs. Kindly run it from the root of the repository." | ||
echo | ||
echo "usage: ./scripts/upgrade_with_new_pvc.sh <release_name> <chart_version> <namespace> <sts_name> <num_replicas> [kubeconfig]" | ||
echo | ||
echo "options:" | ||
echo "release_name: Helm release name, e.g. my-release" | ||
echo "chart_version: Helm chart version to upgrade to, e.g. 15.0.0" | ||
echo "namespace: Kubernetes namespace, e.g. default" | ||
echo "sts_name: Statefulset name, e.g. my-release-cockroachdb" | ||
echo "num_replicas: Number of replicas in the statefulset, e.g. 3" | ||
echo "kubeconfig (optional): Path to the kubeconfig file. Default is $HOME/.kube/config." | ||
echo | ||
echo "example: ./scripts/upgrade_with_new_pvc.sh my-release 15.0.0 default my-release-cockroachdb 3" | ||
echo | ||
} | ||
|
||
while getopts ":h" option; do | ||
case $option in | ||
h) # display Help | ||
Help | ||
exit;; | ||
\?) # incorrect option | ||
echo "Error: Invalid option" | ||
exit;; | ||
esac | ||
done | ||
|
||
release_name=$1 | ||
chart_version=$2 | ||
namespace=$3 | ||
sts_name=$4 | ||
num_replicas=$5 | ||
kubeconfig=${6:-$HOME/.kube/config} | ||
|
||
# For each replica, do the following: | ||
# 1. Delete the statefulset | ||
# 2. Delete the pod replica | ||
# 3. Upgrade the Helm chart | ||
|
||
for i in $(seq 0 $((num_replicas-1))); do | ||
echo "========== Iteration $((i+1)) ==========" | ||
|
||
echo "$((i+1)). Deleting sts" | ||
kubectl --kubeconfig=$kubeconfig -n $namespace delete statefulset $sts_name --cascade=orphan --wait=true | ||
|
||
echo "$((i+1)). Deleting replica" | ||
kubectl --kubeconfig=$kubeconfig -n $namespace delete pod $sts_name-$i --wait=true | ||
|
||
echo "$((i+1)). Upgrading Helm" | ||
# The "--wait" flag ensures the deleted pod replica and STS are up and running. | ||
# However, at times, the STS fails to understand that all replicas are running and the upgrade is stuck. | ||
# The "--timeout 1m" helps with short-circuiting the upgrade process. Even if the upgrade does time out, it is | ||
# harmless and the last upgrade process will be successful once all the pods replicas have been updated. | ||
helm upgrade $release_name ./cockroachdb --kubeconfig=$kubeconfig --namespace $namespace --version $chart_version --wait --timeout 1m --debug | ||
|
||
echo "Iteration $((i+1)) complete. Kindly validate that the changes before proceeding." | ||
read -p "Press enter to continue ..." | ||
done |