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:
- Upload model weights to your storage once, from a machine with internet access.
- An init container on the vLLM pod copies weights to the PVC before vLLM starts.
- 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: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 thebusybox 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.
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:2. Configure the vLLM init container
Replace thebusybox 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
/data/model.