Dr. Pranay Jha

VMware • Cloud • AI • Enterprise Architecture

FORMERLY
VMware Insight & Cloud Pathshala
What began over a decade ago as a passion for sharing knowledge has evolved into a unified platform for Enterprise AI, VMware, Cloud Architecture, Research, and Modern Infrastructure.
, , ,

How to Run Workloads in VCF Automation: VM Service, Container Service, Namespaces and VKS (VCF Automation 9 Series, Part 39)

VCF 9.1 gives a workload four ways to run: a VM, a container with no cluster, a Supervisor namespace, or a full VKS cluster. What each is, how the namespace is the unit you hand a tenant, when a namespace beats a cluster, and a clear verdict.

VCF Automation 9 Series · Part 39 of 41
TL;DR · Key Takeaways
  • VCF 9.1 gives a workload four ways to run through VCF Automation: VM Service (a full VM), Container Service (a container with no cluster), a Supervisor namespace (namespace-as-a-service), or a full VKS cluster.
  • The namespace is the unit you hand a tenant: it carries quota, an NSX VPC and identity. Container Service runs inside it, so a team can run containers without you operating a cluster.
  • A full VKS cluster adds cluster-admin, CNI choice, node OS and operators, and the obligation to patch and upgrade all of it.
  • The default mistake is giving every team a cluster. That is how you end up patching dozens of node VMs to run a handful of services.
  • My verdict: VM Service when a real OS is needed, Container Service in a namespace as the default for containers, and a dedicated VKS cluster only when the team genuinely needs full Kubernetes.
Who this is for: platform and cloud admins and architects who decide what a workload runs on in a VCF Automation All Apps organization, and who want to stop handing out Kubernetes clusters by reflex.
Prerequisites: a VCF Automation 9.1 All Apps org, a Supervisor-enabled cluster, projects and namespaces in place, and a basic grasp of vSphere Pods and VKS.

Container or VM used to be a two-way question. In VCF 9.1 it is a four-way one, and the wrong answer costs you either flexibility or a cluster you did not need to run. VM Service, Container Service, the Supervisor namespace itself, and VKS are all consumable through VCF Automation, and they sit on a spectrum from most operating-system control to most Kubernetes power. The skill is matching the workload to the lightest option that does the job, instead of defaulting every modern application to a full Kubernetes cluster because that is what modern is supposed to look like.

Four ways to run, one platform

VM Service gives a full virtual machine. Container Service runs a container directly on ESX with no cluster underneath. A Supervisor namespace is the governed space a tenant works in, and on its own it is enough to run containers through Container Service. VKS is a complete Kubernetes cluster created inside a namespace. None is a downgrade of another; they are different shapes for different workloads, and operational load roughly tracks the move toward full Kubernetes.

From OS control to Kubernetes power Pick the lightest option that does the job; overhead tracks the line VM Service A full virtual machine Own OS and kernel Legacy, stateful apps Most OS control Container Svc Container, no cluster Runs as a vSphere Pod In a namespace Least overhead Namespace Quota, VPC, identity The tenant work area Hosts Container Svc The unit of tenancy VKS Full Kubernetes Cluster-admin Operators, CNI choice Most power and load
Four options on one spectrum. The two in the middle, Container Service and the namespace, are the ones most teams skip and most often want.

The namespace is what you hand a tenant

People conflate three layers that share the word namespace, and the choice in this article is whether a tenant stops at the middle layer or goes all the way to a cluster. At the top is the VCF Automation Project, the governance and tenancy boundary, where a Region maps to a Supervisor and a project entitles a namespace class. Below it is the vSphere (Supervisor) namespace, the resource boundary: quota in CPU, memory and storage, an NSX VPC with a dedicated CIDR, and identity through owner groups. The third layer, optional, is the VKS cluster a developer creates inside the namespace with kubectl.

The three layers, and where you stop Namespace-as-a-service stops at layer 2; a VKS cluster is layer 3 Layer 1 · VCF Automation Project Governance and tenancy. Region maps to a Supervisor. Entitles a namespace class: the footprint a tenant can claim. Layer 2 · vSphere (Supervisor) Namespace Resource boundary: CPU, memory, storage quota. NSX VPC with a dedicated CIDR. Owner groups for identity. Container Service runs here, on ESX, with no cluster. Layer 3 · VKS Cluster (optional) A dedicated Kubernetes cluster created with kubectl. Full cluster-admin, and the lifecycle that comes with it.
The vSphere namespace is the unit of quota, network and identity. A VKS cluster is an extra layer inside it, only if you need it.

Container Service, without the cluster

Container Service runs a container directly on ESX as a vSphere Pod, inside the namespace, with no Kubernetes cluster to deploy or operate. The platform schedules, isolates and runs it. Each vSphere Pod is a purpose-built lightweight VM, and only the containers in that one pod share a kernel, so you get VM-grade isolation around container workloads without standing up and hardening a cluster per team. You consume it as ordinary Kubernetes: apply a standard Pod spec to your Supervisor namespace and a vSphere Pod is scheduled.

# Container Service: a vSphere Pod is a standard Pod in the Supervisor namespace
kubectl --context team-blue-ns apply -f web-pod.yaml
kubectl --context team-blue-ns get pods

# web-pod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: web
  namespace: team-blue-ns
spec:
  containers:
    - name: web
      image: harbor.corp.local/team-blue/web:1.4
      resources:
        requests:
          cpu: 500m
          memory: 256Mi

Namespace plus Container Service vs a full VKS cluster

This is the decision people skip and then regret. A VKS cluster is a dedicated, conformant Kubernetes cluster: the team gets cluster-admin, a choice of CNI (Antrea and Calico out of the box, Cilium added in 9.1), a choice of node OS across node pools, secondary networks, and the full upstream API for operators and custom resources. The operational cost is the same list read backwards: every cluster is a set of VMs you size, patch and upgrade, and a Kubernetes version you keep current. Namespace plus Container Service has none of that surface, at the price of no cluster-admin and a shared Supervisor control plane.

FactorNamespace + Container ServiceFull VKS cluster
Cluster-adminNoYes
CNI / k8s version choicePlatform-managedYours to pick
Control planeShared SupervisorDedicated, isolated
Patch / upgrade burdenPlatform owns itTenant and platform own it
Best fitInternal apps, dev/test, densityProduction platforms, full k8s needs
Worked example
Ten internal teams each need to run a few containerized services. Give each a namespace with Container Service: ten namespaces, zero clusters to patch. Give each a full VKS cluster instead, at three control-plane plus five worker VMs apiece, and you now own eighty node VMs to size, patch and upgrade to run the same workloads. Reserve clusters for the two teams that actually run custom operators or pin a Kubernetes version. That is roughly sixteen node VMs under management instead of eighty, for identical applications.

When each runtime is right

VM Service is correct, not a consolation prize, for anything that needs a full operating system: a kernel you control, in-guest agents, software that was never containerized, and stateful single-server apps. If a vendor supports their product on a VM and not in a container, the argument is over. Container Service is the right default for containers that do not need cluster-admin, which is most of them. VKS is for teams that genuinely consume full Kubernetes: operators, custom resources, a pinned version, a specific CNI, or hard control-plane isolation. The runtimes are also a path, not silos: when a Container Service app outgrows the model, the interface generates the YAML to move it to a VKS cluster, so starting light is never a trap.

Picking how to run it Two questions, three landing spots Does it need a full OS (kernel, agents, legacy)? VM Service Full virtual machine Need cluster-admin, operators or a pinned k8s version? Namespace + Container Svc vSphere Pod, no cluster Full VKS cluster full Kubernetes YES NO NO YES
Full OS sends you to VM Service. Otherwise only genuine full-cluster needs justify VKS over a namespace with Container Service.

Where the workload actually lands

Choosing a runtime is not the same as choosing where it runs. In the All Apps world, Infrastructure Policy handles placement: a policy pairs matching criteria, for example all VMs with a Linux guest OS, with a reference to an underlying vCenter compute policy, and is assigned to region quotas and from there to namespaces. Set placement once at the policy level and every runtime inherits it. The same machinery decides whether a database lands on a namespace-backed VKS or classic vSphere. Manage placement per workload and you will not keep up; manage it per policy and you barely think about it.

In practice: most internal teams that file a ticket for a Kubernetes cluster do not need cluster-admin. They need a governed place to run containers. A namespace with Container Service answers that without putting another cluster lifecycle on your plate.
Gotcha
A namespace shares the Supervisor control plane, so a Supervisor problem is felt across every namespace on it; a dedicated VKS cluster isolates its control plane but you pay for that with patching. And the self-service link is fragile: delete and recreate a VCF Automation instance and the underlying namespaces and clusters may survive on the hosts, but the automation linkage that made them self-service is severed and must be rebuilt.
Disclaimer
Runtime availability, vSphere Pod specifics and Infrastructure Policy behavior depend on your exact VCF Automation and Supervisor build. Validate runtime options and placement policies in a non-production namespace, and follow the current Broadcom documentation before standardizing a runtime choice for production tenants.

The Verdict

Use VM Service for anything that needs a real operating system, make a namespace with Container Service your default for containers, and treat a full VKS cluster as the exception you grant on evidence. The reason is operational gravity: the namespace gives a team a governed place to run containers with nothing for you to patch, VM Service is simply correct for a large slice of enterprise software, and VKS earns its lifecycle cost only when a team actually uses cluster-admin and the wider API. When would I hand out a cluster first? For a dedicated platform team that owns its own Kubernetes stack and has the people to operate it. For everyone else, start with the namespace, and let the generated-YAML on-ramp carry them to VKS if and when they truly need it. What share of your container workloads actually needs a cluster, and how many clusters are you running as if they did?

References

VCF Automation 9 Series · Part 39 of 41
« Previous: Part 38  |  VCF Automation Guide  |  Next: Part 40 »

About The Author


Discover more from Dr. Pranay Jha

Subscribe to get the latest posts sent to your email.

Leave a Reply

Your email address will not be published. Required fields are marked *

Architect’s Toolkit

About the Author

Dr. Pranay Jha is a Cloud and AI Consultant with 18+ years of experience in hybrid cloud, virtualization, and enterprise infrastructure transformation. He specializes in VMware technologies, multi-cloud strategy, and Generative AI solutions. He holds a PhD in Computer Applications with research focused on Cloud and AI, has published multiple research papers, and has been a VMware vExpert since 2016 and a VMUG Community Leader.

VCF Automation 9 Series

Discover more from Dr. Pranay Jha

Subscribe now to keep reading and get access to the full archive.

Continue reading