Sponsored Content
From raw manifests to self-service Kubernetes apps: creating enterprise-ready open platforms
Sponsored By: Nutanix The following is sponsored content. It may not reflect the views of our editorial staff. |
The Kubernetes scaling problem nobody talks about
Enterprise platform teams encounter the same pattern repeatedly: a Kubernetes platform works well enough that nobody wants to change it.
This happens gradually as teams make reasonable technology choices: selecting different ingress controllers, secrets management tools, CD platforms, or observability software. Individually, none of these decisions is a problem. Months later, however, they’ve created a Kubernetes environment that only a handful of people understand. As soon as that one person gets sick or leaves the company, maintaining or improving the platform becomes much more difficult.
Mark Dastmalchi-Round, a Solutions Architect at Nutanix with decades of experience in platform engineering, describes the pattern in blunt terms: “Configuration drift, exacerbated by the fact that multicloud is increasingly becoming the new reality.”
Over time, that drift compounds. Companies get acquired, technology merges, and silos form. Suddenly, organizations are managing clusters that look nothing alike and are often held together by institutional knowledge.
As a solution, proprietary overlays have sought to address these issues, with mixed results. They tend to reduce overall surface area (fewer choices lead to fewer points of divergence), but often at a cost to portability and extensibility, which is what made Kubernetes so attractive in the first place.
A more durable approach is to build on Kubernetes-native primitives, adding governance and operational consistency without replacing the workflows teams already use. The remainder of this article will demonstrate what that looks like in practice.
What an open platform actually means in enterprise Kubernetes
“Open platform” is a common phrase in the Kubernetes ecosystem, but it’s worth defining what that term actually means in practice.
Dastmalchi-Round defines an open platform as one that “exposes industry-standard APIs and, where possible, uses pure upstream open-source projects.” The distinction isn't whether the platform is open source. It's whether it relies on Kubernetes-native APIs and tooling or introduces proprietary CRDs, workflows, and CLIs that make migration difficult.
As he notes, "You can still get lock-in with open source, because if it is only one vendor's solution and they layer all of their stuff on top of standard tooling, you are now dependent on their abstractions."
The difference is easier to see when comparing an open platform with a proprietary overlay.
Comparing Open Kubernetes Platforms and Proprietary Overlays
|
Dimension |
Open Platform (NKP) |
Proprietary Overlay |
|
Core CRDs |
Standard upstream (Cluster API, FluxCD, Helm) |
Vendor-specific, migration cost is high |
|
GitOps engine |
FluxCD (CNCF project) |
Proprietary sync engine |
|
App packaging |
Helm + OCI (industry standard) |
Custom catalog format |
|
Monitoring stack |
Pure upstream CNCF (Prometheus, Grafana) |
Wrapped / vendor-branded |
|
Exit cost |
Clusters survive platform removal |
Manifests tied to platform APIs |
|
Third-party tooling |
Works if it runs on Kubernetes |
Requires certified integration |
Nutanix Kubernetes Platform (NKP) applies these principles by building on upstream Kubernetes components rather than replacing them. As Dastmalchi-Round puts it, the real test is what survives if you remove the platform.
"With NKP, the clusters are pure upstream Kubernetes,” says Dastmalchi-Round. “The monitoring stack is pure upstream CNCF projects. GitOps is provided by FluxCD. Your manifests and charts are standard Helm." In other words, the operational tooling may change, but the underlying applications and deployment artifacts remain portable.
Raw manifests to managed artifacts: Helm and OCI packaging in NKP
Most enterprise teams start with a collection of Kubernetes YAML manifests that work for a single application or environment. While those manifests are typically stored in version control, they aren't easily reusable across environments, self-service for other teams, or packaged in a way that supports consistent versioning and rollback.
Helm addresses those limitations by packaging manifests into versioned, parameterized charts. For existing applications, the process typically starts by converting Kubernetes manifests into a standard Helm chart, either manually or with tools such as Helmify. The result is a familiar Helm project structure built around Chart.yaml, parameterized templates, and a values.yaml file, giving teams a reusable deployment artifact instead of a collection of static manifests.
Deployment-specific settings, such as image tags, replica counts, and resource limits, move into a values.yaml file, while the underlying templates remain unchanged.
Those deployment-specific settings are defined in the chart's values.yaml file. For example:
# values.yaml — the self-service interface for application teams
replicaCount: 2
image:
repository: registry.example.com/myapp
tag: "2.1.0"
pullPolicy: IfNotPresent
resources:
limits:
cpu: 500m
memory: 256Mi
requests:
cpu: 250m
memory: 128Mi
ingress:
enabled: true
host: myapp.internal.example.com
annotations:
kubernetes.io/ingress.class: "traefik"
serviceAccount:
create: true
name: "myapp-sa"
Versioning makes deployments reproducible across environments while providing a clear history of releases. Teams can promote the same chart through development, staging, and production with confidence, then roll back to a previous version if needed.
OCI registries address the next challenge: distributing and versioning those charts. Instead of relying on a separate chart repository, teams can store Helm charts alongside container images as immutable, versioned artifacts. Because chart versions can't be overwritten, deployments are reproducible and easier to audit.
The approach also fits existing registry workflows. Organizations using Harbor, Amazon ECR, or similar registries can manage container images and Helm charts in the same place, using the same authentication, access controls, and security policies.
For example:
# Package the chart locally
helm package ./myapp --version 2.3.0
# Authenticate to the OCI registry (same registry as your container images)
helm registry login registry.example.com \
--username $REGISTRY_USER \
--password $REGISTRY_PASSWORD
# Push is stored as an OCI artifact alongside container images
helm push myapp-2.3.0.tgz oci://registry.example.com/charts
# Any team can pull without touching the source repo
helm pull oci://registry.example.com/charts/myapp --version 2.1.0
# Inspect the chart before deploying
helm show values oci://registry.example.com/charts/myapp --version 2.1.0
The goal of packaging is to create a self-service deployment model. Once packaged, Helm charts are registered with the NKP catalog, where they appear alongside built-in platform applications as versioned deployment artifacts. Application teams can deploy them by configuring only the settings that vary between environments, while platform teams focus on maintaining reusable application catalogs instead of manually managing deployments.
FluxCD deployments, overrides, and upgrades
Once Helm charts are stored in an OCI registry, FluxCD keeps deployed clusters aligned with the desired state defined in Git. It continuously reconciles each cluster against that source of truth, automatically correcting configuration drift. In multi-cluster environments, each cluster follows the same reconciliation process using its own configuration.
NKP's FluxCD implementation centers on two resources: HelmRepository, which points to the OCI registry, and HelmRelease, which specifies the chart version, configuration values, and target namespace.
# Source: points FluxCD at your OCI chart registry
apiVersion: source.toolkit.fluxcd.io/v1beta3
kind: HelmRepository
metadata:
name: internal-charts
namespace: flux-system
spec:
type: oci
url: oci://registry.example.com/charts
interval: 5m # poll for new chart versions every 5 minutes
# Release: declares desired state for a specific deployment
apiVersion: helm.toolkit.fluxcd.io/v2beta3
kind: HelmRelease
metadata:
name: myapp-production
namespace: production
spec:
interval: 10m
chart:
spec:
chart: myapp
version: "2.3.0"
sourceRef:
kind: HelmRepository
name: internal-charts
namespace: flux-system
values:
replicaCount: 3
resources:
limits:
cpu: 1000m
memory: 512Mi
ingress:
host: myapp.prod.example.com
Although teams interact with NKP through its web interface, those actions are ultimately represented as standard Kubernetes resources. Configuration changes become declarative objects that FluxCD reconciles like any other GitOps workflow, making the deployment model transparent and compatible with standard Kubernetes tooling without relying on proprietary deployment workflows.
Teams typically promote the same chart version from development to staging and production while applying environment-specific overrides through HelmRelease values rather than modifying the chart itself. Promotion becomes a Git commit instead of a manual deployment, with FluxCD automatically reconciling and applying the change.
FluxCD also provides continuous drift detection. If someone manually changes a resource in the cluster, FluxCD restores it to the state defined in Git during the next reconciliation cycle. Rolling back a deployment is simply a Git revert, with Git history providing a complete audit trail of configuration changes.
How to integrate third-party tools without losing openness
Enterprise platform teams are often asked to integrate tools such as vulnerability scanners, cost management dashboards, and application performance monitoring (APM) platforms. The tools themselves aren't the problem. The problem is managing each one through a separate deployment and maintenance process, increasing operational complexity over time.
NKP addresses this by treating third-party software like any other platform application. Whether it's an upstream open-source project or a commercial product distributed as a Helm chart, it follows the same Helm-over-OCI packaging model and is deployed and managed through FluxCD. The outcome is a consistent deployment and lifecycle workflow across both first- and third-party applications.
For example, an upstream Helm chart such as Redis can be published to the NKP catalog and managed through the same deployment workflow as a first-party application, avoiding the need for a separate integration process.
Because this approach relies on standard Kubernetes resources, Helm charts, Git, and Kubernetes RBAC, those workloads remain portable across platforms. As Dastmalchi-Round summarizes, "If it works on Kubernetes, it will work on NKP."
Dastmalchi-Round notes that the biggest integration challenges typically come from tools that rely on rigid deployment models, particularly older operator-based packages that expose little configuration. "A few years ago, there was a trend of people overusing the operator pattern for packaging applications," he says. "Operators have their uses, but when they became the distribution artifact, they often resulted in big, opaque blobs running in your cluster. If they didn't do exactly what you needed, you were out of luck." As more vendors have adopted Helm-based packaging, those limitations have become less common.
Examples of Third-Party Tool Integrations in NKP
|
Integration Type |
Packaging Model |
Configuration |
Upgrade Path |
NKP Catalog |
|
Security scanner (e.g., Trivy) |
Helm chart via OCI |
values.yaml in Git |
FluxCD HelmRelease bump |
Yes |
|
Custom Grafana dashboard |
Helm chart + ConfigMap |
Dashboard JSON in Git |
Chart version update |
Yes |
|
Cost management (e.g., OpenCost) |
Helm chart via OCI |
values.yaml in Git |
FluxCD HelmRelease bump |
Yes |
|
Service mesh (e.g. Istio) |
Helm chart via OCI |
IstioOperator CRDs in Git |
Controlled chart upgrade |
Yes |
|
Legacy operator-only tool |
Operator bundle |
Operator-managed CRDs |
Operator version update |
Requires evaluation |
In practice, the less a tool depends on proprietary deployment mechanisms, the easier it is to integrate, manage, and move between Kubernetes platforms.
Conclusion: the platform that gets out of the way
NKP doesn't replace Kubernetes workflows—it builds on them. Helm packages applications, OCI registries distribute them, Git defines the desired state, and FluxCD keeps deployments in sync. Instead of introducing proprietary workflows, NKP brings these familiar tools together with the governance, lifecycle management, and self-service capabilities required for enterprise-scale operations. It standardizes these workflows across any environment, including public clouds, on-premises, and edge locations.
For enterprise teams, the value lies in achieving consistency without sacrificing portability. As Dastmalchi-Round notes, the question isn't whether lock-in exists, but how costly it is to leave. By relying on upstream Kubernetes components, Helm charts, and GitOps workflows, organizations retain portable applications and deployment artifacts even if they choose a different platform in the future.
In the end, an open platform shouldn’t be defined by its licensing model. It should be defined by how much of your platform remains yours if you decide to move on.
The following is sponsored content. It may not reflect the views of our editorial staff.
Comments