ohMyHelm: Helm Charts for 15-Factor Apps Without Kubernetes Complexity
TL;DR ohMyHelm is a universal Helm chart wrapper that delivers production-ready workloads without …

The transition from OTRS to Zammad is more than just a technical upgrade for many organizations – it’s a step towards a sovereign, modern, and highly available ticketing infrastructure. In this blog post, we describe in detail how we successfully migrated 50,000 tickets from a non-highly available OTRS 6 instance to a self-hosted Zammad instance running on Kubernetes.
We cover both the technical preparations and the challenges, best practices, and specific recommendations for anyone planning a similar journey.
OTRS has been a standard in the helpdesk environment for many years, but many companies are hitting the limits with OTRS 6: lack of a modern UI, limited scaling options, and often a lack of high availability. In contrast, Zammad offers:
Especially in the context of cloud-native environments and Kubernetes, Zammad showcases its strengths. With the official Helm Chart for Zammad, an instance can be quickly deployed and operated in a resilient, highly available, and scalable manner.
The challenge: A migration of this size cannot be performed via the Zammad web interface. The UI import function is suitable for smaller volumes, but with five-digit ticket numbers, it reaches its limits.
The solution: Migration via the OTRS migrator plugin and the Zammad Rails console.
To enable OTRS to provide the necessary data for Zammad, two plugins must be installed:
Instructions for installing packages in OTRS can be found here: OTRS Package Manager.
After installation, OTRS provides an API interface for the migrator, which Zammad will later retrieve.
Our Zammad instance is operated in Kubernetes with the Zammad Helm Chart. To start the import, we need access to the zammad-railsserver pod:
kubectl exec -it <zammad-railsserver-pod> -- /bin/bash rails c
In the opened Rails console, we configure the import parameters:
Setting.set('import_otrs_endpoint', 'https://otrs.example.com/otrs/public.pl?Action=ZammadMigrator') Setting.set('import_otrs_endpoint_key', 'API_KEY') Setting.set('import_mode', true) Setting.set('system_init_done', false)
This signals to Zammad: “The instance is fresh, not yet initialized, and we want to import data from OTRS.”
The actual import is also started in the Rails console:
Import::OTRS.start
Zammad now connects to the OTRS API and imports step by step:
With 50,000 tickets, this means: The database and Elasticsearch must be adequately sized.
shared_memory: at least 4 GBThese resources are not a luxury but a prerequisite for a performant migration and stable operation thereafter.
Once the import is complete, Zammad must be taken out of import mode:
Setting.set('import_mode', false) Setting.set('system_init_done', true) Rails.cache.clear
It is then recommended to restart the zammad-init pod:
helm upgrade <release-name> zammad/zammad
The zammad-init pod takes care of the reindexing in Elasticsearch, which can take some time with larger ticket volumes. Only after this is the full search functionality available in Zammad.
For many organizations, the switch to Zammad is the first step towards a fully cloud-native IT service landscape. The next logical steps can be:
TL;DR ohMyHelm is a universal Helm chart wrapper that delivers production-ready workloads without …
TL;DR The Cloud-Native community has established a comprehensive “software logistics” …
Five Key Features of Portainer 1. Docker Environments 2. Access Control 3. CI/CD Capabilities 4. …