vLLM Kubernetes deployment

vLLM Kubernetes deployment turns GPU scheduling, model storage and multi-node networking into cluster design choices. This page covers the options, the build order, the effort drivers and what to verify and hand over.

On this page

vLLM Kubernetes deployment: when the cluster is the right place to serve models

For a platform team that already runs Kubernetes and needs GPU-backed model serving inside its own infrastructure, vLLM on Kubernetes is usually a good fit, provided the cluster already has accelerator nodes, a working GPU device plugin and someone who owns them. The main difficulty is not installing vLLM. It is treating a model server as a workload unlike a stateless web service: it needs scarce GPUs, very large model files, long startup times and, for some models, several nodes that talk to each other. Those four properties drive most of the design decisions in this section.

vLLM is licensed under Apache-2.0 and has no paid edition, so the software itself carries no license fee. The cost comes from three places: accelerator capacity, whether owned or rented, the surrounding infrastructure such as storage, networking and the cluster itself, and the people who implement and operate the service. When you request a quote or compare options, ask each partner to separate those components. A plan that lists only a software line item is describing the cheapest part of the work, and the GPU hours and on-call effort will dominate the budget over time.

The vLLM documentation lists several Kubernetes options, and they sit at different levels of abstraction. Native manifests give the most control and the least hidden behavior. Helm packages the same resources for repeatable installs. The vLLM production-stack adds a larger reference setup for serving. AIBrix, KServe, KubeRay, LeaderWorkerSet, llm-d and NVIDIA Dynamo add model lifecycle, scheduling, distributed-run or inference-routing capabilities, each with its own operating model. Choose by the problem you must solve: a single-node model on a few GPUs rarely needs more than manifests or Helm, while multi-node serving or a shared model platform for several teams justifies one of the heavier options. Confirm each project's current status and support model before you commit.

Three GPU-specific issues shape the cluster work. First, GPU scheduling needs the device plugin, node labels, taints and resource requests to match what the scheduler sees, or pods wait indefinitely. Second, model files can run to tens of gigabytes, so you must decide where weights live, how they reach each node and whether each replica downloads them again. Third, startup is slow because weights load and the engine prepares memory, which affects readiness probes and rollout speed. Ask your team to measure these on your own hardware rather than relying on estimates.

Multi-node models add a security decision. The vLLM security documentation states that communication between nodes in a multi-node deployment is insecure by default, with no authorization or encryption. Before you split a model across nodes, confirm that those nodes sit on an isolated network segment, restrict pod-to-pod traffic with network policies, and decide whether the inter-node path must be encrypted. Treat this as an architecture gate, not a later hardening task. If the cluster cannot provide that isolation, a single-node design or a dedicated serving cluster is the safer choice.

Which Kubernetes objects make up a vLLM deployment

A vLLM deployment on Kubernetes is a set of linked objects rather than a single manifest. Each object controls one part of serving: the process, the accelerator, the model files, the network path, health and the multi-node backend. Misconfiguring one usually shows up as a symptom in another, so review them together.

The vLLM server container

The pod runs the server started with vllm serve, which exposes the OpenAI-compatible endpoints /v1/chat/completions, /v1/completions and /v1/embeddings. Confirm the image tag and the model name the server loads, because applications depend on both. A wrong model argument or an unpinned image tag changes responses after a restart without any change to your manifests.

GPU resource requests and node selection

The container requests GPUs through the accelerator resource name exposed by your device plugin, and node selectors or affinity rules place it on nodes with the right hardware. Check that the requested count matches the tensor parallel size passed to the server. A mismatch leaves pods pending or causes the server to fail at startup on a node with too few devices.

Model weight storage

Weights reach the pod either from a persistent volume prepared ahead of time or by downloading at startup. A prepared volume gives predictable start times and avoids pulling large files on every restart. Startup downloads depend on outbound access and credentials, so confirm both in an isolated network before the first rollout.

Service and ingress or gateway

A Service gives the pods a stable address, and an Ingress or gateway exposes the chosen endpoints to callers. Expose only the routes meant for users, because the vLLM API key does not cover every path, including /metrics and /health. An overly broad route can publish control or metrics endpoints that should stay internal.

Liveness and readiness probes

Probes against the /health endpoint tell Kubernetes when a pod can take traffic and when to restart it. Set the readiness delay to cover model loading, since a large model can take a long time to become ready. A probe that fails during loading causes restart loops that look like crashes in the server logs.

Ray or multiprocessing backend for multi-node runs

Models larger than one node use pipeline parallelism across nodes, coordinated by Ray or the vLLM multiprocessing backend. Inter-node traffic is insecure by default, so the nodes must sit on an isolated network. Confirm worker connectivity and the backend choice before scaling, because a failed worker can stall the whole group while the head pod still reports healthy.

Choosing between native manifests, Helm, the production-stack and KServe

This table compares six ways to run vLLM on Kubernetes: native manifests, Helm, the vLLM production-stack, KServe, KubeRay and LeaderWorkerSet. Read each row for the team size, model count and scaling needs where the option fits, then for who maintains its charts or CRDs and how it couples to vLLM releases, which arrive about every two weeks. No option is the default. Start with how many models you serve and whether you already run KServe or Ray.

OptionWhen it fitsOperational cost
Native manifestsSmall team, one or two models, no existing KServe or Ray, and a preference for seeing every object in your repository.Your team writes and maintains the Deployment, Service, storage and autoscaling objects. Each vLLM image change needs a manifest edit and a test run.
HelmSeveral models or environments that differ mainly by values, and a team comfortable reading and reviewing charts.Someone must own the chart, including forks. Check which chart version pins which vLLM image tag before each upgrade.
vLLM production-stackTeams wanting a reference deployment for vLLM on Kubernetes with its router and monitoring pieces included. Confirm it covers your model list.You track its release and chart changes alongside vLLM's own releases. Ask the project who maintains the chart and how often it is updated.
KServeAn existing KServe platform, or many models that need model-level rollout, canary traffic and scale-to-zero behavior.KServe controllers and CRDs must be installed, upgraded and secured by your platform team. KServe and vLLM versions need joint retesting.
KubeRayExisting Ray usage, or multi-node models where Ray serves as the distributed runtime for vLLM.Adds the KubeRay operator and Ray cluster objects to run. Ray and vLLM version pairs need a compatibility check at each upgrade.
LeaderWorkerSetModels too large for one node, where a leader pod and worker pods must start, scale and fail together.Adds the LeaderWorkerSet controller to run. Worker traffic must sit on an isolated network, because vLLM multi-node communication is insecure by default.

How to build a vLLM Kubernetes deployment in order

This sequence takes a vLLM deployment from an empty cluster to a verified service that answers chat requests. Each step closes with a check, so a failed check stops the work before the next layer depends on it. Run the steps in order, because later steps assume the earlier ones passed.

  1. Confirm GPU node pools and device plugin

    Your platform team confirms that the cluster has a node pool with the target accelerators, that the GPU device plugin for your hardware vendor is running on those nodes, and that each GPU appears as allocatable capacity. Run a short test pod that requests one GPU and lists the devices it can see. The step closes when that pod schedules, sees the expected devices and exits cleanly. Confirm driver and runtime versions with your hardware vendor's documentation, since vLLM supports several GPU families and each has its own software stack.

  2. Pin the vLLM image to a release tag

    The engineer deploying the workload selects one specific vLLM release from the project's GitHub releases page and uses that exact image tag in the manifest or Helm values. vLLM ships new minor releases about every two weeks, so an unpinned or latest tag changes the running version without a review. Record the image tag, the base image digest and the model revision in your change record. The step closes when the image pulls, the pod starts and the server log reports the version you pinned.

  3. Stage model weights and confirm chat template

    Place the model weights where the pod can read them before it starts: a persistent volume, an object store bucket reachable from the cluster, or an init container that downloads a fixed revision. Choose the option that fits your network policy, and confirm the model license permits your use. For chat models, confirm the model ships a chat template. The chat completions endpoint needs one, so if the model lacks it, supply one through the chat template option. The step closes when the files match your recorded checksums and a local template render produces the prompt format you expect.

  4. Write Deployment with GPU requests and probes

    Write the Deployment with the pinned vLLM image, the serve arguments for the model, and a GPU resource request that matches the node pool. Set a startup probe with enough time for weight loading and initialization, because large models can take a long time to become ready, then add readiness and liveness probes against the health endpoint. Set memory and shared memory limits, and load the API key from a Kubernetes secret. The step closes when the rollout reaches ready state and the pod logs show the model loaded on the expected GPUs.

  5. Add Service and gateway route

    Create a ClusterIP Service that selects the vLLM pods, then expose it through your ingress or API gateway with a route that allows only the endpoints users need, such as the chat completions path. The vLLM security documentation notes that the API key does not cover every endpoint, so the gateway is where unauthenticated control and metrics paths get blocked. The step closes when a request from inside the cluster reaches a pod through the Service, and a request to a blocked path is refused at the gateway.

  6. Run a single-replica smoke test

    Keep the deployment at one replica and send a short request to the chat completions endpoint with a test prompt and a small output limit. Confirm the response structure is correct, the model name matches what you served, and the output is coherent for the prompt. Then check the metrics endpoint from inside the cluster to confirm request and token counters increase. Record the latency of this single request as a baseline only, not as a capacity figure. The step closes when the smoke test passes after a clean restart.

  7. Add multi-node capacity only where needed

    Add a second node pool or a LeaderWorkerSet only for models that cannot fit on one node and require multi-node parallelism. vLLM uses tensor parallelism within a node and pipeline parallelism across nodes, and its security documentation states that multi-node communication is insecure by default, so place those nodes on an isolated network before you start. Confirm node placement, interconnect and cluster networking with the team that runs your cluster. The step closes when the multi-node build passes the same smoke test as the single-node build and inter-node traffic is confirmed isolated.

How GPU scheduling and model caching shape the pod spec

The accelerator request in the pod spec decides where a vLLM pod can run and whether it starts at all. A pod asks for GPUs through a resource limit exposed by the accelerator's device plugin, and the Kubernetes scheduler only places it on a node that advertises at least that many free devices. Node selectors and taints then narrow the choice to GPU node pools with the right accelerator model, memory and interconnect. If the requested count is higher than any single node provides, the pod stays Pending indefinitely. If the count is lower than what the model needs for its weights and KV cache, the pod may schedule but fail while loading the model or during the first requests, often with an out-of-memory error that looks like a runtime bug. Confirm the GPU count per node in your pool and size the request to it before you write the manifest.

Tensor parallelism is the setting that ties the GPU count to the model. vLLM splits a model across GPUs within one node through tensor parallelism, so the tensor parallel size in the server arguments must match the number of GPUs the pod requests and those GPUs must be on the same host. Spreading one replica across nodes is a different mode (pipeline parallelism with Ray or the built-in multiprocessing backend), and it needs a network that the vLLM security docs describe as insecure by default. Keep the GPU limit, the tensor parallel setting and any shared memory volume for inter-process communication in agreement. A mismatch in any of the three is a common cause of pods that crash at load time rather than failing to schedule.

Model weights can reach the pod in three ways, and the choice shapes cold start time, storage cost and version control. A persistent volume shared across replicas keeps one copy of the weights, so new pods start quickly and every replica runs the same files. It requires a storage class that supports the access mode you need, and it adds a recurring storage charge. A pre-populated cache, built into a node image or loaded onto local disks, gives the fastest and most predictable startup but ties weight updates to image or disk rebuilds. Downloading at startup needs no storage setup, yet every new pod pulls gigabytes of weights, which lengthens scale-out and makes restarts depend on the model host being reachable. Whichever path you choose, pin the model by revision or checksum so the running weights are known and reproducible.

The scheduling configuration depends on the accelerator type. vLLM runs on NVIDIA CUDA, AMD ROCm and Intel XPU GPUs, and each one has its own device plugin, resource name, container image and driver or runtime stack. An NVIDIA pool typically uses the NVIDIA device plugin and a matching CUDA driver, while AMD and Intel pools use their vendors' plugins and resource names. The vLLM image and build must match the accelerator, so a manifest written for one vendor will not schedule or run on another without changes. Before writing the pod spec, confirm with your cluster team and the device plugin vendor the exact plugin version, driver version, runtime class and resource name that your nodes expose, and check them against the vLLM installation requirements for the release you plan to run.

What drives vLLM Kubernetes deployment effort and how to keep it down

This table lists the factors that most change the build and run effort of a vLLM deployment on Kubernetes, with the recurring work each one creates and one practical way to reduce it. Read each row against your own model list, hardware estimate and compliance obligations to see which drivers apply to you. The main takeaway is that effort grows less with the number of models than with how many distinct configurations, node pools and delivery paths you must maintain.

DriverWhy it raises effort or recurring workHow to keep it down
Number of models and their sizesEach model needs its own weights, flags, memory budget, probes and rollout checks. Larger models may need several GPUs, which multiplies scheduling and capacity planning per model.Use one model per deployment with a shared chart, so each model is a values file change rather than a new design.
Single-node versus multi-node modelsMulti-node serving uses pipeline parallelism across nodes and Ray or the built-in multiprocessing backend. vLLM's security docs say inter-node traffic is insecure by default, so the network must be isolated, which adds design and ongoing review work.Limit multi-node models to those that need them, use a group-based workload such as LeaderWorkerSet or KubeRay only for those, and keep single-node models on a standard deployment.
GPU node pools and accelerator typesEach pool needs its own driver stack, node labels, taints, device plugin settings and image variants. Supporting NVIDIA CUDA, AMD ROCm and Intel XPU separately roughly doubles the test matrix for each added type.Standardize on one accelerator type for the first release and document the pool labels in the chart so new pools are configuration only.
Autoscaling requirementsScaling GPU nodes is slower than scaling pods, and model load time can be long. Autoscaling rules need tuning against queue depth and KV cache use, and cold starts must be tested against user latency targets.Start with fixed replica counts, collect metrics from the /metrics endpoint for a baseline, and add autoscaling only once thresholds are measured.
Model weight volume and transferLarge weight files must reach every node that serves them. Pulling from a remote hub on each pod start repeats transfer work, slows startup and creates versioning gaps.Use a shared model cache on a persistent volume or a pre-staged image or artifact store, and pin model revisions in the values file.
Integration with existing gatewaysvLLM's --api-key does not cover every endpoint, so an authenticating gateway or reverse proxy with an endpoint allowlist is usually needed. Each gateway adds routing, rate limit and header rules to maintain.Define one gateway route template covering only the OpenAI-compatible endpoints in use, and test it as part of the chart release.
KServe or Ray already in useExisting KServe or Ray estates bring their own CRDs, upgrade cycles and operators. Running vLLM beside them can duplicate autoscaling and routing, and the team must learn two control planes.Confirm early whether the platform team wants KServe, KubeRay or native manifests, then use the one already supported in-house rather than adding another.
Air-gapped deliveryContainer images, Helm charts, model weights, tokenizer files and chat templates must all be mirrored inside the network. Each vLLM release then needs a separate import and verification step.Maintain pre-approved image mirrors and an internal chart repository, and set a single import procedure for each new minor release.
Compliance evidenceAssessors expect records of which image digest, model revision and configuration ran in each environment, plus access and change logs. Producing these by hand after each change is recurring work.Generate version pins, configuration diffs and deployment records from the chart pipeline, and confirm the evidence format with your assessor before build starts.

How single-node, multi-node and air-gapped clusters differ

A single-node deployment runs vLLM on one Kubernetes node with one or more GPUs attached. The model is split across those GPUs with tensor parallelism, which keeps all inter-GPU communication inside one machine. Because no traffic leaves the node for model execution, the network design is simpler than in the other models, and most of the work is in GPU scheduling, memory sizing and the serving configuration.

Checks specific to this model:

  • GPU scheduling: confirm the device plugin exposes the correct number of GPUs and that the pod requests match the tensor parallel size.
  • Memory headroom: verify that weights, KV cache and activation memory fit on the chosen GPUs at your target context length.
  • Node affinity: pin the pod to nodes with the required accelerator type so a reschedule cannot place it on incompatible hardware.
  • Restart behavior: test how long model load takes after a pod restart, since weights are read again from storage.
  • Driver and runtime versions: record the CUDA or ROCm driver version on the node and match it to the vLLM image you deploy.

Operationally, this model has one failure domain, so a node failure takes the endpoint down until the pod reschedules. Confirm with your platform team how replacement capacity is provided. Ask any implementation partner to show the GPU and memory test results for your specific model before sign-off.

Running multi-node models on LeaderWorkerSet and KubeRay

A model that does not fit on one node cannot be served by a single pod. The model weights and the KV cache have to be split across GPUs on several machines, and vLLM can only do that if every participating process is up, reachable and started with the same configuration. For this reason the deployment has to treat a leader pod and its worker pods as one unit that starts together, becomes ready together and is replaced together. Scheduling them as independent Deployment replicas breaks that assumption, because a leader can come up while its workers are still pending and serve nothing useful. Inside a node, vLLM usually applies tensor parallelism, which splits each layer across the GPUs connected by a fast local interconnect, so every forward pass needs frequent communication between devices. Across nodes, the documented approach is pipeline parallelism, which assigns contiguous groups of layers to each node and passes activations along the chain. Pipeline stages communicate less often, but they still depend on the network between nodes for every step. Ask your platform team to measure the bandwidth and latency between nodes in the chosen cluster before you settle on a node count, because a slow path between stages often shows up as lower throughput rather than as an error. A multi-node group fails as a whole. If one worker crashes, loses its GPU or cannot reach the leader, the remaining processes block on collective operations and may hang rather than exit, so the leader can report a healthy state while no requests complete. Your runbook should define how the group is detected as unhealthy, how long it may remain stalled and whether the entire group is restarted. Confirm that your health checks test inference, not only process liveness, and that a single pod failure triggers recreation of the whole group. LeaderWorkerSet and KubeRay solve different parts of this problem, and most multi-node designs need one or the other, sometimes both. LeaderWorkerSet manages the group lifecycle: it creates a leader and a fixed set of workers as a unit, gives them stable identities for discovery and handles group-level rollout and restart. KubeRay manages a Ray cluster on Kubernetes, including head and worker pods, the Ray runtime and autoscaling of its workers. vLLM can use Ray as its multi-node backend, while it can also use its own multiprocessing backend, so the choice is partly a choice of runtime. Before you commit, confirm four things with your own environment and the vLLM documentation for your version. First, which multi-node backend your model and vLLM release support. Second, that the network path between nodes is isolated, because vLLM's security documentation states that inter-node traffic is insecure by default and has no authorization or encryption. Third, the restart behavior you want for a failed worker, including whether a KubeRay or LeaderWorkerSet restart recreates the whole group. Fourth, how the scheduler places pods on GPU nodes with the required interconnect, since a group split across poorly connected nodes will not perform as planned.

Securing the cluster around vLLM

A vLLM server holds model access credentials, serves a large compute resource, and in multi-node runs sends unencrypted traffic between nodes. The controls below sit in the Kubernetes layer around the engine, so the cluster configuration decides whether the server is reachable only through the path you intended. Each card names one control and what to verify before go-live.

Store tokens and registry credentials in Secrets

Model repository access tokens and container registry credentials belong in Kubernetes Secrets, referenced from the pod spec, not written into Deployment manifests or Helm values committed to source control. Check that the manifests in your repository contain no token strings, that the Secrets are encrypted at rest in your cluster, and that access to them is limited by RBAC to the namespace that runs vLLM. Rotate the tokens on a schedule you set.

Allow only the gateway to reach vLLM

Apply a NetworkPolicy to the vLLM pods that permits ingress only from the API gateway or reverse proxy pods on the serving port, and denies other namespaces by default. Confirm that your cluster's network plugin enforces NetworkPolicy, since a policy object that is not enforced protects nothing. Test the policy from a pod outside the allowed set to confirm the connection is refused.

Keep control and metrics paths off Ingress

Routes for /metrics, /pause, /resume and /abort_requests should not appear in any Ingress or Gateway resource that faces users or the internet. The vLLM --api-key option does not cover these paths, so an Ingress that forwards them exposes server state and the ability to halt or abort requests. Review every routing rule and allow only the inference paths your applications call.

Understand the limits of --api-key

The --api-key option protects the /v1, /v2, /inference and /cohere endpoints, but not /invocations, /pause, /resume, /abort_requests, /metrics or /health. The vLLM security documentation warns against relying on it alone and recommends a reverse proxy that allowlists only user-facing endpoints. Treat the key as one layer, and confirm in your own test environment which paths answer without it.

Isolate inter-node traffic in multi-node groups

In a multi-node deployment that spans nodes with pipeline parallelism, communication between nodes has no authorization or encryption by default. Place the pods of each serving group on an isolated network segment, such as a dedicated node pool or subnet, and restrict NetworkPolicy so that only group members exchange traffic on the inter-node ports. Confirm the ports your chosen backend uses before writing the rules.

How to prove the deployment works and fails safely

The acceptance suite for a vLLM Kubernetes deployment should prove three things: the model serves correct answers, the endpoints that must stay private are unreachable from outside the cluster, and the platform recovers from failure without someone repairing it by hand. Agree these tests with the client before go-live, because they become the definition of done for the implementation and the baseline for every later change. Start with readiness. The pod should report ready only after the model weights have loaded and the server can accept requests, so the test is to start a pod with a cold model cache, confirm it does not receive traffic while loading, and confirm that the readiness probe passes once loading completes. Then send one chat completion and one embeddings request through the gateway and check that the responses follow the OpenAI-style schema the client applications expect. Run the chat request against the model's chat template as well, using a fixed prompt with a known expected structure, because a missing or wrong template can produce output that looks valid but breaks the application's parsing. Confirm the running container's image tag matches the pinned release recorded in the change ticket, not the tag in the manifest alone. Next, test the boundary. From a host outside the cluster and outside the allowed network, request the control and metrics paths, including the paths the vLLM security documentation says the API key does not protect, such as /metrics, /health and /pause. Each request should be refused at the gateway or network layer. The vLLM documentation recommends a reverse proxy that allowlists only user-facing endpoints, so the test should confirm that the allowlist, not the API key, is what blocks these paths. Repeat the check from inside a user namespace to confirm that application teams cannot reach control paths either. The failure tests are the ones auditors and change reviewers ask about most. Delete a serving pod and confirm the replacement reloads the model and returns to service without manual steps. Drain a GPU node and confirm that pods reschedule to capacity that exists, that in-flight requests fail in a documented way, and that the service recovers. For a multi-node model deployed with LeaderWorkerSet or another group scheduler, stop one member and confirm the whole group either recovers or is marked failed together, never left serving partial results. Ask the platform team to confirm how the chosen group controller behaves, because this depends on the scheduler and the version in use. Record the evidence in a form that survives a change review: the test plan with expected results, dated run logs, the pinned image digest and model file checksums, the rendered manifests, screenshots or exported outputs of the refused requests, and the pod events from each failure test. Keep the results with the release record. Auditors and certification bodies decide whether this evidence is sufficient for a given control, so confirm the required format with them early.

What to hand over and keep running after go-live

A vLLM deployment on Kubernetes stays healthy only if someone owns each layer after go-live: the deployment code, the model rollout, the accelerator nodes, the vLLM version, and the people paged when something breaks. The cards below list what should change hands and what your team must run from day one, so ownership gaps are found before production traffic depends on them.

Deployment code with per-environment values

Hand over the Helm chart or native manifests in version control, with a separate values file for each environment that sets model names, replica counts, GPU requests and endpoint settings. Confirm that a clean cluster can be rebuilt from the repository alone, and that no environment setting lives only in a live cluster object. Plan which team reviews changes before they reach production.

Model rollout and rollback runbook

A runbook should state how a new model or model revision is added, how traffic moves to it, how health is checked, and how the previous version is restored. Include the chat template each model requires, since chat completions depend on it. Rehearse the rollback in a non-production cluster before go-live, so the steps are known to work under pressure.

Register of pinned image and model versions

Keep a register that records the exact vLLM image tag, the model identifier and revision, and the chart version running in each environment. vLLM ships new minor releases about every two weeks, so pinning is the only way to know what served a given response. Review the register at each upgrade cycle and record who approved each change.

GPU node pool and driver ownership

Assign a named owner for the GPU node pool, the NVIDIA driver and CUDA runtime, the device plugin, and node scaling rules. Driver and CUDA versions must match what the pinned vLLM image expects, so a driver change needs the same review as an application change. Confirm which team handles node replacement and hardware faults, and who is contacted by the cloud or data center provider.

Upgrade procedure for vLLM releases

Define how a new vLLM release is tested, approved and rolled out. Releases arrive about every two weeks, so the procedure needs a fixed cadence, a regression run against your own prompts and models, a performance comparison, and a rollback path. Decide in advance which releases are skipped, and who signs off. The sibling topic on upgrades covers the details.

Configuration backup and model cache

Model weights can usually be fetched again from their source or a model cache, so the backup priority is configuration: manifests, values files, secrets references, the image register, gateway and proxy rules, and monitoring configuration. Confirm the weights source and cache location are documented and that the cache can be rebuilt. Test a restore of the configuration into an empty cluster at least once.

On-call ownership and escalation

Name the people or rota who receive alerts for the serving endpoints, the GPU nodes and the gateway, and define the escalation path to the platform team and the vendor support contact. Write down who can approve a rollback at night and what severity each alert carries. Monitoring alerts are covered in the sibling topic on vLLM monitoring.

Questions buyers ask before hiring help with vLLM on Kubernetes

Does vLLM require a license fee to run in production?

No. vLLM is open-source software licensed under Apache-2.0 and has no paid edition, so the software itself carries no license fee. The money goes elsewhere: GPU or other accelerator capacity, the surrounding infrastructure such as networking and storage, implementation work, and the staff who operate the platform after go-live. When you request a quote, ask for these components separately so you can see which are one-time and which recur. Accelerator and staffing costs can outweigh setup work over time, so plan utilization and on-call coverage early. Also confirm the license terms of any third-party tools you add, such as a gateway or monitoring stack, because those are separate from vLLM.

What drives the cost and timeline of a vLLM Kubernetes project?

The scope drives most of it: how many models you serve, whether any model spans multiple nodes, how many GPU node pools you need, and which gateway, authentication and monitoring pieces must be built. Model compatibility checks and chat template setup add effort when models are unusual. Security requirements such as network isolation between nodes, endpoint allowlisting and evidence collection add more. Timing depends on GPU procurement or rental lead times, access approvals, and how quickly your security reviewers respond. Ask any provider for a written scope that lists models, environments, deliverables and acceptance tests, because that document turns a rough estimate into a fixed quote. DeployOpen works to fixed scope agreed in writing before work starts, so a clear scope is the main lever you control.

Can our in-house Kubernetes and GPU team deploy vLLM without outside help?

Often yes for a basic deployment, but the harder parts are where teams usually need help. A capable team can apply manifests or Helm charts, schedule GPUs and mount model storage. The gaps tend to appear in multi-node serving, where vLLM's insecure default inter-node communication must be isolated on a protected network, in model compatibility and chat template work, in driver and CUDA alignment, and in running endpoints behind an authenticating proxy. Check whether your team has handled production GPU incidents and upgrade testing, since vLLM ships minor releases about every two weeks. A short internal pilot on one model answers the question faster than a debate. If gaps appear, a partner can fill them under a fixed-scope engagement while your staff keep ownership.

Which Kubernetes option should we choose: Helm, production-stack, KServe or LeaderWorkerSet?

Start with your models and topology, not the tool. Helm charts and native manifests give you direct control and fewer moving parts, which suits a small number of single-node models on a team that wants to own every resource. The vLLM production-stack packages a broader serving setup, and KServe adds model-serving abstractions that fit a platform already built around it. LeaderWorkerSet fits multi-node models that need coordinated groups of pods. The vLLM documentation also lists KubeRay, AIBrix, llm-d and NVIDIA Dynamo. Score each option against your existing platform, your team's skills, your upgrade cadence and your need for multi-node serving. Confirm the current capabilities of each option in its own documentation before you commit, because these projects change quickly.

What do we need to provide before a vLLM engagement starts?

Start with access and decisions. You need a Kubernetes cluster or an agreed plan to create one, administrative access for the platform team, and named owners for approvals. Provide GPU capacity, whether owned, reserved or rented, with node types and counts confirmed in writing. Decide which models you will serve, confirm their licenses and state where weights will be stored, since model choice affects memory, parallelism and chat template needs. Name the reviewers for network, identity and security so testing is not blocked. Share the expected application endpoints and sample traffic, and describe any data handling rules. Confirm how logs and metrics may leave the cluster. Gather these inputs before scoping so the written scope reflects your actual constraints.

Does DeployOpen certify our vLLM deployment for compliance?

No. DeployOpen does not issue audit reports, attestations or certifications. Independent auditors and certification bodies perform that work. DeployOpen can plan, implement and document a vLLM deployment so that the systems, configuration, access controls, logging and evidence your assessor requests are in place and organized. Agree the compliance framework and control expectations with your assessor first, because those expectations determine which evidence is needed. Ask any provider to state in writing exactly what they deliver. For a vLLM platform, evidence typically covers endpoint access controls, network isolation of nodes, model provenance records, patch and upgrade history, and monitoring. Confirm each item with your auditor before the work starts.

Is the vLLM API key enough to secure our endpoints?

No. The vLLM --api-key option protects endpoints under /v1, /v2, /inference and /cohere, but not /invocations, /pause, /resume, /abort_requests, /metrics or /health. The vLLM security documentation warns against relying on it alone and recommends a reverse proxy that allowlists only the endpoints meant for users. Put an authenticating gateway in front of the service, block control and metrics paths from untrusted networks, and collect metrics from a protected internal path. Confirm the endpoint list for your vLLM version, since routes can change between releases. Then test from outside the cluster to verify that blocked paths return denials, and add those checks to your acceptance tests.

How DeployOpen scopes, builds and hands over vLLM on Kubernetes

DeployOpen plans, implements, hardens, documents and supports vLLM on Kubernetes inside your own cloud accounts, data centers or air-gapped networks. Engagements are fixed-scope, with scope and deliverables agreed in writing before work starts, and ongoing support is available as a retainer.

How we scope

  • Confirm which target models, API endpoints and chat templates the written scope must cover
  • Agree the Kubernetes path in writing: native manifests, Helm, the vLLM production-stack, KServe or LeaderWorkerSet
  • Document accelerator type, node layout and whether multi-node pipeline parallelism is required

How we build

  • Deploy vLLM onto your cluster with GPU scheduling, model caching and pinned image versions
  • Place multi-node traffic on an isolated network, since vLLM node-to-node communication is insecure by default
  • Test OpenAI-compatible endpoints and expose only user-facing routes through a reverse proxy or gateway

How we hand over

  • Deliver manifests or charts, configuration, and runbooks covering startup, scaling and model changes
  • Document the Prometheus metrics endpoint setup, kept off public networks, with alert and dashboard notes
  • Walk your platform and operations staff through restore steps, upgrade procedure and access controls

How we support

  • Offer ongoing support, version upgrades and continuous testing as a retainer after handover
  • Test vLLM minor releases before rollout, which ship about every two weeks, against your models
  • Agree in the quote which support tasks, response expectations and environments the retainer covers

Talk to our team.

Tell us what you're working on, whether it's a deployment, an audit, a security test or a cyber range. You'll speak with an engineer who can help you scope it.

  • 30-minute call: free, with no obligation.
  • NDA on request: we can sign before you share details.
  • Clear next steps: a scope and plan after the call.