-
Notifications
You must be signed in to change notification settings - Fork 149
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
CRDB-45670: helm: automate the statefulset update involving new PVCs #443
base: master
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,60 @@ | ||
#!/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 | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. If one replica is not upgraded and not joined to the cockroachdb cluster properly and we move to the next one. Wouldn't it affect the quoram of the cluster if there are 3 nodes and 2 nodes are not accessible at the moment? We should identify that the replica we have updated is joined to the cluster before moving to the next one. |
||
done |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We should also take an input for values.yaml file. User could have custom values.yaml file they created for cockroachdb. User could be passing this custom values.yaml file using
-f
option in helm upgrade command.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
At L59, I'm currently using
./cockroachdb
as the chart location to upgrade to. I am guessing this would default to using the values file at./cockroachdb/values.yaml
, right?Once we do provide a flag to provide the values file (
-f
), I am thinking if it's okay to keep the chart path as./cockroachdb
.