Skip to main content

Overview

By default, vLLM downloads model weights from Hugging Face Hub at pod startup. In air-gapped or regulated environments you may prefer to host weights in your own infrastructure and have the cluster pull from there instead. Two approaches are supported: Both approaches use the same pattern:
  1. Upload model weights to your storage once, from a machine with internet access.
  2. An init container on the vLLM pod copies weights to the PVC before vLLM starts.
  3. vLLM loads from the local PVC path — no HuggingFace token required.

Option A — Git LFS

1. Set up Git LFS in your repository

Git LFS stores large binary files (model weights) in a separate blob store while keeping pointer files in the repo. It is supported by GitHub, GitLab, Gitea, and Bitbucket.

2. Download and push model weights

On a machine with internet access:
LFS objects (the large weight files) are uploaded to your Git provider’s LFS storage automatically.

3. Create a pull secret in the cluster

Create a read-only access token in your Git provider, then store it as a Kubernetes Secret:
For GitHub, create a fine-grained PAT with read-only access to the model repository. For GitLab, use a project deploy token with read_repository scope. For Gitea, create an application token.

4. Configure the vLLM init container

Replace the busybox init container with an alpine/git image that clones the repo and pulls LFS files. The model weights land on the PVC at /data/model before vLLM starts.
The init container skips cloning if the weights directory already exists. This avoids re-downloading on pod restarts. If you push new weights to the repo, delete the PVC and let the pod reprovision.

Option B — MinIO

Since MinIO is already running in the cluster, you can use it as a model registry. Upload weights once; the init container fetches them on first pod start.

1. Upload model weights to MinIO

On a machine with internet access, download the weights and push to MinIO:
Verify:

2. Configure the vLLM init container

Replace the busybox init container with minio/mc to pull weights from the models bucket to the PVC:
minio-credentials is the same Secret used by the MinIO subchart itself. See MinIO Setup for how to create it. The secret keys are root-user and root-password.

Monitoring the Init Container

A successful pull ends with:
After the init container exits, vLLM starts and loads from /data/model.

Updating the Model

To deploy a new version of the weights: