diff --git a/doc/source/admintasks/kubernetes/migrate-releases-from-helm-v2-to-helm-v3-9984e7aa7374.rst b/doc/source/admintasks/kubernetes/migrate-releases-from-helm-v2-to-helm-v3-9984e7aa7374.rst index d55be93ac..67f7a14e7 100644 --- a/doc/source/admintasks/kubernetes/migrate-releases-from-helm-v2-to-helm-v3-9984e7aa7374.rst +++ b/doc/source/admintasks/kubernetes/migrate-releases-from-helm-v2-to-helm-v3-9984e7aa7374.rst @@ -1,57 +1,94 @@ -.. _migrate-releases-from-helm-v2-to-helm-v3-9984e7aa7374: - -======================================== -Migrate Releases from Helm v2 to Helm v3 -======================================== - -.. rubric:: |context| - -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. - -.. rubric:: |proc| - -#. Install the /helm-2to3 plugin. - - .. code-block:: none - - ~(keystone-admin)]$ mkdir plugin - wget https://github.com/helm/helm-2to3/releases/download/v0.9.0/helm-2to3_0.9.0_linux_amd64.tar.gz - pushd plugin/ - tar -xvzf ../helm-2to3_0.9.0_linux_amd64.tar.gz - mkdir bin - cp 2to3 bin - popd - export HELM_LINTER_PLUGIN_NO_INSTALL_HOOK=true - helm plugin install ./plugin - -#. Move the helm2 config to helm3. - - .. code-block:: none - - ~(keystone-admin)]$ helm 2to3 move config - -#. Choose a Helm v2 release to migrate. - - .. code-block:: none - - ~(keystone-admin)]$ helmv2-cli -- helm list -a - -#. Migrate a helm2 release, for example, myApplication. - - .. code-block:: none - - ~(keystone-admin)]$ ./migrate_helm_release.py myApplication - -#. Check if it migrated successfully. - - .. code-block:: none - - ~(keystone-admin)]$ helm list -A -a - -#. The migrated release should not appear in helm2. - - .. code-block:: none - - ~(keystone-admin)]$ helmv2-cli -- helm list -a +.. _migrate-releases-from-helm-v2-to-helm-v3-9984e7aa7374: + +======================================== +Migrate Releases from Helm v2 to Helm v3 +======================================== + +.. rubric:: |context| + +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. + +.. rubric:: |proc| + +#. Install the /helm-2to3 plugin. + + .. code-block:: none + + export HELM_LINTER_PLUGIN_NO_INSTALL_HOOK=true + helm plugin install /usr/local/share/helm/plugins/2to3 + +#. Fetch existing helmv2 config. + + .. code-block:: none + + 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. + + .. code-block:: none + + ~(keystone-admin)]$ helm 2to3 move config + +#. Choose a Helm v2 release to migrate. + + .. code-block:: none + + ~(keystone-admin)]$ helmv2-cli -- helm list -a + +#. Migrate a helm2 release, for example, myApplication. + + .. code-block:: none + + ~(keystone-admin)]$ migrate_helm_release.py myApplication + + .. note:: + + The script ``migrate_helm_release.py`` is part of the |prod| release + package. + +#. Check if it migrated successfully. + + .. code-block:: none + + ~(keystone-admin)]$ helm list -A -a + +#. The migrated release should not appear in helm2. + + .. code-block:: none + + ~(keystone-admin)]$ helmv2-cli -- helm list -a diff --git a/doc/source/usertasks/kubernetes/migrate-releases-from-helm-v2-to-helm-v3-a6066193c2a8.rst b/doc/source/usertasks/kubernetes/migrate-releases-from-helm-v2-to-helm-v3-a6066193c2a8.rst index 02d0c6b01..9db1cde95 100644 --- a/doc/source/usertasks/kubernetes/migrate-releases-from-helm-v2-to-helm-v3-a6066193c2a8.rst +++ b/doc/source/usertasks/kubernetes/migrate-releases-from-helm-v2-to-helm-v3-a6066193c2a8.rst @@ -1,57 +1,94 @@ -.. _migrate-releases-from-helm-v2-to-helm-v3-a6066193c2a8: - -======================================== -Migrate Releases from Helm v2 to Helm v3 -======================================== - -.. rubric:: |context| - -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. - -.. rubric:: |proc| - -#. Install the /helm-2to3 plugin. - - .. code-block:: none - - ~(keystone-admin)]$ mkdir plugin - wget https://github.com/helm/helm-2to3/releases/download/v0.9.0/helm-2to3_0.9.0_linux_amd64.tar.gz - pushd plugin/ - tar -xvzf ../helm-2to3_0.9.0_linux_amd64.tar.gz - mkdir bin - cp 2to3 bin - popd - export HELM_LINTER_PLUGIN_NO_INSTALL_HOOK=true - helm plugin install ./plugin - -#. Move the helm2 config to helm3. - - .. code-block:: none - - ~(keystone-admin)]$ helm 2to3 move config - -#. Choose a Helm v2 release to migrate. - - .. code-block:: none - - ~(keystone-admin)]$ helmv2-cli -- helm list -a - -#. Migrate a helm2 release, for example, myApplication. - - .. code-block:: none - - ~(keystone-admin)]$ ./migrate_helm_release.py myApplication - -#. Check if it migrated successfully. - - .. code-block:: none - - ~(keystone-admin)]$ helm list -A -a - -#. The migrated release should not appear in helm2. - - .. code-block:: none - - ~(keystone-admin)]$ helmv2-cli -- helm list -a +.. _migrate-releases-from-helm-v2-to-helm-v3-a6066193c2a8: + +======================================== +Migrate Releases from Helm v2 to Helm v3 +======================================== + +.. rubric:: |context| + +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. + +.. rubric:: |proc| + +#. Install the /helm-2to3 plugin. + + .. code-block:: none + + export HELM_LINTER_PLUGIN_NO_INSTALL_HOOK=true + helm plugin install /usr/local/share/helm/plugins/2to3 + +#. Fetch existing helmv2 config. + + .. code-block:: none + + 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. + + .. code-block:: none + + ~(keystone-admin)]$ helm 2to3 move config + +#. Choose a Helm v2 release to migrate. + + .. code-block:: none + + ~(keystone-admin)]$ helmv2-cli -- helm list -a + +#. Migrate a helm2 release, for example, myApplication. + + .. code-block:: none + + ~(keystone-admin)]$ migrate_helm_release.py myApplication + + .. note:: + + The script ``migrate_helm_release.py`` is part of the |prod| release + package. + +#. Check if it migrated successfully. + + .. code-block:: none + + ~(keystone-admin)]$ helm list -A -a + +#. The migrated release should not appear in helm2. + + .. code-block:: none + + ~(keystone-admin)]$ helmv2-cli -- helm list -a