Migrate Releases from Helm v2 to Helm v3¶
About this task
After upgrading a cluster, end users’ Helm releases are not upgraded from version 2. Run a custom script to migrate the end users’ Helm releases or installs to Helm v3.
Procedure
Install the /helm-2to3 plugin.
export HELM_LINTER_PLUGIN_NO_INSTALL_HOOK=true helm plugin install /usr/local/share/helm/plugins/2to3
Fetch existing helmv2 config.
cat >get_helmv2_config.sh<<'EOF' JSONPATH='{range .items[*]}{"\n"}{@.metadata.name}:{@.metadata.deletionTimestamp}{range @.status.conditions[*]}{":"}{@.type}={@.status}{end}{end}' ARMADA_PODS=( $(kubectl get pods -n armada \ --kubeconfig=/etc/kubernetes/admin.conf \ --selector=application=armada,component=api \ --field-selector status.phase=Running \ --output=jsonpath="$JSONPATH") ) if [ $#ARMADA_PODS[@] -eq 0 ]; then echo "$NAME: ERROR - Could not find armada pod." exit 1 fi# Get first available Running and Ready armada pod, with tiller container POD="" for LINE in "$ARMADA_PODS[@]"; do # match only Ready pods with nil deletionTimestamp if [[ $LINE =~ ::.*Ready=True ]]; then # extract pod name, it is first element delimited by : A=$( cut -d ':' -f 1 - <<< "$LINE" ) P=$A[0] else continue fi kubectl --kubeconfig=/etc/kubernetes/admin.conf \ cp armada/$P:tmp/.helm "$HOME"/.helm -c tiller RC=$? if [ $RC -eq 0 ]; then echo "$NAME: helmv2 config copied to $HOME/.helm" break else echo "$NAME: ERROR - failed to copy helm config from helmv2 (tiller) to host. (RETURNED: $RC)" exit 1 fi done EOF
Move the helm2 config to helm3.
~(keystone-admin)]$ helm 2to3 move config
Choose a Helm v2 release to migrate.
~(keystone-admin)]$ helmv2-cli -- helm list -a
Migrate a helm2 release, for example, myApplication.
~(keystone-admin)]$ migrate_helm_release.py myApplication
Note
The script
migrate_helm_release.py
is part of the StarlingX release package.Check if it migrated successfully.
~(keystone-admin)]$ helm list -A -a
The migrated release should not appear in helm2.
~(keystone-admin)]$ helmv2-cli -- helm list -a