Upgrading Rucio

Rucio’s base images are stored on DockerHub. Since DockerHub has pull rate limits, it is best to pull new images into a proxy cache. To do so (in Harbor), pull the image to the proxy-cache project, e.g. for release-1.29.6

docker pull harbor.srcdev.skao.int/rucio-dockerhub-cache/rucio/rucio-daemons:release-1.29.6
docker pull harbor.srcdev.skao.int/rucio-dockerhub-cache/rucio/rucio-server:release-1.29.6

Database Upgrade

For major version updates, the database schema may have changed. Database upgrades proceed via Alembic.

To upgrade, first create a new postgres client container and clone the release of the code that the server is being upgraded to inside this container.

Next, check the etc/alembic.ini.template file’s sqlalchemy.url fields and update to point to the Rucio application database with the correct credentials and schema. Rename this file to alembic.ini.

The Alembic revision should be in the database table alembic_version. This can be checked by issuing alembic current from inside the postgres client container, e.g.

alembic current
INFO  [alembic.runtime.migration] Context impl PostgresqlImpl.
INFO  [alembic.runtime.migration] Will assume transactional DDL.
2190e703eb6e (head)

and can be verified directly against the database by, e.g.

psql --host rucio-postgresql -U rucio -d rucio -p 5432
rucio=> SELECT * FROM test.alembic_version;
version_num
--------------
2190e703eb6e

If the two are consistent, the database can be upgraded via:

alembic upgrade head

Otherwise you will need to add this table and field manually to match the current version.

Server/Daemons Upgrade (k8s/helm)

Note

The assumption here is that the deployment uses the base Rucio images. This is currently not the case for our 1.29.* deployment.

First check the helm repository is up to date:

helm repo add rucio https://rucio.github.io/helm-charts
helm repo update

Update the values for image.repository and image.tag in the server yaml to point to the new images pushed to the proxy-cache, e.g.

image:
  repository: harbor.srcdev.skao.int/rucio-dockerhub-cache/rucio/rucio-server
  tag: release-X.Y.Z

And install:

helm upgrade --install server --namespace <namespace> rucio/rucio-server --version X.Y.Z -f /path/to/server/yaml

Likewise, do the same for the daemons:

image:
  repository: harbor.srcdev.skao.int/rucio-dockerhub-cache/rucio/rucio-daemons
  tag: release-1.29.6
helm upgrade daemons --namespace <namespace> rucio/rucio-daemons --version X.Y.Z -f /path/to/daemons/yaml