Skip to main content

Install with Helm

Use the Helm chart to deploy Ferry alongside an OpenStack control plane on Kubernetes. Chart values specify database access, Keystone admin credentials, Ceph configuration and libvirt paths. Start with the preset for your distribution:

PresetDistributionDatabaseTested
openstack-helm.yamlOpenStack-Helmthe platform's MariaDBOpenStack-Helm 2025.1
rhoso.yamlRed Hat OpenStack Services on OpenShiftits own MariaDB 11.4, because the platform's Galera is 10.5RHOSO 18.0
atmosphere.yamlAtmospherePercona XtraDB 8.0not yet
genestack.yamlGenestackmariadb-operatornot yet
starlingx.yamlStarlingXthe platform's MariaDBnot yet
mosk.yamlMirantis MOSKthe platform's MariaDBnot yet
yaook.yamlYaookits own MariaDBnot yet

Untested presets are based on the distribution's source configuration. Verify their resource names and settings against your deployment before installing.

Before you install​

  • Install into the namespace OpenStack runs in (openstack on OpenStack-Helm). The chart reads the platform's own Secrets and ConfigMaps: the database admin password, the Keystone admin credentials and ceph.conf. Kubernetes does not share those across namespaces.
  • cert-manager must be installed. The chart creates a private certificate authority for the mTLS between movers, managers and compute agents. It is separate from the platform's CA, so no other component's certificate can act as one of the service's. Set pki.certManager.issuerRef to use an issuer of your own, or pki.provider: existing to supply every certificate yourself.
  • The database must be MariaDB 10.6+ or MySQL 8.0.16+. Enable database.embedded to run a MariaDB for the service alone where the platform's is older.

Install​

helm upgrade --install ferry deploy/helm/ferry -n openstack \
-f deploy/helm/ferry/presets/openstack-helm.yaml \
--set cloud.name=<cloud-name>

cloud.name is required and is recorded in every backup. With the release named ferry, the chart deploys:

WorkloadKindRole
ferry-managerDeployment, 2 replicasAPI, console, scheduling. Owns the database and the Keystone credential.
ferry-moverStatefulSet, 2 replicasReads disks, writes the repository.
ferry-computeDaemonSet on every hypervisorFreezes guests. Optionally reads local disks.
ferry-mariadbStatefulSetOnly with database.embedded.enabled.

On each rollout, the manager's init container creates any missing database, database account and Keystone service user. It assigns the service user admin and reader roles in the service project and creates the manager's application credential. The admin credentials reach only that init container. The manager then registers itself in the catalog under the service type backup and keeps that entry in place.

With ceph.keyrings.bootstrap.enabled, a Job creates the three cephx users from the Ceph admin key. They are the manager's, the movers' read-only one and the restore one. Without it, put the three keyrings in a Secret yourself (keys ceph.client.<user>.keyring) and name it in ceph.keyrings.existingSecret.

The rhoso.yaml preset creates the Keystone service user through a KeystoneService resource. All three Ceph identities use the cloud's existing openstack user, so movers inherit its write permissions on production pools.

Configure deployment values​

ValueDefaultMeaning
cloud.namerequiredThis deployment's name.
cloud.sitecloud.nameThe site movers take work from. Repositories are registered against it.
kms.drivernonenone, barbican or vault. See Encryption.
ceph.enabledtrueRead Ceph RBD directly.
ceph.pools.volumes / vms / imagesvolumes, vms, imagesCinder's, Nova's and Glance's pools.
compute.localDiskBackupfalseBack up and restore Nova's local disks through the compute agent. OpenStack-Helm's default instance disks are local qcow2 files.
api.ingress.* / api.route.*offExpose the API and the console. The catalog's public URL follows.
manager.extraConfig{}Merged over the manager's configuration, for anything without a value of its own.
credentials.existingSecretemptyA Secret holding the generated passwords, for renderers that cannot read the cluster (Argo CD, Flux).

The API listens on plain HTTP inside the cluster. Terminate TLS at the ingress or route.

Deploy compute agents on EDPM nodes​

On Red Hat OpenStack Services on OpenShift the hypervisors are EDPM nodes. The rhoso.yaml preset sets compute.daemonset: false and compute.edpm.enabled: true. The chart then renders an OpenStackDataPlaneService. It runs the compute agent under podman and systemd on the nodes of compute.edpm.nodeSets, opens its port in EDPM's firewall, and labels its files for SELinux.

Send the metrics to Prometheus​

With the Prometheus Operator in the cluster, three values connect the service to it. All three are off by default:

helm upgrade --install ferry deploy/helm/ferry -n openstack --reuse-values \
--set metrics.enabled=true \
--set metrics.serviceMonitor.enabled=true \
--set metrics.prometheusRule.enabled=true

metrics.enabled opens each manager's admin port on its pod's address, and each compute agent's on its node's address. It also adds a headless <release>-manager-admin Service. The movers' admin port is already on their Service. Keep these ports inside the cluster, with a NetworkPolicy where the namespace is shared. They carry every project's figures. metrics.serviceMonitor.enabled adds monitors for the managers, the movers and the compute agents. metrics.prometheusRule.enabled adds the alert rules. kube-prometheus-stack picks up only monitors and rules that carry its release label. Set it in metrics.serviceMonitor.labels and metrics.prometheusRule.labels.

Compute agents on EDPM nodes keep their admin port on loopback, and are not scraped.

Deployment limitations​

File-level browsing, movers in the storage fabric, and protection of object storage buckets are available on kolla-ansible deployments and not yet in the chart.

Upgrade​

helm upgrade with the new chart version rolls every workload together. Each mover and each compute agent waits until every manager runs its release or a newer one before starting. This keeps the order the service needs. compute.awaitManagers: false lets the agents start without waiting. See Upgrades.