| #!/bin/bash |
| MYSQL_USER=$(kubectl exec -n $NAMESPACE_ENV \ |
| {{ include "common.fullname" . }}-0 -- printenv MYSQL_USER) |
| |
| MYSQL_PASSWORD=$(kubectl exec -n $NAMESPACE_ENV \ |
| {{ include "common.fullname" . }}-0 -- printenv MYSQL_PASSWORD) |
| |
| MYSQL_ROOT_PASSWORD=$(kubectl exec -n $NAMESPACE_ENV \ |
| {{ include "common.fullname" . }}-0 -- printenv MYSQL_ROOT_PASSWORD) |
| |
| kubectl create secret generic \ |
| '{{ include "common.fullname" . }}'-temp-upgrade-root \ |
| --from-literal=password=$MYSQL_ROOT_PASSWORD |
| |
| kubectl create secret generic \ |
| '{{ include "common.fullname" . }}'-temp-upgrade-usercred \ |
| --from-literal=login=$MYSQL_USER --from-literal=password=$MYSQL_PASSWORD |
| |
| kubectl create -f /upgrade/create-deployment.yml |
| |
| TEMP_POD=$(kubectl get pod -n $NAMESPACE_ENV --selector \ |
| app='{{ include "common.fullname" . }}' -o \ |
| jsonpath='{.items[?(@.metadata.ownerReferences[].kind=="ReplicaSet")].metadata.name}') |
| |
| CLUSTER_NO=$(kubectl exec -n $NAMESPACE_ENV $TEMP_POD -- \ |
| mysql --skip-column-names -h{{ $.Values.service.name }} -u$MYSQL_USER \ |
| -p$MYSQL_PASSWORD -e "SHOW GLOBAL STATUS LIKE 'wsrep_cluster_size';" | \ |
| awk '{print $2}') |
| |
| CLUSTER_STATE=$(kubectl exec -n $NAMESPACE_ENV $TEMP_POD -- \ |
| mysql --skip-column-names -h{{ $.Values.service.name }} -u$MYSQL_USER \ |
| -p$MYSQL_PASSWORD -e "SHOW GLOBAL STATUS LIKE 'wsrep_local_state_comment';" \ |
| | awk '{print $2}') |
| |
| STS_REPLICA=$(kubectl get statefulsets -n $NAMESPACE_ENV \ |
| {{ include "common.fullname" . }} -o jsonpath='{.status.replicas}') |
| |
| DEPLOYMENT_REPLICA=$(kubectl get deployment -n $NAMESPACE_ENV \ |
| {{ include "common.fullname" . }}-upgrade-deployment -o \ |
| jsonpath='{.status.replicas}') |
| |
| while [[ ! $CLUSTER_NO == $((STS_REPLICA+DEPLOYMENT_REPLICA)) ]] \ |
| || [[ ! $CLUSTER_STATE == "Synced" ]] |
| do |
| echo "$CLUSTER_NO and $CLUSTER_STATE" |
| CLUSTER_NO=$(kubectl exec -n $NAMESPACE_ENV $TEMP_POD -- mysql \ |
| --skip-column-names -h{{ $.Values.service.name }} -u$MYSQL_USER \ |
| -p$MYSQL_PASSWORD -e "SHOW GLOBAL STATUS LIKE 'wsrep_cluster_size';" \ |
| | awk '{print $2}') |
| CLUSTER_STATE=$(kubectl exec -n $NAMESPACE_ENV $TEMP_POD -- mysql \ |
| --skip-column-names -h{{ $.Values.service.name }} -u$MYSQL_USER \ |
| -p$MYSQL_PASSWORD -e "SHOW GLOBAL STATUS LIKE 'wsrep_local_state_comment';" \ |
| | awk '{print $2}') |
| sleep 2 |
| if [[ $CLUSTER_NO == $((STS_REPLICA+DEPLOYMENT_REPLICA)) ]] \ |
| && [[ $CLUSTER_STATE == "Synced" ]] |
| then |
| echo "The cluster has $CLUSTER_NO members and $CLUSTER_STATE state." |
| break |
| fi |
| done |
| |
| MYSQL_STATUS=$(kubectl exec -n $NAMESPACE_ENV $TEMP_POD -- mysqladmin \ |
| -uroot -p$MYSQL_ROOT_PASSWORD ping) |
| |
| while [[ ! $MYSQL_STATUS == "mysqld is alive" ]] |
| do |
| echo "Mariadb deployment is not ready yet." |
| sleep 2 |
| MYSQL_STATUS=$(kubectl exec -n $NAMESPACE_ENV $TEMP_POD -- mysqladmin \ |
| -uroot -p$MYSQL_ROOT_PASSWORD ping) |
| if [[ $MYSQL_STATUS == "mysqld is alive" ]] |
| then |
| echo "Mariadb deployment is ready." |
| break |
| fi |
| done |
| |
| kubectl scale statefulsets {{ include "common.fullname" . }} --replicas=0 |
| MY_REPLICA_NUMBER=$(kubectl get statefulsets -n $NAMESPACE_ENV \ |
| {{ include "common.fullname" . }} -o jsonpath='{.status.replicas}') |
| echo "The the cluster has $MY_REPLICA_NUMBER replicas." |
| |
| while [[ ! $MY_REPLICA_NUMBER == "0" ]] |
| do |
| echo "The cluster is not scaled to 0 yet. Please wait ..." |
| MY_REPLICA_NUMBER=$(kubectl get statefulsets -n $NAMESPACE_ENV \ |
| {{ include "common.fullname" . }} -o jsonpath='{.status.replicas}') |
| echo "The current status of the cluster is $MY_REPLICA_NUMBER" |
| sleep 2 |
| if [[ $MY_REPLICA_NUMBER == "0" ]] |
| then |
| break |
| fi |
| done |
| |
| for (( index=0; index<$STS_REPLICA; index+=1 )) |
| do |
| kubectl delete pvc \ |
| "{{ include "common.fullname" . }}-data-{{ include "common.fullname" . }}-$index" |
| done |