AppCat Update – StackGres End of Life Announcement
10. Jun 2026
AppCat v4.188.0 is a smaller release focused on technical improvements under the hood – but it brings one important announcement for you: VSHN PostgreSQL with StackGres is reaching End of Life on 31 August 2026.
VSHN PostgreSQL with StackGres – End of Life as of 31 August 2026
VSHN PostgreSQL with StackGres will reach End of Life on 31 August 2026. All new PostgreSQL instances already use CloudNativePG – which became the default in the previous AppCat release. If you haven’t migrated yet, now is the time.
You have two options:
Migrate your existing instances yourself by following the migration guide.
The bigger picture: a maturing sovereign ecosystem
The move away from StackGres is part of the broader evolution of AppCat as the operational foundation of VSHN’s sovereign managed-services ecosystem.
If you want to understand where AppCat fits in the larger picture – from Framework 0.1 back in 2021 all the way to Servala and AppSlap 2.0 today – read our recent post: A guided tour through our digitally sovereign ecosystem.
Continuous improvements behind the scenes
As with most AppCat releases, v4.188.0 also includes a number of smaller technical improvements that keep the platform stable and maintainable. These are the kinds of changes that don’t make headlines but are exactly what keeps production workloads running reliably over time.
VSHN AppCat Update – CloudNativePG Becomes the New Default PostgreSQL
28. May 2026
The latest VSHN AppCat release v4.187.0 continues the platform’s transition toward a more Kubernetes-native PostgreSQL experience.
With this release, CloudNativePG officially becomes the default PostgreSQL implementation for all newly created PostgreSQL instances in AppCat. Existing instances remain unchanged, but new deployments will automatically use the CloudNativePG-based setup going forward.
This marks another important milestone in the maturation of PostgreSQL operations within AppCat.
CloudNativePG Now Default for PostgreSQL
CloudNativePG has steadily evolved within AppCat over the past releases and has now reached the point where it becomes the standard choice for new PostgreSQL deployments.
For users, this means:
New PostgreSQL instances automatically use CloudNativePG
Improved Kubernetes-native operations
Better long-term maintainability
Continued investment into the CloudNativePG ecosystem
Teams already running older PostgreSQL implementations can continue operating them normally, while migration planning can happen on their own timeline.
Improvements Across the Platform
Besides the PostgreSQL transition, the release also contains several operational improvements and fixes across the platform.
Better Garage CRD Version Handling
The release improves how Garage CRD versions are handled internally. This helps ensure more predictable behavior during upgrades and platform maintenance.
Improved topologyKey Handling for CloudNativePG
Topology handling for CloudNativePG deployments has been refined to improve scheduling consistency in Kubernetes clusters.
Better Warnings for enableSSHInRelease
The enableSSHInRelease handling now provides improved warning behavior, helping users better understand potential implications during deployments and maintenance operations.
Continuous Improvements Behind the Scenes
Many AppCat releases focus on operational excellence rather than flashy user-facing features – and that’s exactly what keeps production platforms reliable over time.
By making CloudNativePG the default PostgreSQL foundation and continuously refining platform behavior, AppCat keeps moving toward a more stable, Kubernetes-native and future-proof application platform.
Writing a Kubernetes Cluster Autoscaler Provider with externalgrpc
27. May 2026
Teaching Cluster Autoscaler to speak cloudscale.ch without forking the autoscaler or waiting for an upstream provider integration.
Introduction
What do you do when Kubernetes Cluster Autoscaler supports the scaling logic you need, but not the cloud provider you run on?
That was the problem behind this experiment. I wanted Cluster Autoscaler to work on cloudscale.ch. There was no upstream provider for it, and I did not want to fork the autoscaler or carry an in-tree provider forever.
The answer was externalgrpc: a cloud provider integration mode that lets Cluster Autoscaler keep its core decision logic while delegating cloud-specific actions to a separate gRPC service.
This post walks through how Cluster Autoscaler makes scaling decisions, what the provider contract looks like, how externalgrpc fits into the architecture, and the practical gotchas I ran into while building an autoscaler provider for cloudscale.ch.
The autoscaler knows when, not how
The first important mental model is this:
Cluster Autoscaler knows when the cluster should scale, but it does not inherently know how to create or delete machines.
The core autoscaler logic decides things like:
Are there pending Pods that cannot be scheduled anywhere?
Would those Pods fit on a node from a configured node group?
Has a node been idle long enough that its Pods could be moved elsewhere?
Which node group should be increased or decreased?
What it does not know is how to create a VM, which image to use, how to pass bootstrap data, how the node joins the cluster, or how to delete the machine again.
That part is delegated to a cloud provider plugin.
For large providers, there are already in-tree implementations. But if your provider is not on the list, you need another strategy.
What happens every 10 seconds
By default, Cluster Autoscaler runs a reconciliation loop roughly every 10 seconds. In each loop, it asks a set of questions:
Are there unschedulable Pods?
Would those Pods fit on a node from a configured node group?
If yes, call NodeGroupIncreaseSize(group, delta).
Are there nodes that have been idle for long enough?
Can their Pods be rescheduled elsewhere?
If yes, call NodeGroupDeleteNodes(group, nodes).
The provider does not make these decisions. The provider only receives the result of the decision, for example: “increase this node group by three nodes.”
That separation is useful. It means a provider implementation can stay relatively small. The hard Kubernetes scheduling logic remains in Cluster Autoscaler.
The simulator is the scheduler
Cluster Autoscaler does not reimplement Kubernetes scheduling from scratch. It imports the Kubernetes scheduler framework and uses the same kinds of filter logic the scheduler uses.
That includes scheduling constraints such as:
node resource fit
node affinity
taints and tolerations
topology spread constraints
inter-pod affinity
volume binding
node ports
volume limits
The autoscaler runs these checks against an in-memory snapshot of the cluster. For scale-down, it can simulate removing candidate nodes and see whether their Pods would fit elsewhere. For scale-up, it can simulate whether pending Pods would fit on a hypothetical node from a node group.
That is where one of the most important provider methods comes in: NodeGroupTemplateNodeInfo.
Node groups, flavours, and choosing what to scale
If the cloud provider supports multiple VM types, sizes, or flavours, the provider usually exposes those as separate node groups. For example, one node group might represent small general-purpose workers, another might represent larger memory-optimized workers, and another might represent nodes with different labels or taints.
Cluster Autoscaler then runs the simulation against the configured node groups. If more than one group could fit the pending Pods, the configured expander decides which group wins. Depending on configuration, that can be random, most-pods, least-waste, price, priority, or another supported strategy.
This gives you a useful amount of flexibility, but it is still not Karpenter. Cluster Autoscaler chooses from node groups that already exist as configured abstractions. Karpenter has a more dynamic provisioning model and can reason more directly about instance types, constraints, and provisioning choices.
So the mental model is:
Cluster Autoscaler: choose between predefined node groups
Karpenter: more dynamic node provisioning based on workload requirements and available instance types
For an externalgrpc provider, this means the provider should model each relevant cloudscale.ch flavour as a node group, return accurate template node information for each one, and let the autoscaler’s simulator and expander decide which group should grow.
Why externalgrpc?
If your cloud provider is not supported upstream, there are three realistic options:
Approach
What it means
Trade-off
Upstream in-tree provider
Add your provider to kubernetes/autoscaler
High review and maintenance burden, tied to upstream release cycles
Fork Cluster Autoscaler
Maintain your own autoscaler build
Maximum control, but you own the fork forever
externalgrpc
Run a standalone provider service over gRPC
Separate release cycle, language-agnostic, small provider surface
For cloudscale.ch, externalgrpc was the pragmatic option.
It avoids the need to become an upstream autoscaler maintainer. It avoids carrying a fork. And because the provider is just a gRPC service, it can be implemented in any language. In this case, I used Go.
At the time of writing, it also aligns well with where the autoscaler project appears to be heading. The ongoing SIG Autoscaling refactor proposal points toward splitting provider implementations out of the main autoscaler repository. In that future, providers would either consume the autoscaler core as a library or communicate out of process via externalgrpc.
For an independent provider implementation, that makes externalgrpc a good escape hatch.
Architecture
At a high level, the architecture looks like this:
Pending Pods
|
v
Cluster Autoscaler
|
| gRPC over mTLS
v
autoscaler-cloudscale
|
| cloudscale.ch REST API
v
cloudscale.ch VMs
|
v
VM boots, kubelet joins, CCM stamps providerID
The Cluster Autoscaler remains the brain. It watches the Kubernetes cluster, notices pending Pods, runs scheduling simulations, and decides whether a node group should grow or shrink.
The external provider is the hands. It receives requests from Cluster Autoscaler and performs cloud-specific actions:
list cloudscale.ch servers
create VMs
tag VMs
delete VMs
map Kubernetes nodes back to cloudscale.ch servers
The provider also needs configuration for node groups, for example:
In my setup, the VM bootstrap is handled through Talos Linux machine configuration passed as user data. The VM boots, Talos configures the node, kubelet joins the cluster, and the cloud controller manager stamps the node with a provider ID.
That provider ID is critical. Without it, the autoscaler cannot reliably connect a Kubernetes Node back to the corresponding cloud VM. Scale-down depends on this mapping.
The provider contract: six important RPCs
The externalgrpc proto contains more methods, but the core provider behavior is built around a small set of RPCs:
RPC
Purpose
Refresh
Reconcile provider state with the cloud
NodeGroups
Return configured node groups
NodeGroupForNode
Map a Kubernetes node to a node group
NodeGroupTemplateNodeInfo
Describe what a new node would look like
NodeGroupIncreaseSize
Create new servers for a node group
NodeGroupDeleteNodes
Delete specific servers
The remaining methods are either bookkeeping or can be implemented as explicit Unimplemented stubs, as long as the service satisfies the proto contract.
The most important design decision is to make the cloud provider the source of truth. Do not trust only local state. VMs can be manually deleted, failed creates can leave partial state, and API calls can fail halfway through.
In practice, Refresh lists servers from the cloud provider API, filtered by tags, and rebuilds the provider’s internal view.
Conceptually:
servers, err := api.Servers.List(ctx, cloudscale.WithTagFilter(tags))
if err != nil {
return err
}
byUUID := make(map[string]*cloudscale.Server, len(servers))
for i := range servers {
byUUID[servers[i].UUID] = &servers[i]
}
cache.Store(byUUID)
Tags are what scope the provider to the right cluster and node group. In this implementation, group membership is represented with a tag such as:
k8s-autoscaler-group=<name>
TemplateNodeInfo: modelling future nodes
When scaling from zero, there may be no real worker node in the cluster. So how can Cluster Autoscaler know whether a pending Pod would fit on a node that does not exist yet?
The provider has to describe what a future node would look like.
NodeGroupTemplateNodeInfo returns a synthetic Kubernetes Node object. This object tells the autoscaler things like:
CPU capacity
memory capacity
disk-related properties
labels
taints
allocatable resources
maximum Pod count
special devices or constraints
This is where the provider has to “lie” to the autoscaler, but only in a very specific sense. The node is not real yet. It is a placeholder used for scheduling simulation.
As an analogy, this is conceptually similar to the idea of virtual nodes: an object that represents capacity that is not currently a normal worker node. This is only an analogy, not Virtual Kubelet and not a real virtual-node implementation. Cluster Autoscaler does not schedule Pods onto this synthetic node. It uses the template to answer the question: “If I created a node like this, would these pending Pods fit?”
In other words, the template node is not runtime capacity. It is simulated future capacity.
One easy mistake is to expose the raw VM flavor as the node capacity without accounting for kubelet reservations, system reservations, or eviction thresholds. A VM with 8 GiB of memory does not have 8 GiB of allocatable memory for workload Pods.
Another easy mistake is forgetting to set ResourcePods. If the template node says it can run zero Pods, the autoscaler will correctly conclude that no workload can ever fit there.
That bug is wonderfully frustrating: everything looks wired up, the autoscaler runs, but nothing scales.
Creating nodes: target size first, VM later
When Cluster Autoscaler decides to increase a node group, it calls NodeGroupIncreaseSize with a delta.
The provider then needs to:
Increase the target size in its own node group state.
Create the requested number of VMs.
Tag them correctly.
Pass the bootstrap configuration.
Wait for the nodes to appear in Kubernetes.
Let Refresh reconcile the actual cloud state again.
It is important to distinguish three different states: desired capacity, in-flight capacity, and joined Kubernetes nodes. A VM may be requested but not yet visible, booting but not yet joined, or joined but not yet Ready. During that period, Cluster Autoscaler must not repeatedly create more and more machines every 10 seconds.
Cluster Autoscaler also has guardrails for failed provisioning. If a node does not join within the configured provisioning duration, the autoscaler can treat that scale-up as failed and move on.
Bootstrapping with Talos
In this implementation, node bootstrap is intentionally kept outside the autoscaler’s core logic.
The node group config contains the Talos machine configuration as user data. When autoscaler-cloudscale creates a VM, it passes that user data to cloudscale.ch. Talos then handles the rest:
boot the custom image
apply machine configuration
use the configured certificates and join tokens
start kubelet
join the Kubernetes cluster
This keeps the provider focused on VM lifecycle management rather than becoming a full cluster lifecycle engine.
The one hard requirement is that the cluster has a working cloud controller manager. It must stamp Kubernetes nodes with a provider ID, because that is the bridge between Kubernetes objects and cloudscale.ch servers.
No provider ID means no reliable scale-down.
Demo: scale from zero workers
The demo shows a Kubernetes cluster on cloudscale.ch starting with only a control plane node and no workers. Workload pressure is then applied to trigger the autoscaler and the external provider.
To generate that pressure, the demo deploys 50 replicas of the Kubernetes pause container with small CPU and memory requests – a deliberately boring Deployment that exists only to create scheduling demand.
The Pods could not be scheduled because there were no worker nodes. Cluster Autoscaler noticed the pending Pods, simulated whether they would fit on a node from the configured worker group, and called the external provider.
The provider created three cloudscale.ch VMs. They booted the Talos image, installed to disk, rebooted, joined the cluster, and eventually became Ready. At that point, Kubernetes could schedule some of the pending Pods onto the new workers.
The important part of the demo is not the exact terminal output. It is the separation of responsibilities:
Kubernetes produced pending Pods.
Cluster Autoscaler simulated future capacity using TemplateNodeInfo.
The expander selected a configured node group.
The externalgrpc provider created the cloudscale.ch VMs.
Talos bootstrapped the nodes into the cluster.
The CCM stamped provider IDs so the autoscaler could map Kubernetes nodes back to cloud VMs.
That makes the demo a useful validation of the whole architecture without turning the blogpost into a screen-recording transcript.
Gotchas
1. TemplateNodeInfo is easy to get subtly wrong
The autoscaler’s decision quality depends heavily on the synthetic node returned by NodeGroupTemplateNodeInfo.
If allocatable CPU or memory is too optimistic, the autoscaler may under-scale. If it is too pessimistic, it may over-scale. If ResourcePods is missing or zero, nothing will schedule at all.
This method feeds both scale-from-zero and the internal “upcoming node” logic. Treat it as part of the scheduling model, not as a cosmetic metadata method.
2. Tags are not optional
Tags are how the provider knows which cloud VMs belong to which cluster and node group.
Without consistent tags, Refresh cannot reliably reconcile state. Scale-down becomes dangerous because the provider cannot know which machine corresponds to which Kubernetes node.
3. The cloud is the source of truth
Local state is useful, but it is not authoritative.
Manual deletes, failed creates, partial outages, quota issues, and API timeouts all happen. Refresh should reconcile against the provider API every loop and rebuild the cache from reality.
4. Lock ordering matters
Provider implementations often keep shared caches plus per-node-group state. If multiple mutexes are involved, lock ordering needs to be consistent.
One subtle bug here was a potential deadlock between Refresh and target-size updates. The fix was to always acquire locks in the same order.
5. No CCM, no reliable scale-down
A cloud controller manager is not just a nice addition. It is what stamps the Kubernetes node with the providerID that lets the autoscaler map a Kubernetes Node to a cloud VM.
Scale-up can appear to work without a complete mapping. Scale-down will not be safe.
Takeaways
Writing a Cluster Autoscaler provider is less about reimplementing autoscaling and more about providing the missing cloud-specific glue.
Cluster Autoscaler already knows how to:
detect pending Pods
simulate scheduling
account for DaemonSets
apply backoff
choose node groups
avoid duplicate scale-ups
decide when nodes can be removed
The provider needs to know how to:
describe a future node accurately
create VMs
delete VMs
tag resources
reconcile cloud state
map Kubernetes nodes back to cloud resources
bootstrap machines into the cluster
With externalgrpc, that provider can live as a standalone binary with its own release cycle. For unsupported clouds, lab environments, private infrastructure providers, or sovereign cloud platforms, that is a very practical integration model.
In this case, the result was a small Go service that taught Cluster Autoscaler how to operate on cloudscale.ch without modifying the autoscaler itself.
The autoscaler remained the brain. The external provider became the hands.
That is the real value of externalgrpc. It is not the most glamorous integration point, but it is exactly the right abstraction when you want to keep autoscaling logic upstream and put cloud-specific lifecycle logic in your own hands.
If you’d like to dive deeper, check out the blog post on my personal blog, where I explore the topic in more detail.
Marco De Luca
Latest news
General
Open Source
Sovereignty
Open Source as State Policy: What the EU Strategy and the Swiss Ständerat Vote Mean for IT Decision-Makers
With AppCat v4.186.0, a lot happened behind the scenes. This release is less about visible UI changes and more about the foundation for what comes next: deeper Servala integration, improved storage operations, and new services on the horizon.
From enabling additional networking and storage capabilities for Servala, to preparing migrations from MinIO to Garage, to quietly introducing OpenBao support – this release is all about building the next layer of the platform.
A large part of this release focuses on extending the technical foundation behind Servala – Sovereign App Store.
Several new capabilities were added to AppCat to support future services and integrations, including generic object buckets, HTTPRoute, TCPRoute and TCP Gateway support.
While most of these improvements stay invisible to end users for now, they are important building blocks for providing more flexible, production-ready services through Servala in the future.
This is one of those releases where the impact will become more visible over time.
We have started gathering metrics and monitoring data for Garage object storage.
This allows us to improve alerting, operational visibility and reliability for managed object storage services.
At the same time, we are officially starting the migration path from MinIO to Garage.
Garage is becoming the future default for object storage services within AppCat and Servala. Existing users will hear from us soon to plan migrations together.
The goal is simple: improved operations, better scalability and a smoother long-term experience.
One small line in the changelog might actually hint at one of the most exciting additions in recent months: OpenBao.
The service is not publicly available yet, but the first building blocks are already landing in AppCat.
OpenBao is an open source fork of HashiCorp Vault, focused on open governance and community-driven development. For organizations looking at secure secret management, encryption and identity workflows without vendor lock-in concerns, this is a very interesting space to watch.
We are excited about the possibilities here – and more information will follow soon.
PostgreSQL with CloudNativePG Is Now Production Ready
Another major milestone: PostgreSQL by VSHN with CloudNativePG is now officially production ready.
Over the last months, CloudNativePG has evolved from a promising new PostgreSQL foundation into the default future direction for PostgreSQL services in AppCat.
With self service restore, operational maturity and migration tooling now in place, we recommend users start planning migrations to CloudNativePG-based PostgreSQL instances.
You can either follow the migration guide yourself or reach out to us if you want support with the transition.
Not every AppCat release is about flashy new features. Sometimes the most important work happens in the platform foundations: networking, observability, migrations, reliability and preparing the next generation of services.
AppCat v4.186.0 is exactly that kind of release.
And while some of the improvements may still stay invisible today, they are already shaping what users will be able to build and operate tomorrow.
VSHN AppCat Update – CloudNativePG PostgreSQL Reaches Full Maturity
28. Apr 2026
With AppCat v4.185.0, PostgreSQL based on CloudNativePG reaches full maturity. What started as a new foundation for running PostgreSQL on Kubernetes is now feature complete within AppCat.
A key step towards this milestone was closing the last remaining gap: self service restore.
Self Service Restore Completes the Feature Set
Self service restore for PostgreSQL was the final missing piece. With this feature now available, the CloudNativePG-based PostgreSQL service in AppCat is fully matured.
You can now restore your PostgreSQL instances yourself and test the process using the provided restore guide.
As part of this release, CloudNativePG PostgreSQL becomes the default database for new Nextcloud deployments.
This change only applies to newly provisioned instances. Existing setups remain unchanged.
When creating a new Nextcloud instance, it is still possible to connect to an already existing PostgreSQL database. For teams considering a migration, support is available when needed.
The release also addresses a practical issue in object storage handling.
Previously, buckets marked for deletion were not removed if they still contained data. As a result, these buckets continued consuming disk space.
With the introduction of garage cleanup, all objects within a bucket are deleted automatically once the bucket enters the deleting state. This allows the bucket to be removed properly and avoids leftover storage usage.
Summary
With self service restore now available, PostgreSQL with CloudNativePG in AppCat reaches full maturity. At the same time, it becomes the default choice for new Nextcloud deployments, while improvements like automatic bucket cleanup help address operational edge cases.
VSHN AppCat Update – Major PostgreSQL Upgrades and More Control over Costs
16. Apr 2026
Operating stateful services on Kubernetes has always been one of the more complex challenges – especially when it comes to databases like PostgreSQL.
With the latest VSHN AppCat release, we’re introducing a major milestone for our PostgreSQL offering based on CloudNativePG, along with improvements that give users more control over how their services are managed and operated.
This release focuses on three key areas: database lifecycle management, user control and cost optimization.
What is VSHN AppCat?
VSHN AppCat is the VSHN Application Catalog – a curated collection of production-ready applications that can be deployed and operated on Kubernetes with minimal effort.
Instead of manually installing and maintaining complex software stacks, AppCat allows teams to run services such as databases, identity providers or collaboration platforms as fully managed applications.
AppCat includes:
Automated operations and lifecycle management
Built-in monitoring, backup and maintenance
Consistent deployments across Kubernetes environments
This enables teams to focus on their applications, while VSHN handles the operational complexity behind the scenes.
Major PostgreSQL Version Upgrades with CloudNativePG
This release introduces a significant new capability for PostgreSQL in AppCat: major version upgrades using CloudNativePG.
For the first time, users can upgrade the major version of their PostgreSQL instances within the AppCat environment.
Major version upgrades are one of the more sensitive operations in database lifecycle management. Making this available as part of a managed service is an important step in enabling long-term, sustainable operations of PostgreSQL workloads on Kubernetes.
We’ve also introduced user management capabilities for PostgreSQL in our CloudNativePG-based offering.
While PostgreSQL itself has always supported user management, this functionality is now available and integrated within the AppCat-managed CloudNativePG setup.
This gives users more direct control over database access and roles within their managed PostgreSQL instances.
Operating databases and stateful services on Kubernetes is continuously evolving – and this release represents an important step forward.
With major version upgrades, integrated user management, and more control over backup infrastructure, AppCat continues to expand the capabilities of managed services on Kubernetes.
As always, the goal remains the same: making complex operations simpler, safer and more predictable for teams running production workloads.
Espejote (big mirror in Spanish) manages arbitrary resources in a Kubernetes cluster. Built from the ground up to take advantage of Server-Side Apply and Jsonnet templating.
VSHN manages a large fleet of Kubernetes clusters for our customers, and we try to automate as much as possible to keep our operations efficient and sustainable. We use GitOps principles, but sometimes external state needs to be merged into the desired state defined in Git. This GitOps journey took us from Ansible playbooks directly applying YAML, to various operators, to bash “reconcilers”, and finally to Espejote, our shiny new GitOps operator.
Chapter 1: The Ansible era and first operator attempts
In the beginning, we used Ansible playbooks and custom roles to manage our OpenShift 3 Kubernetes clusters. We had a set of YAML files that defined the desired state of our clusters, and we would run Ansible playbooks to apply those YAML files to the clusters. This worked, but it was not very efficient. We had to run the playbooks manually, and if we forgot to run them, the clusters would drift from the desired state.
The collection of roles was nicknamed “mungg”, the Swiss German word for “marmot”. Nobody seems to know why, but it stuck.
We were just getting into writing operators and developed espejo to quickly sync resources between namespaces. It was the very early days of our operator journey.
Chapter 2: The sea of operators and tears
To solve the problem of manual intervention (and because we migrated to OpenShift 4, where the install procedure doesn’t use Ansible anymore), we started looking into Kubernetes operators. It can’t be that hard to patch a Kubernetes manifest. Right? Wrong. Some of the operators were buggy, some of them were not flexible enough, some of them loved to randomly go into reconcile loops, and most of them used too many resources. Some of them crashed our API servers. We started with resource-locker-operator, migrated to patch-operator, generated outages with Kyverno, and tested all other policy engines we could find. Kubewarden was the only one we really liked, but the cluster context API was not yet flexible enough for our use cases.
Espejo had been a good start, but we did not yet have the experience to build well-designed operators. It showed. Every event triggered a full reconciliation of every resource, so syncing slowed down dramatically on larger clusters. We missed a lot of flexibility.
Chapter 3: Getting desperate for safe landings
We were fed up with the constant bugs and breaking changes in Kyverno, and patch-operator was barely maintained. Espejo was at its limits.
Desperate times called for desperate measures, so we started using an amalgamation of bash “reconcilers” – hacks with cron jobs, tiny custom controllers, and pre-processing resources in Project Syn.
A growing issue were our heavily patched OpenShift alerting rules. We curate upstream rules and only enable the ones we need. Some are heavily patched. Every OpenShift release the upstream definitions are moved around and are sometimes only available embedded into Go code. We needed something that was able to patch rules already deployed in the cluster, as this was the only stable interface we had.
Chapter 4: Espejote, the shiny new GitOps operator
Bolstered by our growing operator experience and our love for Jsonnet, we decided to build our own operator to rule them all. We wanted something that was flexible, efficient, and easy to use. We wanted something that could handle all our use cases, from syncing resources between namespaces to patching OpenShift alerting rules.
Espejote is the result of that journey. It merges cluster state with GitOps principles, using Jsonnet to define the desired state of our clusters. It efficiently caches cluster state, and the reconcile trigger logic is explicitly defined. Sane controller-runtime rate limits apply. Jsonnet allows a huge amount of flexibility, and native server-side apply makes adding and removing keys a breeze. Every Espejote “resource manager” – the dynamic controller spawned for a config unit – uses its own ServiceAccount for least privilege.
Espejote is the operator we always wanted, and we are excited to share it with the world.
What is Espejote?
Espejote is a Kubernetes operator allowing you to manage arbitrary resources in a Kubernetes cluster. It can mix GitOps principles with in-cluster state.
Why Espejote?
There are plenty of similar tools (and policy engines), but Espejote sets itself apart by focusing on three core pillars:
1. Powered by Jsonnet
Espejote uses Jsonnet as its templating engine. Unlike YAML combined with Go templates, Jsonnet treats the configuration as a data structure. It understands objects, arrays, and strings. It can’t accidentally generate broken YAML because Jsonnet ensures the internal data structure is valid before it ever exports the final file.
2. Native Server-Side Apply
Espejote is built from the ground up to leverage server-side apply (SSA). This means Espejote plays nicely with other controllers and operators. It can manage a single annotation or an entire resource; SSA ensures that the changes are merged without stomping on other tools.
3. Reliability
Reliability isn’t an afterthought. Espejote was born out of the frustration of watching operators enter infinite reconcile loops or crash clusters. It features:
Sane rate limiting and backoff strategies.
Every configuration unit or “resource manager” runs its own dynamically spawned controller, so a misbehaving unit won’t affect others.
Least privilege: Every resource manager runs with its own ServiceAccount.
Explicit control: There are no implicit watches or “magic” triggers. You have complete control over what gets reconciled and when.
Real-World Use Cases
What can you actually do with Espejote? Here are a few ways VSHN is using it in production:
Secret Syncing: Automatically replicate specific secrets (like image pull secrets or certificates) across multiple namespaces.
Autoscaler Patching: Patching the OpenShift Cluster Autoscaler using Admission Webhooks.
Alerting Rule Management: Curate and patch OpenShift alerting rules across different cluster versions.
The Future: WASM and Beyond
The roadmap includes a kro-like API builder for easy custom resource creation and support for WebAssembly plugins, which will allow developers to write custom logic in almost any language and run it safely within the Espejote controller.
This example ManagedResource patches the RedHat OperatorHub config singleton to disable all default sources. It shows the simplest usecase of unconditionally patching a static manifest. More complex use cases can be found in the above getting started section.
VSHN AppCat Update – Enhancing PostgreSQL Flexibility and Platform Safety
13. Apr 2026
Running applications on Kubernetes is not just about deploying them – it’s about operating them reliably over time. That includes managing databases, handling authentication, and ensuring that services evolve safely without breaking changes.
With the latest VSHN AppCat release, we’re introducing improvements that focus on database flexibility, better integration capabilities and safer operations across the platform.
As always, many of these enhancements happen behind the scenes – but they directly improve how teams work with and operate their services.
What is VSHN AppCat?
VSHN AppCat is the VSHN Application Catalog – a curated collection of production-ready applications that can be deployed and operated on Kubernetes with minimal effort.
Instead of manually installing and maintaining complex software stacks, AppCat enables teams to run services like databases, identity providers or collaboration platforms as fully managed applications.
This includes:
Automated operations and lifecycle management
Built-in monitoring, backup and maintenance
Consistent deployments across Kubernetes environments
This allows teams to focus on their applications, while VSHN takes care of operating the underlying services.
One of the key improvements in this release focuses on PostgreSQL powered by CloudNativePG.
We’ve introduced additional configuration options for PostgreSQL extensions, allowing users to enable and configure extension-specific libraries where required. This provides greater flexibility for teams that rely on advanced PostgreSQL features.
In addition, support for VACUUM operations has been improved and is now more clearly integrated into scheduled maintenance processes. Regular VACUUM operations are essential for maintaining database performance and storage efficiency over time.
Together, these improvements give users more control over how their PostgreSQL instances behave – without sacrificing the benefits of a managed service.
Improved Integration with Forgejo
This release also enhances integration capabilities for developer platforms.
We’ve added support for configuring OAuth2 clients in Forgejo, making it easier to integrate Forgejo-based services with external identity providers and authentication systems.
This is particularly useful for teams that want to connect their development workflows with centralized identity management solutions.
Safer Operations for Nextcloud
Operating applications reliably also means preventing unsafe configurations.
With this release, we’ve introduced a safeguard for Nextcloud: major version downgrades are now explicitly blocked.
Since Nextcloud itself does not support downgrades between major versions, allowing them at the platform level could lead to broken instances or data inconsistencies. By enforcing this constraint, AppCat helps ensure that upgrades remain safe and predictable.
For users, the guidance is simple: stay up to date and follow the supported upgrade paths when moving between major versions.
Operating applications on Kubernetes is an ongoing process of refinement.
This AppCat release focuses on increasing flexibility where it matters – and enforcing safety where it’s critical. From more configurable PostgreSQL extensions to safer upgrade paths and improved integrations, these changes help teams operate their services with greater confidence.
As always, VSHN AppCat continues to evolve to make running production workloads on Kubernetes simpler, more reliable and more consistent.
VSHN AppCat Update – Improving Reliability, Operations and Developer Platforms
16. Mar 2026
Operating modern applications on Kubernetes is powerful – but it also comes with complexity. Databases, identity services, collaboration platforms and developer tools all require careful lifecycle management, upgrades, monitoring and security configuration.
That’s exactly where VSHN AppCat comes in.
With the latest release of AppCat, we’re introducing several improvements that further strengthen the reliability and operational consistency of the applications running on the platform.
While many of the changes happen behind the scenes, they directly improve the day-to-day experience of teams running production workloads on Kubernetes.
What is VSHN AppCat?
VSHN AppCat is the VSHN Application Catalog – a curated collection of production-ready applications that can be deployed and operated on Kubernetes with minimal effort.
Instead of installing and maintaining complex software stacks manually, AppCat allows teams to deploy widely used services such as databases, identity providers, collaboration platforms or developer tools as fully managed applications.
AppCat provides:
Production-ready Kubernetes deployments
Automated operations and lifecycle management
Built-in monitoring, backup and maintenance processes
Consistent deployments across Kubernetes environments
This means platform teams and developers can focus on building and running their applications while VSHN takes care of the operational complexity behind the scenes.
Reliable operations require good alerting – but alerts should be actionable, not overwhelming.
In this release we improved end-user alerting behaviour, reducing alert noise while keeping important signals visible. For example, alerts for storage capacity issues previously triggered every minute. While technically correct, this behaviour often resulted in unnecessary alert noise.
The new configuration adjusts the interval to 15 minutes, reducing alert flapping while still giving users enough time to react to potential issues.
If you haven’t configured alerting for your AppCat instances yet, we strongly recommend enabling it.
Improving PostgreSQL Reliability
Several improvements in this release focus on making PostgreSQL operations more robust.
One issue could occur when multiple databases were created simultaneously. In rare situations this could lead to race conditions during user management. By adjusting the database bootstrap process and using a more suitable template database, this issue has now been resolved.
These kinds of improvements might be invisible to users – but they are essential for making platform operations reliable at scale.
CloudNativePG for Keycloak
We also improved the PostgreSQL backend used by the Keycloak identity service in AppCat.
New Keycloak instances will now use CloudNativePG, a Kubernetes-native PostgreSQL operator designed specifically for cloud-native environments.
Existing Keycloak installations remain unchanged and continue to operate normally. The new backend will automatically be used when new Keycloak instances are created.
This release also includes updates to Forgejo and Codey, ensuring that these services run on supported upstream versions.
What is Codey?
Codey is VSHN’s European code collaboration platform, built on the open-source Forgejo project.
Instead of operating their own Git platform, teams can run fully managed Forgejo instances operated by VSHN, including monitoring, backups and lifecycle management.
Codey provides features such as:
Git repository hosting
Pull requests and code reviews
CI/CD compatible with GitHub Actions workflows
Package and container registries
Integrated project management tools
Codey runs on European cloud infrastructure, including Switzerland, helping organizations maintain control over their development data while benefiting from a fully managed service.
The release also includes improvements to the security configuration of the Nextcloud cronjob.
Previously the job could run with incorrect user permissions in some Kubernetes environments. The new configuration ensures the job runs with the correct security context, improving compatibility across Kubernetes platforms such as vanilla Kubernetes and OpenShift.
For services that include PostgreSQL dependencies – such as Keycloak and Nextcloud – we fixed edge cases where maintenance windows could slightly deviate from the configured schedule.
Maintenance operations are now handled more consistently across dependent services.
Continuous Platform Improvements
Operating applications reliably on Kubernetes requires constant refinement of automation, observability and operational processes.
This AppCat release focuses on exactly that: improving reliability, consistency and operational experience across the platform.
While many improvements happen behind the scenes, they ultimately help teams run critical services more safely and with less operational overhead.
If you’re looking for a simpler way to run production-ready services on Kubernetes, VSHN AppCat provides a proven foundation.
With more than 3,000 members in the meetup group, the CNC Switzerland community continues to bring together platform engineers, DevOps practitioners, architects, and open-source enthusiasts from across the Swiss cloud-native ecosystem.
The March edition featured four talks covering topics from Kubernetes security and networking to platform engineering and MLOps.
Opening and Community Updates
Aarno Aukia and Patrick Mathers – VSHN
The meetup kicked off with a short welcome and community update by the organizers. As always, the CNC Switzerland meetup follows a few important principles:
All talks are technical and open-source focused
No product or sales pitches
Talks are held in English
Speakers from diverse backgrounds are strongly encouraged
These principles help keep the meetup a true technical community event rather than a marketing stage.
Janne Kataja from SIX explained how applications can implement hot reloading of TLS certificates, allowing certificates stored in Kubernetes Secrets to be updated without restarting pods.
Instead of forcing service restarts during certificate renewals – which can introduce downtime and operational risk – hot reload mechanisms detect changes in mounted secret volumes and reload certificates dynamically.
This approach enables:
seamless certificate rotation
higher availability
the use of shorter-lived certificates for improved security
The talk demonstrated how relatively small architectural decisions can significantly improve reliability and operational resilience.
Application-Centric Platforms with OAM and KubeVela
The second session explored a topic that is gaining traction across many organizations: platform engineering and internal developer platforms.
Raffael Klingler from AXA introduced the Open Application Model (OAM) and how it shifts the focus from Kubernetes infrastructure toward application-centric definitions.
Instead of writing complex Kubernetes manifests, developers define applications using modular building blocks. These definitions are then rendered into deployable infrastructure resources using KubeVela.
The talk showed how this approach allows organizations to:
standardize application deployment patterns
reduce Kubernetes complexity for developers
integrate cloud services and GitOps workflows
As more companies build internal developer platforms, models like OAM illustrate how Kubernetes can become more accessible and developer-friendly.
DevOps for AI: Running ML in Production with Kubeflow
Fabrizio Lazzaretti (Wavestone) & Marco Crisafulli (enki)
AI is everywhere right now, but turning machine learning experiments into reliable production systems remains difficult.
Fabrizio Lazzaretti and Marco Crisafulli explored how MLOps practices and Kubeflow help bridge the gap between data science experimentation and production-grade systems.
The session demonstrated how Kubeflow enables:
reproducible ML pipelines
collaboration between teams
automated training workflows
integration with the broader CNCF ecosystem
Using a real end-to-end example, the speakers showed how organizations can move from ad-hoc AI experiments to repeatable, scalable ML platforms running on Kubernetes.
The talk highlighted a key insight: AI systems still need strong DevOps foundations.
The final talk addressed a major architectural shift happening in the Kubernetes networking ecosystem.
Urs Zurbuchen from Airlock explained why the traditional Ingress model – often powered by the NGINX Ingress Controller – is reaching its limits.
Many Kubernetes users have experienced challenges such as:
configuration complexity
heavy reliance on annotations
security issues in older controller implementations
The emerging Gateway API aims to address these limitations with a more structured and extensible networking model.
The talk walked through:
the architectural improvements of Gateway API
why it is becoming the future standard
migration considerations for existing Kubernetes clusters
For many attendees, this session provided a helpful overview of where Kubernetes networking is heading next.
Networking and Apéro
After the talks, participants stayed for networking and the traditional Swiss meetup apéro, continuing discussions about Kubernetes, platform engineering, and the rapidly evolving cloud-native ecosystem.
Meetups like these highlight the strength of the Swiss cloud-native community: engineers from different companies sharing real-world experiences, lessons learned, and open-source solutions.
DevOps for AI: Running LLMs in Production with Kubernetes and Kubeflow
9. Mar 2026
Large Language Models (LLMs) are rapidly becoming part of modern software systems. From chatbots and copilots to retrieval systems and AI agents, organizations are integrating generative AI into real production environments. But while building AI prototypes has become easier than ever, operating LLMs reliably in production remains a serious challenge.
At Kubernetes Community Days New York, Aarno Aukia shared practical insights into what it takes to run LLMs using proven DevOps practices. His talk highlighted an important reality: AI systems still need strong DevOps foundations – perhaps even more than traditional software systems.
Aarno Aukia’s talk at KCD New York
DevOps Meets AI
DevOps has always been about bridging the gap between development and operations. Developers focus on building application logic and managing data, while operations teams ensure that software runs reliably in production. Over the past decade, DevOps practices have matured around automation, observability, and continuous delivery.
In many organizations today, software follows a well-established pipeline: developers commit code to Git, automated CI/CD pipelines build and package the application, and Kubernetes deploys and runs it in production. Monitoring and logging systems then provide visibility into how the application behaves, allowing developers to continuously improve it.
This feedback loop has become the backbone of modern cloud-native development.
When AI enters the picture, however, the model changes in several important ways.
AI Systems Behave Differently
One of the biggest differences between traditional applications and AI-driven systems is determinism. Traditional software behaves predictably: given the same input, it produces the same output every time. LLMs behave very differently.
Large language models are probabilistic systems. They generate responses by predicting the next token based on context, effectively making statistical decisions about what comes next. This means that even small changes in prompts or user input can produce very different results.
A seemingly harmless modification to a system prompt can completely change the behavior of a model. In one example, simply adding a seasonal theme to a chatbot prompt caused the model to fail at answering basic questions.
For operations teams, this creates a new category of complexity. Instead of debugging deterministic systems, they now have to manage systems whose outputs can change subtly depending on context.
Testing therefore becomes significantly more complicated.
The Challenge of Testing AI
Traditional software testing is relatively straightforward. A test provides an input and verifies that the output exactly matches an expected value.
AI systems do not fit into this model. When an LLM generates an answer, the output might be correct even if the exact wording differs from what was expected. At the same time, the response could contain subtle factual errors or hallucinations.
Determining whether an answer is acceptable often requires semantic evaluation rather than strict comparisons. In some cases, organizations even use another LLM to evaluate the output of the first one. This introduces an entirely new testing paradigm that many teams are still learning how to manage.
More Artifacts to Manage
AI systems also introduce additional artifacts that must be tracked and versioned.
In traditional DevOps pipelines, the primary artifacts are source code and container images. With AI workloads, teams must also manage datasets, training artifacts, prompts, and model files. These models are often very large, sometimes tens of gigabytes in size, and must be stored and versioned carefully.
Without proper versioning, it becomes extremely difficult to debug issues or reproduce results later. If a model behaves unexpectedly, teams need to know exactly which model version, dataset, and configuration were used during deployment.
This dramatically increases the operational complexity of AI systems.
Observability Becomes Critical
Because LLMs are non-deterministic, observability becomes even more important than in traditional systems.
Logging must capture far more context than before. Instead of logging only application events, teams may need to record the full prompt, the model response, the model version, and the surrounding configuration. This allows operators to reconstruct what happened when something goes wrong.
Without detailed observability, debugging AI systems can quickly become impossible.
Open Models vs Hosted APIs
Another important operational consideration is the choice between closed and open models.
Hosted AI APIs offer convenience and powerful capabilities, but they also come with trade-offs. In many cases, organizations cannot control exactly when model updates happen or which minor version is running at a given time. This can make debugging and reproducibility difficult.
Open-weight and open-source models provide more operational control. They can be downloaded, versioned, tested locally, and deployed on internal infrastructure. This allows organizations to decide when and how updates are rolled out.
For many regulated industries such as finance, healthcare, or government, this level of control is essential.
Kubernetes as the Foundation
This is where Kubernetes becomes an important part of the AI infrastructure stack.
Kubernetes already solves many of the operational challenges associated with running distributed systems. It provides mechanisms for container orchestration, resource management, autoscaling, and fault tolerance. Importantly for AI workloads, it can also manage GPU resources.
Kubeflow extends Kubernetes with specialized components for machine learning workflows. It helps manage the entire lifecycle of AI models, from training to production inference.
Kubeflow Pipelines allow teams to automate workflows for model development and training. These pipelines can orchestrate complex processes such as data preprocessing, training runs, evaluation steps, and packaging models for deployment.
For many organizations using LLMs, however, the main focus is not training models but serving them reliably in production.
This is where KServe plays a key role.
Serving LLMs with KServe
KServe is a Kubernetes-native model serving framework that simplifies deploying and operating AI models. It allows teams to run inference services on top of Kubernetes using standard APIs.
A typical deployment consists of a container running a model server, often based on runtimes such as vLLM. The container loads the model, uses GPU resources for inference, and exposes an API endpoint for applications.
KServe integrates with Kubernetes autoscaling mechanisms and observability tools, making it possible to scale AI workloads dynamically and monitor their behavior in production.
Because everything runs as Kubernetes resources, teams can apply the same DevOps practices they already use for other applications.
A Rapidly Evolving Ecosystem
The ecosystem around AI infrastructure is evolving extremely quickly. New projects are emerging to address the unique challenges of running LLMs at scale.
One example is LLMD, a Kubernetes operator specifically designed for LLM inference. It builds on existing technologies such as vLLM but adds specialized capabilities like request routing, model selection, caching, and intelligent scaling.
These kinds of tools illustrate how the cloud-native ecosystem is adapting to the operational needs of AI workloads.
AI Still Needs DevOps
Despite the hype surrounding generative AI, one lesson is clear: AI systems still require strong operational foundations.
Running LLMs in production involves far more than simply calling an API. It requires careful management of models, infrastructure, observability, and deployment processes.
Kubernetes and Kubeflow provide a powerful platform for addressing these challenges. By applying proven DevOps principles to AI systems, organizations can build platforms that are not only intelligent but also reliable and scalable.
As AI becomes a standard component of modern applications, the ability to operate these systems effectively will become just as important as the models themselves.
This is also where platform approaches come into play. Instead of every team building and operating complex stacks themselves, platforms can provide ready-to-use services on top of Kubernetes. One example is Servala – Sovereign App Store, a Kubernetes-native marketplace that connects organizations with a catalog of managed cloud-native services such as databases, storage, developer tools, and AI-ready infrastructure components.
Markus Speth
Marketing, Communications, People
Latest news
General
Open Source
Sovereignty
Open Source as State Policy: What the EU Strategy and the Swiss Ständerat Vote Mean for IT Decision-Makers
How we used Crossplane for the things we should not have
30. Sep 2025
At Swiss Cloud Native Day 2025 in Bern, our colleague Liene Luksika shared an honest and entertaining story about VSHN’s journey with Crossplane. What started as a simple use case evolved into a complex architecture, full of learnings, mishaps, and valuable lessons for anyone building managed services on Kubernetes.
From healthcare to cloud native
Liene comes from the healthcare sector, so when she joined the cloud native world at VSHN, she had to quickly get used to Kubernetes lingo – namespaces, instances, and of course, the obsession with laptop stickers. Luckily, VSHN has been around for more than 10 years, providing 24/7 managed services and building cloud native platforms for customers in Switzerland, Germany, and beyond.
Why Crossplane?
As customers increasingly asked VSHN to run their software as a service – databases, Nextcloud, and other critical apps – we needed a solid way to provision and manage infrastructure across private and public clouds. Crossplane seemed like the perfect fit:
It lets engineers define desired state vs. observed state
It automatically reconciles the two – like making coffee appear if that is your desired state
It provides flexible building blocks to expose clean APIs for managed services on Kubernetes
VSHN has used Crossplane in production since early 2021 (around v0.14) and runs the Crossplane Competence Center in Switzerland.
The evolution: from simple to complex
Our first use case was straightforward: a customer wanted two types of databases (Redis and MariaDB), T-shirt sized, no extras. Crossplane handled this beautifully.
Then reality hit. Customers wanted backups and restores, logs and metrics, alerting, maintenance and upgrades, scaling and user management, special features like Collabora for Nextcloud, and the freedom to choose infrastructure. To serve this, we adopted a split architecture:
A control cluster for all Crossplane logic
Separate service clusters for customer workloads
This runs today with customers like health organizations in Gesundheitsamt Frankfurt and HIN in Switzerland, on providers such as Exoscale and Cloudscale, keeping data sovereign and operations reliable.
When things go wrong
Building complex platforms means learning in production:
Deletion protection surprise: a minor Crossplane change removed labels before deletion, wiping our safeguard. Backups saved the day
Race conditions: a split approach to connection details occasionally made apps unreachable until we cleaned up code
The big one: during a planned “no-downtime” maintenance for a fleet with 1’300+ databases, objects hit an invalid state and Kubernetes garbage collection deleted 230 database objects. Some restores were fresh, some older. We pulled in 20 people overnight, communicated openly, and recovered together with the customer
Key lessons: test at realistic scale and keep recent, tested backups. Also, practice the restore path, not just the backup.
Crossplane 2.0 – where next?
Crossplane 2.0 introduces major breaking changes. Staying put is not an option, but migrating means real effort, especially for our split control plane architecture. We are evaluating whether Crossplane 2.0 fits our needs or if alternatives are a better match. As always, we will document our decisions openly in VSHN’s Architecture Decision Records.
Final thoughts
Cloud native success is not just about tools. It is about learning fast, designing for failure, and communicating clearly with customers. Crossplane has enabled a lot of innovation for us, and it has also tested us. Whether we proceed with Crossplane 2.0 or chart a different course, we will keep building sovereign, reliable, open managed services for our customers.
👉 Watch the whole video on YouTube:
Markus Speth
Marketing, Communications, People
Latest news
General
Open Source
Sovereignty
Open Source as State Policy: What the EU Strategy and the Swiss Ständerat Vote Mean for IT Decision-Makers
Now Available: DevOps in Switzerland Report 2025 🚀
25. Jun 2025
We’re absolutely thrilled to release the sixth edition of our “DevOps in Switzerland” report – and this time with a special focus on Platform Engineering and Artificial Intelligence (AI)! 🤖
From January to April 2025, we conducted a study with professionals from the Swiss tech community. The result: valuable insights into how DevOps teams in Switzerland work today – what tools they use, how their teams are structured, the challenges they face, and where AI is already being used in practice.
💡 Want a sneak peek?
💡Swiss companies are no longer asking whether to adopt DevOps – they’re asking how to scale it.
📈 Platform Engineering and AI are reshaping how teams ship software faster, safer, and smarter.
💡1 in 3 Swiss DevOps teams already use AI in production – for code reviews, CI/CD optimization, and architecture support. Another third are gearing up to follow.
💡54% of Swiss companies now have dedicated Platform Engineering teams.
Internal Developer Platforms (IDPs) are becoming the secret weapon for enabling autonomy and reducing complexity.
💡 Devs say yes to AI! 79% of Swiss developers are comfortable using AI in their workflows – but only 20% believe it’s fully ready.
The report shows: AI is promising, but needs better measurement and trust to scale.
You’ll find all of this (and much more!) in our compact PDF report (available in English only). Just like last year, the report begins with an executive summary – perfect for those short on time.
Redis 8 Now Available in the VSHN Application Catalog – Open Source Is Back!
11. Jun 2025
We’re thrilled to announce that Redis 8 is now available through the VSHN Application Catalog – and this release is a special one: Redis is officially open source again!
But that’s not all: Redis is now also available on Servala – the open, cloud-native service hub operated by VSHN, connecting developers, software vendors, and cloud providers across multiple infrastructures.
Why This Is a Big Deal
For years, Redis has been one of the most popular in-memory databases for developers and DevOps teams alike. However, licensing changes in previous versions created friction for open ecosystems and cloud-native users. With version 8, that’s finally changing: Redis has returned to its open source roots, now licensed under the GNU AGPLv3.
“Redis 8 brings Redis back to its open source roots. All future development of Redis will happen under the AGPLv3 license.” – Redis team, official announcement
This means greater transparency, broader collaboration, and long-term sustainability for users who rely on Redis as a key part of their stack.
Redis 8 with VSHN and Servala: Fully Managed, Highly Available
With Redis 8 now available in both the VSHN Application Catalog and on Servala, you get more than just the latest open source release:
Production-grade deployments on Kubernetes and OpenShift
Guaranteed availability, monitoring, and automated failover
Lifecycle management, including upgrades and security patches
Cloud provider flexibility – deploy in your infrastructure or through partners
Self-service provisioning via Servala with built-in automation
Whether you’re running Redis as part of your internal platform, or offering it to teams and customers, we’ve got you covered.
Supported Versions
We continue to support the most widely used Redis versions, with Redis 8 now part of our officially maintained portfolio. Check out the complete list of supported versions on the VSHN Redis product page and the Servala Redis page.
Why Choose Redis 8 via VSHN or Servala?
✅ Fully open source and community-driven again
✅ Kubernetes-native, GitOps-ready deployments
✅ High availability, failover, and backup strategies included
✅ Integrated with your infrastructure, or offered as a managed service
✅ Supported by VSHN, the DevOps experts behind Servala
Redis 8 is a major milestone for the open source world – and we’re proud to bring it to your production environment through VSHN and Servala.
The Technical Challenges Behind Servala: Standardizing Application Delivery
14. Apr 2025
In this follow-up to our Servala introduction, we explore the technical challenges of bringing managed services to cloud providers everywhere. Discover how the repetitive and inconsistent nature of application packaging, deployment, and operations inspired our vision for standardization.
We explore the problems platform engineers face today, including inconsistent container behaviors, unpredictable Helm charts, and the chaos of day-2 operations across security, configuration, and dependencies.
Learn how Servala’s proposed open standards will transform the landscape for:
Software vendors – Accelerating time-to-market and expanding reach without operational overhead
Cloud providers – Enriching service catalogs with enterprise-grade managed services
End users – Enjoying self-service freedom with consistent, secure, and compliant applications
Join us on this journey to simplify application delivery and make managed services accessible to everyone.
In our introduction to Servala, we mentioned the technical challenges of enabling software vendors to onboard themselves onto our platform. As we continue building Servala in 2025, we’re tackling the most fundamental challenge: creating a standardized approach to application delivery. Let’s explore these challenges and our proposed solution in more detail.
The Repetitive Nature of Application Management
Over the past years at VSHN, we have taken care of numerous applications as part of our managed services offering that now forms the foundation of Servala. For every single application, we had to do the same tedious tasks:
Packaging: Prepare the application in a deployable format, typically by creating an OCI-compliant container image compatible with Docker, Podman, Kubernetes, and OpenShift. Automate the packaging process to trigger whenever a new version is available.
Deployment: Deploy the packaged application to the target system, typically through automated processes rather than manual steps. Most deployments span multiple environments, such as test, staging, pre-prod, and production, or support self-service provisioning for SaaS. This process often involves creating Helm Charts and setting up automation pipelines or APIs provided by tools like Kubernetes operators (e.g., Crossplane).
Day-2 Operations: After deployment, ongoing responsibilities include collecting metrics, setting up alerts, updating the application, scaling in response to performance issues, backing up and restoring data, analyzing logs, offering 24/7 support, and ensuring compliance with various standards, along with many other operational tasks.
The Current Challenge for Servala
Doing these same steps over and over again becomes tedious. Solving the same problems whenever we must take care of a new application doesn’t feel valuable. In reality, we have to deal with a multitude of different ways in which these things are done. It puts a lot of burden on engineers, having to cope with all the many ways all these tasks can be done. Usually, parts of the functions mentioned above are already done. As an example, container images are already available, but every image behaves differently from the other. And that means we must always figure out how to integrate into the next step. The same applies to the various Helm Charts out there. Standardization will relieve us from this burden, making the process more efficient and less repetitive.
The core issue stems from the flexibility of the tools involved. Container images vary widely in how they’re built and behave, while Helm Charts accept parameters in inconsistent formats. For example, the container image reference might appear as img, image, or image-registry, depending on the chart author.
Security scanning and compliance reporting vary widely between applications. Some include Software Bills of Materials (SBOMs), while others require manual inventory. Configuration handling is equally inconsistent—some applications use environment variables, others expect config files in specific locations, and others require custom configuration APIs.
Day-2 operations vary significantly across applications. Some expose metrics in a Prometheus-compatible format, while others don’t. Identical metrics might use different names, and logging formats range from structured JSON to custom plain text. Dependency management is often neglected, with minimal information about required services or components. As a result, maintaining these applications turns into a tedious game of whack-a-mole.
We must solve these fundamental inconsistencies so that Servala can scale and enable software vendors to onboard their applications easily.
Our Proposed Solution: Standardization
How could we solve these obstacles? We propose to define a set of documents that specify patterns for all the various parts needed to deliver applications through Servala. We could also call these documents specifications, golden paths, patterns, standards, conventions, or defaults. Ultimately, the goal is to document a commonly agreed-upon way to solve the mentioned tasks so that we don’t have to iterate over them repeatedly.
However, doing that just for us feels wrong. As a company, we embrace Open-Source and Open Standards to work together in a defined way. Therefore, we propose to form a group of people from various companies, document the patterns together, and agree on them.
The Vision: A Transformed Application Delivery Landscape
What will application delivery look like once the Servala specifications are widely adopted? The benefits will be transformative for all parties involved:
For Software Vendors:
Accelerated Time to Market: Instead of spending months building deployment, monitoring, and maintenance systems, vendors can focus on their core product and leverage Servala’s standardized delivery mechanisms to reach cloud providers globally.
Reduced Operational Overhead: By conforming to the Servala specification, vendors automatically inherit proven operational practices like monitoring, metrics, logs, backups, etc, without maintaining their own operations team.
Expanded Market Reach: The ability to deploy on any Servala-compatible cloud provider opens new markets without additional engineering effort.
Enhanced Security Posture: Standardized security scanning, compliance reporting, and configuration management significantly reduce risk, enabling vendors to confidently deploy their applications on Servala-compatible cloud providers, even without dedicated in-house security expertise.
For Cloud Providers:
Enriched Service Catalogs: Providers can instantly offer dozens of managed services that follow consistent operational patterns, dramatically increasing their value proposition.
Operational Consistency: All services follow the same patterns for monitoring, alerting, and maintenance, reducing the complexity of running multiple third-party applications.
Competitive Differentiation: Smaller cloud providers can now compete with hyperscalers by offering comparable catalogs of managed services.
For End Users:
With Servala’s standardized delivery Mechanisms, end users can deploy complex managed services confidently, knowing they follow consistent operational patterns. This empowerment gives them a sense of control and confidence in their operations.
The operational interfaces remain consistent regardless of application deployment, providing end users a predictable and secure experience. This predictability reassures them of the system’s stability and reliability.
Enterprise Readiness: All services automatically include security, backup/restore, monitoring, and other enterprise features without custom integration work.
Simplified Compliance: Standardized security scanning and compliance reporting make regulatory audits more straightforward and less resource-intensive.
Dependency Clarity: Clear visibility into service dependencies and compatibility requirements reduces deployment failures and configuration errors.
The Servala Specification Areas
We envision documenting patterns for:
Container image behavior, such as where to store data, how to expose ports, how the entry point behaves, and with which permissions the application runs.
Helm Chart “API”: How do the standard values behave? What does the configuration structure look like?
Unified Operational Framework:
Backup and Restore: Standardized interfaces for consistent application and data backup procedures with well-defined restoration paths and verification methods
Metrics: Well-defined endpoints to get application metrics for alerting, monitoring, and performance insights
Alerting and Monitoring: Common alert definitions, severity classifications, and response expectations across applications
Logging Standards: Uniform logging formats, retention policies, and search capabilities to simplify troubleshooting
SLA Definitions: Standardized metrics for measuring and reporting on availability, performance, and reliability
Maintenance Windows: Clear protocols for coordinating and communicating maintenance events with minimal disruption
Billing: A Uniform way of billing service usage
Security Scanning and Compliance: Standardized approaches for vulnerability management, security policy enforcement, and compliance reporting across all applications
Configuration Management: Unified patterns for handling application configuration, secrets management, and runtime reconfiguration
Dependency Management: Clear declaration and handling of service dependencies, including versioning requirements and compatibility matrices
Self-Service API Architecture: Propose standardized structures for Kubernetes resources, creating predictable interfaces for application management across environments.
Previous work we want to build on
There have been successful efforts to standardize that we want to build on:
Open Container Image (OCI) Image Format
After a decade of fragmentation in how containers were built and stored, the OCI initiative introduced a unified image format adopted by tools like Docker and Podman. It standardized filesystem locations (e.g., /var/lib/docker/), defined predictable image layering, and enabled interoperability across registries such as Docker Hub, GitHub Container Registry (GHCR), and Quay.
Kubernetes as a container orchestrator
Kubernetes has established itself as the de facto standard for managing container fleets. It provides a unified API for managing compute, networking, and storage regardless of the infrastructure provider.
Kubernetes Pod and Container Lifecycle Conventions
The Kubernetes community has standardized application behavior during lifecycle events, such as startup, shutdown, and health checks, ensuring consistent health monitoring. Applications now respond predictably to restarts and draining, greatly easing the work of platform engineers. Implementing lifecycle hooks has become a de facto standard.
Prometheus Metrics Format
Many applications already implement exposing metrics in the Prometheus OpenMetrics format, and where, by convention, the “/metrics” endpoint exposes a human-readable or OpenMetrics-compliant format, there are some Standard naming conventions (http_requests_total, etc.). While it’s not perfect yet, as some metric names still vary, this is one of the most widely accepted informal standards adopted by applications, exporters, sidecars, service monitors, etc.
Software Bill of Materials (SBOM) standards
With open SBOM standards now established and widely supported by vendors like GitHub, GitLab, and Docker, generating and consuming SBOMs has become a best practice. It’s so fundamental that the EU Cyber Resilience Act (CRA) now mandates SBOMs for all proprietary and open-source software.
12-Factor App
While some inconsistencies remain, we still want to honorably mention the https://12factor.net/ manifesto, which laid the Foundation for cloud-native apps in 2011 and still influences architecture and platform design today. Solving Inconsistent application structure and runtime expectations, these are now widely adopted best practices: config via env vars, statelessness, logging to stdout, etc., often enforced indirectly by platforms.
Helm Chart Best Practices / Guidelines
The Helm community recognizes the inconsistency in chart structures and naming and has responded with best practices, guidelines, and tools like helm lint and helm create. While adoption remains partial, projects like Bitnami, KubeApps, and Backstage increasingly rely on these conventions, laying a strong foundation for what Servala aims to standardize.
OpenAPI / Swagger
The OpenAPI Initiative has significantly impacted API standardization. It enables machine-readable API definitions, automatic generation of SDKs, tests, mocks, and human-friendly documentation. Widely adopted across platforms – from Kubernetes CRDs to GitHub APIs – OpenAPI has brought consistency and interoperability to API design and consumption.
OpenServiceBroker API
We’ve implemented the OpenServiceBroker API and are using it actively with a few clients, but it’s missing the declarative and cloud-native approach to service listing and provisioning.
Crossplane
We’re fans of Crossplane’s declarative approach to service definitions and instantiations. Crossplanes Composite Resource Definitions (XRDs) provide opinionated Kubernetes Custom Resource Definitions (CRDs), which all have the same structure as what the engineer defined in the XRD. Servala is not replacing Crossplane but uses Crossplane under the hood.
Open Application Model (OAM)
The Open Application Model (OAM) supports Servala’s mission by offering a platform-agnostic, standardized way to define cloud-native applications. It cleanly separates core logic (components), operational features (traits), and dependencies (scopes), providing a consistent interface for developers and operators. With reusable metrics, backups, and autoscaling definitions, OAM helps eliminate the fragmentation found in Helm charts and container images, making it an interesting foundation for Servala’s specification and enabling consistent managed services across environments.
The Platform Specification
The Platform Spec initiative contributes to Servala’s vision by offering a standardized contract between developers and platform engineers, defining a standard interface for deploying and managing applications across any internal developer platform (IDP). It focuses on creating a consistent, YAML-based specification for app workloads, including container images, environment variables, secrets, service bindings, and deployment rules. It solves many issues Servala identifies with inconsistent Helm charts and runtime behaviors. By adopting or aligning with Platform Spec, Servala can simplify onboarding, reduce integration overhead, and ensure applications are deployed in a predictable, platform-agnostic way, regardless of the underlying orchestrator or infrastructure.
Cloud Native Application Bundle (CNAB)
The Cloud Native Application Bundle (CNAB) specification supports Servala’s goals by providing a portable, standardized way to package and distribute multi-component applications, including Kubernetes manifests or Helm charts and Terraform plans, scripts, and other deployment artifacts. CNAB defines a consistent format for bundling an application’s code, configuration, and lifecycle operations (install, upgrade, uninstall), making it ideal for complex managed services that span multiple tools or environments. By leveraging CNAB, Servala could offer a unified packaging format that encapsulates everything needed for reliable, repeatable deployment, helping reduce fragmentation, simplify onboarding, and enable consistent Day-2 operations across cloud providers.
The Path Forward
Servala aims to accelerate application onboarding by a factor of 10, reducing weeks of custom integration to just days or hours, while dramatically improving reliability through consistent, proven patterns for deployment and operations. We’ve already begun implementing these standards in our development roadmap, but broad industry collaboration is essential for success. We invite software vendors, cloud providers, and platform engineers to join us in shaping these standards openly and collaboratively. With a solid foundation, Servala can redefine how managed services are delivered, empowering cloud providers to expand their service catalogs and enabling vendors to become SaaS providers without heavy operational overhead.
Subscribe to Updates
Always be the first to find out all the latest news about Servala. Simply add your email below:
What’s Next?
In 2025, we will focus on enabling software vendors to onboard themselves onto the Servala service delivery platform. Find more information about Why we launched Servala in our Servala launch announcement.
Contact us
Interested in learning more? Book a meeting or write us to explore how Servala can help you! Experience the future of cloud native services on servala.com. 🚀
Markus Speth
Marketing, Communications, People
Latest news
General
Open Source
Sovereignty
Open Source as State Policy: What the EU Strategy and the Swiss Ständerat Vote Mean for IT Decision-Makers
Why VSHN Managed OpenShift Customers Are Safe from the Recent Ingress NGINX Vulnerability
26. Mar 2025
A recently disclosed set of vulnerabilities, known as IngressNightmare, has raised alarms for Kubernetes users relying on the Ingress NGINX Controller. These vulnerabilities (CVE-2025-24513, CVE-2025-24514, CVE-2025-1097, CVE-2025-1098, and CVE-2025-1974), with a critical CVSS score of 9.8, could allow attackers to gain unauthorized access to a Kubernetes cluster, potentially leading to remote code execution and full cluster compromise. However, OpenShift 4.x customers are not affected by this exploit, as OpenShift uses the OpenShift Ingress Operator, based on HAProxy, as the default ingress controller.
The vulnerabilities affect the Ingress NGINX Controller, which is responsible for managing external traffic and routing it to internal services in a Kubernetes cluster. Specifically, they target the admission controller, which, if exposed without authentication, allows attackers to inject malicious configurations, resulting in remote code execution. Since OpenShift 4.x uses the OpenShift Ingress Operator (based on HAProxy) as the ingress controller, customers are not exposed to these risks.
OpenShift 4.x further enhances security by restricting permissions and not permitting the default ingress controller to access sensitive data, such as secrets stored across Kubernetes namespaces. This design decision helps protect OpenShift customers from potential exploits by preventing unauthorized access to critical cluster resources.
As a result, VSHN Managed OpenShift users can be confident that their clusters remain secure without having to worry about this specific vulnerability.
Markus Speth
Marketing, Communications, People
Latest news
General
Open Source
Sovereignty
Open Source as State Policy: What the EU Strategy and the Swiss Ständerat Vote Mean for IT Decision-Makers
Announcing Redis by VSHN – Enhance Your Containerized Workloads
6. Nov 2024
We are thrilled to announce the general availability of Redis by VSHN, now available in OpenShift through the VSHN Application Marketplace. This powerful, in-memory data structure store, known for its blazing-fast performance and versatility, is now optimized for containerized environments on OpenShift. Whether you’re building microservices, real-time analytics, or caching layers, Redis by VSHN offers the reliability and scalability your applications need.
Why Redis on OpenShift?
Redis has been a favorite among developers for its simplicity, performance, and robustness. By integrating Redis into OpenShift, we are enabling seamless deployment and management of Redis instances within your containerized infrastructure. This means you can now leverage Redis’s capabilities while enjoying the benefits of OpenShift’s orchestration and container management.
Key Features
Containerized Deployment: Effortlessly deploy and manage Redis instances in your OpenShift environment.
Scalability: Scale your Redis instances up or down based on your application needs.
High Availability: Ensure your data is always available with Redis’s built-in replication and persistence mechanisms.
Integrated Monitoring: Utilize OpenShift’s monitoring tools to keep an eye on your Redis performance and health.
Security: Benefit from OpenShift’s security features to protect your Redis instances and data.
Benefits for Your Containerized Applications
Performance: Redis’s in-memory data structure ensures lightning-fast read and write operations, ideal for real-time applications.
Flexibility: Support for a variety of data structures, including strings, hashes, lists, sets, and more.
Compatibility: Seamlessly integrate with your existing OpenShift applications and services.
Developer Productivity: Simplified deployment and management allow developers to focus on building features rather than infrastructure.
Getting Started
To get started with Redis by VSHN, visit our Redis product page on the OpenShift Application Marketplace. Our comprehensive documentation will guide you through the setup process, ensuring you can quickly and efficiently integrate Redis into your workflows.
Do you want to see all our open documentation for how to create or use any of the services in the marketplace? You can find them all openly available here VSHN AppCat User Documentation
Be on the lookout for more services as we continue expanding our marketplace. Let’s keep those containers humming!
VSHN Managed OpenShift: What you need to know about OpenShift 4.16
16. Oct 2024
Upgrade to OpenShift version 4.16
As we start to prepare the upgrade to OpenShift v4.16 for all our customers clusters, it is a good opportunity to look again at what’s new in the Red Hat OpenShift 4.16 release. The release is based on Kubernetes 1.29 and CRI-O 1.29 and brings a handful of exciting new features which will make VSHN Managed OpenShift even more robust. Additionally, the new release also deprecates some legacy features which may require changes in your applications.
The Red Hat infographic highlights some of the key changes:
Red Hat OpenShift 4.16: What you need to know Infographic by Ju Lim
Changes which may require user action across all VSHN Managed OpenShift, including APPUiO
For VSHN Managed OpenShift, we’re highlighting the following changes which may require user action in our Release notes summary
Clusters which use OpenShift SDN as the network plugin can’t be upgraded to OpenShift 4.17+
This doesn’t affect most of the VSHN Managed OpenShift clusters since we’ve switched to Cilium as the default network (CNI) plugin a while ago and most of our older managed clusters have been migrated from OpenShift SDN to Cilium over the last couple of months.
The proxy service for the cluster monitoring stack components is changed from OpenShift OAuth to kube-rbac-proxy
Users who use custom integrations with the monitoring stack (such as a Grafana instance which is connected to the OpenShift monitoring stack) may need to update the RBAC configuration for the integration. If necessary, we’ll reach out to individual VSHN Managed OpenShift customers once we know more.
The ingress controller HAProxy is updated to 2.8
HAProxy 2.8 provides multiple options to disallow insecure cryptography. OpenShift 4.16 enables the option which disallows SHA-1 certificates for the ingress controller HAProxy. If you’re using Let’s Encrypt certificates for your applications no action is needed. If you’re using manually managed certificates for your Routes or Ingresses, you’ll need to ensure that you’re not using SHA-1 certificates.
Legacy service account API token secrets are no longer generated
In previous OpenShift releases, a legacy API token secret was created for each service account to enable access to the integrated OpenShift image registry. Starting with this release, these legacy API token secrets aren’t generated anymore. Instead, each service account’s image pull secret for the integrated image registry uses a bound service account token which is automatically refreshed before it expires.
If you’re using a service account token to access the OpenShift image registry from outside the cluster, you should create a long-lived token for the service account. See the Kubernetes documentation for details.
Linux control groups version 1 (cgroupv1) deprecated
The default cgroup version has been v2 for the last couple OpenShift releases. Starting from OpenShift 4.16, cgroup v1 is deprecated and it will be removed in a future release. The underlying reason for the pending removal is that Red Hat Enterprise Linux (RHEL) 10 and therefore also Red Hat CoreOS (RHCOS) 10 won’t support booting into cgroup v1 anymore.
If you’re running Java applications, we recommend that you make sure that you’re using a Java Runtime version which supports cgroup v2.
Warning for iptables usage
OpenShift 4.16 will generate warning event messages for pods which use the legacy IPTables kernel API, since the IPTables API will be removed in RHEL 10 and RHCOS 10.
If your software still uses IPTables, please make sure to update your software to use nftables or eBPF. If you are seeing these events for third-party software that isn’t managed by VSHN, please check with your vendor to ensure they will have an nftables or eBPF version available soon.
Other changes
Additionally, we’re highlighting the following changes:
RWOP with SELinux context mount is generally available
OpenShift 4.16 makes the ReadWriteOncePod access mode for PVs and PVCs generally available. In contrast to RWO where a PVC can be used by many pods on a single node, RWOP PVCs can only be used by a single pod on a single node. For CSI drivers which support RWOP, the SELinux context mount from the pod or container is used to mount the volume directly with the correct SELinux labels. This eliminates the need to recursively relabel the volume and can make pod startup significantly faster.
However, please note that VSHN Managed OpenShift doesn’t yet support the ReadWriteOncePod access mode on all supported infrastructure providers. Please reach out to us if you’re interested in this feature.
Monitoring stack replaces prometheus-adapter with metrics-server
OpenShift 4.16 removes prometheus-adapter and introduces metrics-server to provide the metrics.k8s.io API. This should reduce load on the cluster monitoring Prometheus stack.
Exciting upcoming features
We’re also excited about multiple upcoming features which aren’t yet generally available in OpenShift 4.16:
Node disruption policies
We’re looking forward to the “Node disruption policy” feature which will allow us to deploy some node-level configuration changes without node reboots. This should reduce the need for scheduling node-level changes to be rolled out during maintenance, and will enable us to say confidently whether a node-level change requires a reboot or not.
Route with externally managed certificates
OpenShift 4.16 introduces support for routes with externally managed certificates as a tech preview feature. We’re planning to evaluate this feature and make it available in VSHN Managed OpenShift once it reaches general availability.
This feature will allow users to request certificates with cert-manager (for example from Let’s Encrypt) and reference the cert-manager managed secret which contains the certificate directly in the Route instead of having to create an Ingress resource (that’s then translated to an OpenShift Route) which references the cert-manager certificate.
Changes not relevant to VSHN customers
There are a number of network related changes in this release, but these are not relevant for VSHN managed clusters as these are mostly running Cilium. In particular, OVNKubernetes gains support for AdminNetworkPolicy resources, which provide a mechanism to deploy cluster-wide network policies. Please note that similar results should be achievable with Cilium’s CiliumClusterWideNetworkPolicy resources, and Cilium is actively working on implementing support for AdminNetworkPolicy.
Summary
OpenShift 4.16 brings deprecates some features which may require changes to your applications in order to make future upgrades as smooth as possible. Additionally, OpenShift 4.16 is the last release that supports OpenShift SDN as the network plugin and disables support for SHA-1 certificates in the ingress controller. For those interested in the nitty gritty details of the OpenShift 4.16 release, we refer you to the detailed Red Hat release notes, which go through everything in detail.
VSHN customers will be notified about the upgrades to their specific clusters in the near future.
Interested in VSHN Managed OpenShift?
Head over to our product page VSHN Managed OpenShift to learn more about how VSHN can help you operate your own OpenShift cluster including setup, 24/7 operation, monitoring, backup and maintenance. Hosted in a public cloud of your choice or on-premises in your own data center.
Simon Gerber
Simon Gerber is a DevOps engineer in VSHN.
Latest news
General
Open Source
Sovereignty
Open Source as State Policy: What the EU Strategy and the Swiss Ständerat Vote Mean for IT Decision-Makers
Announcing General Availability of PostgreSQL by VSHN – On OpenShift
3. Oct 2024
We have some fantastic news – our PostgreSQL service is now generally available on OpenShift in our Application Catalog through the VSHN Application Marketplace. After seeing our container-based database solution work wonders for a few lucky customers, we’re excited to open it up for all to enjoy!
Why You’ll Love It
Always On: our high availability setup keeps your data accessible.
Safety First: top-notch security features to keep your data safe.
Grow As You Go: easily scale with your business needs.
Hands-Free Maintenance: automatic updates and backups? Yes, please!
Expert Help: our team is always here to support you.
Do you have an application that you run in containers or are moving to containers that uses PostgreSQL? Do you not want the complexity of running your database within a Kubernetes cluster?
Then check out PostgreSQL by VSHN to dive into the details and get started today.
Do you want to see all our open documentation for how to create or use any of the services in the marketplace? You can find them all openly available here VSHN AppCat User Documentation
Be on the lookout for more services as we continue expanding our marketplace. Let’s keep those containers humming!